可能重复:
PHP:"Notice:Undefined variable"answers"Notice:Undefined index">
所以,我目前正在学习PHP,并且正在读一本关于密码的md5函数的书,所以我决定试一试,看看它的进展如何。我还决定使用POST方法而不是GET,因为我看到人们说它更安全,并且不让变量出现在URL上。
对于我的测试项目,我制作了一个非常简单的表格,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<form action="dologin" method="POST">
<table border="0">
<tbody>
<tr>
<td>Username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password"></td>
</tr>
</tbody>
</table>
<input type="submit" value="Login">
</form>
</body>
</html>
问题是,当我在BOTH字段中输入值并单击"登录"时,我会在另一个PHP文件中得到以下输出。
Notice: Undefined index: username in C:'xampp'htdocs'md5'home'dologin'index.php on line 11
Username non existent
下面是"/dologin/index.php"文件的代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
mysql_connect("localhost", "root") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$query = "SELECT password FROM users WHERE username='".$_POST['username']."'";
$result = mysql_query($query);
$row = mysql_num_rows($result);
if(isset($row)){
$password = (mysql_result($result,$row - 1));
$enteredpassword = md5("w@#$@#".$_GET['password']."^#3f%#^");
if($password == $enteredpassword){
if(!isset($_COOKIE['PHPSESSID'])){
session_start();
}
$_SERVER['LOGIN_STATUS'] = true;
} else {
die("Access denied");
}
} else {
die("Username non existent");
}
?>
</body>
</html>
非常感谢在我的问题上提供的任何帮助,感谢您的阅读。
未定义索引意味着在$_POST数组的某个位置,没有键用户名的索引(键(。
您应该将发布的值设置为变量,以获得更干净的解决方案,这是一个很好的习惯。
如果我有类似的错误,我会这样做:
$username = $_POST['username']; // you should really do some more logic to see if it's set first
echo $username;
如果用户名没有出现,那就意味着我在某个地方搞砸了。你也可以,
var_dump($_POST);
查看您发布的内容。var_dump在调试方面非常有用。查看:var_dump
您应该检查是否定义了POST['username']
。使用上面的内容:
$username = "";
if(isset($_POST['username'])){
$username = $_POST['username'];
}
"SELECT password FROM users WHERE username='".$username."'"
首先,
确保有后
if(isset($_POST['username'])) {
// check if the username has been set
}
其次,也是最重要的一点,是对数据进行净化,这意味着
$query = "SELECT password FROM users WHERE username='".$_POST['username']."'";
是致命的危险,而是使用
$query = "SELECT password FROM users WHERE username='".mysql_real_escape_string($_POST['username'])."'";
请研究主题sql注入