带SQL查询的PHP变量为空

时间:2014-11-18 20:04:25

标签: 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'";

但它也没有用,我遇到了同样的问题。

我使用了错误的方法,错误地输入了我的脚本,还是其他什么?任何反馈都表示赞赏!

2 个答案:

答案 0 :(得分:2)

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

$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 statementsPDO with prepared statements

答案 1 :(得分:0)

mysql_query()返回一个语句HANDLE,而不是您在查询本身中请求的字段的值。您必须获取一行数据,并从该数组/对象中获取值:

$query = "SELECT password FROM user_information WHERE email = '$loginEmail'";
                 ^^^^^^^^
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
echo $row['password'];
           ^^^^^^^^

注意突出显示的位。 SELECT field映射到$row['field']

但是,您仍然应该获得一些输出,例如“mysql语句句柄”或与您的代码类似的东西,表示查询失败并返回布尔值为FALSE。

尝试

$result = mysql_query($query) or die(mysql_error());
                             ^^^^^^^^^^^^^^^^^^^^^^

看看是什么爆炸了。

请注意,您很容易受到sql injection attacks的攻击。<​​/ p>