我正在尝试使用电子邮件或移动设备(在PHP和MySQL中)登录。但是我无法登录。
这是我的代码:
$sql = "SELECT * FROM tb_users WHERE (email='$loginEmailOrMobile' AND password='$loginPassword') OR (mobile_number='$loginEmailOrMobile' AND password='$loginPassword')";
$mysql = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($mysql) == 1)
{
echo "login successful";
$user = mysql_fetch_object($mysql);
echo $user->username;
}
else
{
die(mysql_error());
}
答案 0 :(得分:1)
我认为您的代码中存在许多问题。
我不会在这个答案中涵盖所有这些要点,以尊重您的原始代码,但我会尝试解释其中的许多代码。
首先,有一个经过测试和运行的代码可以完成这项任务。
<?php
//Connect to the database
$mysqli = new mysqli("localhost", "username", "password", "databaseName");
//These variables may be set from $_POST or anywhere
//it is only an example
$loginEmailOrMobile = 'an-email@example.com';
$loginPassword = '123456';
//!!Vulnerable to SQL injections**
$sql = "SELECT * FROM tb_users WHERE password = '$loginPassword' AND (email='$loginEmailOrMobile' OR mobile_number = '$loginEmailOrMobile')";
$result = $mysqli->query($sql);
//Only if we got 1 result
if (1 === mysqli_num_rows($result)) {
$user = mysqli_fetch_object($result);
echo $user->email;
} else {
die('We have not got only one result');
}
在此代码中,您可以看到:
mysql_error()
处理的案例不是错误的,所以我已将其删除以便处理案例。如果我得到0,甚至2个结果,那不是MySQL错误,但也许我没有用户或超过1的凭据。您的SQL查询不是一个准备好的语句,我没有触及它以尊重您的代码而不是完全重写它。但我真的建议你看看mysqli prepared statements
您似乎正在使用普通密码(除非您已经对其进行了哈希处理)。建议在将密码插入数据库之前对其进行哈希处理,并仅比较哈希值。请查看crypt()。