Isset仍然没有做好自己的工作

时间:2016-09-17 17:53:53

标签: php isset

我已经看到这个问题遍布堆栈溢出,但没有一种方法有帮助。

形式:

<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['']))

它返回每个人都得到的未定义的索引错误。

帮助将被大量推荐。

4 个答案:

答案 0 :(得分:0)

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

请尝试检查提交,因为用户名和其他字段并不总是设置。 我希望这是问题,因为如果没有HTML,问题就不清楚了。

答案 1 :(得分:0)

尝试在

中使用它

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;

答案 2 :(得分:0)

我建议使用empty()代替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;

?>

此外,在回显它们时,将变量放在引号内是没有必要的。

答案 3 :(得分:0)

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

我需要做的只是将data-ajax="false"添加到<form>标记中,现在一切都按照我希望它的工作方式进行。

感谢大家的建议和帮助。