【发布时间】:2012-12-16 10:58:38
【问题描述】:
可能重复:
PHP: “Notice: Undefined variable” and “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>
问题是,当我在两个字段中输入值并单击“登录”时,我在另一个 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>
非常感谢您对我的问题的任何帮助,感谢您的阅读。
【问题讨论】:
-
您似乎更有可能在
$_GET['password']上收到未定义的索引通知,因为此表单是作为 POST 发送的。 -
在继续这个项目之前,start reading about SQL injection 并使用准备好的语句。旧的
mysql_*()函数将在下一个主要 PHP 版本中弃用,建议您切换到更新的 API,如 PDO 或 MySQLi。 -
pssstt:在您的逻辑 (index.php) 文件的顶部,将其放入:var_dump($_POST);这将允许您查看您在页面之间传递的内容。
-
在
$_POST(var_dump($_POST)) 上做一个 var_dump。请发布结果xD -
另外,我希望
$_GET['password']只是一个错字。你真的不应该通过 URL 查询来传递密码。
标签: php http-post undefined-index