1

我正在使用 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则截然不同。

4

1 回答 1

2

有几点可能与您的问题有关,也可能无关,但我不能忽视:

  1. SQL 转义字符串始终是最后发生的事情。不要 SQL 转义一个字符串,然后 sha1它。请参阅The Great Escapism了解什么是逃避。
  2. 使用时mysql_real_escape_string,在调用此函数之前需要先连接到数据库,因为它需要建立数据库连接才能完成其工作。
  3. 您正在混合 mysql 和 mysqli 扩展。使用其中一个,而不是两者的功能。
  4. 如果你正在使用 mysqli(你应该!),使用准备好的语句而不是手动 SQL 转义字符串和sprintf.

换句话说,目前你做的完全错误。首先解决这些问题,您的问题可能会随之消失。

于 2012-05-25T01:25:26.750 回答