清空$ _POST变量导致未定义的索引

时间:2015-12-16 09:28:49

标签: php html

我有一个带表单的login.html页面。表单接受用户名和密码,然后调用home.php页面。 home.php页面将用户名和密码分配给变量。

$username = $_POST["username"];
$password = $_POST["password"];

我还有一个changepassword.html表单页面,它接受oldpassword和newpassword并调用changepassword.php页面。

changepassword.php页面将旧密码和新密码分配给变量:

$oldpassword = $_POST["oldpassword"];
$newpassword = $_POST["newpassword];

在这个页面上,我还有一个链接可以回到home.php页面,但是当我点击它时,它会给我以下两个错误行:

Notice: Undefined index: username in [path] on line 19
Notice: undefined index: password in [path] on line 20

我怀疑这是因为changepassword.html表单没有这些变量所以它永远不会保存在$_POST上。

因此,当我从changepassword.php页面(而不是login.html页面)调用主页时,没有任何内容可以分配给这些变量。

我想摆脱这些错误,但不知道如何。我本以为我最初登录时会session_start()保存用户名和密码。

我在所有文件的开头都有session_start()(不知道这是否正确)。

1 个答案:

答案 0 :(得分:4)

有一个简单的三元条件:

$username = isset($_POST["username"]) ? $_POST["username"] : "";
$password = isset($_POST["password"]) ? $_POST["password"] : "";

所以你需要确定三件事:

  1. <form>方法。它应始终设置为method="post"
  2. <input />元素。它应该有明确的名称name="username"
  3. required属性:这可确保不会发送空数据。
  4. 最后,您的代码示例应该包含:

    <form method="post" action="">
      <input type="text" name="username" required="required" />
    </form>
    

    注意: 我遗漏了所有不必要的元素。

    你也有另一种方法可以做到这一点。通过使用警告抑制机制。在导致错误的语法之前添加@符号。在这种情况下,$_POST

    $username = @$_POST["username"];
    $password = @$_POST["password"];
    

    但不建议这样做。所以要小心使用它。