我有一个带表单的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()
(不知道这是否正确)。
答案 0 :(得分:4)
有一个简单的三元条件:
$username = isset($_POST["username"]) ? $_POST["username"] : "";
$password = isset($_POST["password"]) ? $_POST["password"] : "";
所以你需要确定三件事:
<form>
方法。它应始终设置为method="post"
。<input />
元素。它应该有明确的名称name="username"
。required
属性:这可确保不会发送空数据。最后,您的代码示例应该包含:
<form method="post" action="">
<input type="text" name="username" required="required" />
</form>
注意: 我遗漏了所有不必要的元素。
你也有另一种方法可以做到这一点。通过使用警告抑制机制。在导致错误的语法之前添加@
符号。在这种情况下,$_POST
:
$username = @$_POST["username"];
$password = @$_POST["password"];
但不建议这样做。所以要小心使用它。