Isset 仍然没有做好它的工作

Isset still not doing its job

我在整个堆栈溢出中都看到了这个问题,但是 none 的方法有所帮助。

表格:

<form action="login.php" method="POST">
      <input name="username" type="text" placeholder="User Name">
      <input name="rawpassword" type="password" placeholder="Password">
      <input value="Login" type="submit">
</form>

Login.php:

// Gets user entered details from form.
if (isset($_POST['username'])) {
  $username=$_POST['username'];
} else {
  $username=null;
}
if (isset($_POST['rawpassword'])) {
  $rawpassword=$_POST['rawpassword'];
} else {
  $rawpassword=null;
}

// Hashes password through SHA-1.
$password = sha1($rawpassword);

echo "$username";
echo "$rawpassword";
echo "$password";

我的问题是

if (isset($_POST['']))

返回为 false 并将使变量 null 和 echos null(无)。但如果我这样做:

if (!isset($_POST['']))

它returns每个人都会遇到的未定义索引错误。

将不胜感激。

if (isset($_POST['username']) && isset($_POST['submit'])) {
  $username=$_POST['username'];
}

请尝试检查提交,因为用户名和其他字段并不总是设置。 我希望这会成为问题,因为没有 html.

问题不清楚

尝试在

中使用它

HTML

<form action="login.php" method="POST">
  <input name="username" type="text" placeholder="User Name" required>
  <input name="rawpassword" type="password" placeholder="Password" required>
  <input value="Login" type="submit" name="Login">
</form>

PHP

<?php
if (filter_input(INPUT_POST,'Login')==='Login') {
  $username=$_POST['username'];
  $rawpassword=$_POST['rawpassword'];
  // Hashes password through SHA-1.
  $password = sha1($rawpassword);
} else {
    $username='';
    $rawpassword='';
}


echo $username;
echo $rawpassword;
echo $password;

我建议使用 empty() instead of isset()。因为 isset() 只会检查 (POST) 变量是否已设置而不是 NULL。它不会检查它是否为空。如果有人只是点击提交而没有输入任何用户名或密码,您的代码仍然会接受。如果您改用 empty(),它还会检查用户名和密码是否不为空。由于 empty()isset() 完全相同,而且还会检查它是否不为空,因此不再需要使用 isset().

<?php

if(!empty($_POST['username'] && !empty($_POST['rawpassword'])){
    $username = $_POST['username'];
    $rawpassword = $_POST['rawpassword'];

    // Hashes password through SHA-1.
    $password = sha1($rawpassword);
} else {
    $username = null;
    $rawpassword = null;
}

echo $username;
echo $rawpassword;
echo $password;

?>

此外,在回显变量时不必将变量放在引号内。

我已经解决了我遇到的问题,显然我没有做足够的研究来发现问题是 JQuerymobile(应该提到我正在使用 JQuerymobile)有它自己的请求页面的特殊方式.

我需要做的就是将 data-ajax="false" 添加到 <form> 标签中,现在一切都按照我希望的方式运行。

谢谢大家的建议和帮助。