【发布时间】:2012-05-31 14:34:33
【问题描述】:
我正在使用 Netbeans 在 PHP 中编写一个注册/登录表单。为了实现这一点,我在 scripts.php 文件中提供了登录、注册和数据库连接功能,该文件通过 include 调用加载。
嗯,我的登录功能就是用这个
$username = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
$query = sprintf("SELECT * FROM users WHERE username='%s' AND password='%s'", $username, $password);
$link = connectDB();
$results = mysqli_query($link, $query);
连接到数据库并获取结果。验证将在稍后进行。
对于我的注册逻辑,我使用几乎相同的东西:
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
//check if user name and password match conditions
$link = connectDB();
$query = "SELECT * FROM users WHERE username = '" . $username . "'";
$results = mysqli_query($link, $query);
注册页面加载正常,但登录页面有一个错误文本打印输出,指出登录函数中有一个未定义的索引“用户名”。这发生在页面加载时,并且没有调用任何函数。
但是,在注册功能中使用几乎相同的布局,我没有收到错误。
为什么会这样?
编辑
我发现了问题。
我使用mysqli_connect 打开数据库连接,但使用mysql-real_escape_string 函数。两者不兼容,加上i 就完全不同了。
【问题讨论】:
-
这意味着
$_POST没有带有;username'键的元素... -
您需要先检查
isset($_POST['username']),因为该表格尚未发布。这个问题经常被问到,答案几乎总是一样的。 stackoverflow.com/search?q=%5Bphp%5D+undefined+index -
听起来您正在检查 $_POST['username'] 是否已发布表单。未发布时,
username是 $_POST 数组中的未定义索引。 -
那么为什么一个函数没有抛出这个错误,而另一个是?
-
@Jason:因为在一种情况下您会发送一个名为
username的 POST 变量,而在另一种情况下则不会。
标签: php undefined-index