我尝试使用PHP创建登录系统,但SQL查询未返回我期待的结果。
我有一个典型的用户名和密码页面,我使用用户在其中键入的内容来检查帐户。我知道数据库包含真实的用户名和密码,但对mysqli_num_rows
的调用始终返回0。
我做错了吗?
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query($con, "SELECT * FROM StaffTable WHERE staffNo='$username' AND password='$password'");
echo mysqli_num_rows($result); //This always prints out 0.
if(mysqli_num_rows($result) == 1)
{
echo "OK";
}
答案 0 :(得分:2)
忽略您声称知道的纯文本密码事物,或许这样......
$username = isset($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) ? $_POST['password'] : null;
$stmt = $con->prepare('SELECT 1 FROM StaffTable WHERE staffNo = ? AND password = ?');
if (!$stmt) {
throw new Exception($con->error, $con->errno);
}
$stmt->bind_param('ss', $username, $password);
if (!$stmt->execute()) {
throw new Exception($stmt->error, $stmt->errno);
}
if ($stmt->fetch()) {
echo 'OK';
}
总结......
答案 1 :(得分:0)
尝试更多内容
$username=$_POST['username'];
$password=md5($_POST['password']);
$query="SELECT * FROM StaffTable WHERE staffNo='".$username."' AND password='".$password."'";
$result=mysqli_query($con,$query);
if (mysqli_num_rows($result)==0)
{
echo "Incorrect Password Or Username Combo";
}
else {
while($row=mysqli_fetch_object($result)) {
$_SESSION['id']=$row['id'];
}
我想说的是,至少现在至少在加密中运行密码,并在了解更多有关您正在查看的内容时查看SQL注入和升级。 除了已经指出的内容之外,你的最大缺陷是
($con, "SELECT * FROM StaffTable WHERE staffNo='$username' AND password='$password'");
使用变量,您不能将它们放在查询中;你想要做更多的事情
($con, "SELECT * FROM StaffTable WHERE staffNo='".$username."' AND password='".$password."'");
如果您注意到我从纯文本中转义,那么将设置变量。您每次返回0结果的原因是因为您实际上是在搜索用户名$ username并使用$ password作为其密码。 祝你好运!