带有 SQL 查询的 PHP 变量为空

标签 php mysql database

我正在为我的网站创建登录名,但遇到了障碍。每次我运行 PHP 脚本来检查他们的密码是否与他们输入的电子邮件数据库中的密码匹配时,它都会返回不匹配的结果。为了检查问题,我让页面打印输入的值(用户名和密码)以及真实的密码值。真正的密码什么也没做,只是返回为空白。以下是我正在使用的代码。

$loginEmail = $_POST['loginemail'];
$loginPassword = $_POST['loginpassword'];
$query = "SELECT password FROM user_information WHERE email = '$loginEmail'";
$realLoginPassword = mysql_query($query);

if($loginPassword == $realLoginPassword){
  echo 'Success in login with ' . $loginEmail . '! Password: ' . $realLoginPassword . '! You have entered: ' . $loginPassword . '!';
}else{
  echo 'Your email at ' . $loginEmail . ' or password is incorrect!';
  echo '<br>';
  echo "You've entered: " . $loginPassword . " and the real one is: " . $realLoginPassword . "!";
}

我也尝试过:

$realLoginPassword = "SELECT password FROM user_information WHERE email = '$loginEmail'";

但它也不起作用,我也遇到了同样的问题。

我是否使用了错误的方法,输入了错误的脚本,或者其他原因?如有任何反馈,我们将不胜感激!

最佳答案

您尚未提取查询结果。试试这个

$loginEmail = $_POST['loginemail'];
$loginPassword = $_POST['loginpassword'];
$query = "SELECT password FROM user_information WHERE email = '$loginEmail'";
$result = mysql_query($query);  // alter this line
$checkPassword = mysql_fetch_array($result); // and this one

更好的身份验证方法是使用查询来检查电子邮件(或用户名)和密码是否匹配。如果它返回结果,那么您就知道用户已通过身份验证。像这样

$username = mysql_real_escape_string($_POST['email']); // this sanitizes the data
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT * FROM user_information WHERE email = '$email' AND password = '$password'";

然后提取并检查结果。这更加高效和稳健。

我已经使用 mysql 编写了这个答案,就像您使用它一样。但正如评论中所述,您必须至少使用 mysqli with prepared statements ,或PDO with prepared statements .

关于带有 SQL 查询的 PHP 变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27003011/

相关文章:

php - 使用 Drupal for AngularJS 从 MySQL DB 获取数据

database - Elasticsearch 合并查询

mysql - 简单的数据库设计问题

php - 使用 PHP 导入 .xlsx 文件

php - 烦人的 PHP 错误 : "Strict Standards: Only variables should be passed by reference in"

php - Yii2 - 分页查询

php - 我希望我的链接居中并且按钮仍然有效

mysql - 无法使用机器名连接到 SQLEXPRESS

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

mysql - 不必要的标准化