2012-04-10 139 views
1

出于某种原因,我的PHP登录脚本保持返回“无效的电子邮件/密码组合”,但我知道我输入正确的电子邮件地址和密码。有没有人看到我可能做错了什么?了解嵌套如果... Else语句

<?php 

$email= $_POST['email']; 
$password= $_POST['password']; 

if (!empty($email) && !empty($password)) { 

    $connect= mysqli_connect("localhost", "root", "", "si") or die('error connecting with the database'); 
    $query= "SELECT user_id, email, password FROM users WHERE email='$email' AND    
    password='$password'"; 
    $result= mysqli_query($connect, $query) or die('error with query'); 

    if (mysqli_num_rows($result) == 1) { 
     $row= mysqli_fetch_array($result); 
     setcookie('user_id', $row['user_id']); 
     echo "you are now logged in"; 
    } else { 
     echo "invalid username/password combination"; 
    } 

} else { 
    echo" you must fill out both username and password"; 
} 

?> 
+1

没有好的缩进,很难理解你的代码... – dqhendricks 2012-04-10 23:25:17

+0

@dqhendricks刚刚编辑它! :-) – 2012-04-10 23:25:37

+0

@dqhendricks它的源代码很好,只是SO将标签作为4空格而不是标准8 – tobyodavies 2012-04-10 23:25:59

回答

1

照顾你得到那个时候mysqli_num_rows ($result)不等于1 ...我认为你应该做的是验证是否usernamepassword直接在数据库中存在.....这是唯一合乎逻辑的理由在你的脚本为什么你应该得到invalid username/password combination

如果你还有另外一个问题,让我知道

+0

这是(大部分)是true,但为什么会得到“无效的用户名”消息?只有当他有超过1名用户使用相同的密码和电子邮件时,才会发生这种情况...... – 2012-04-10 23:30:28

+0

它不能建议 - 能够拥有超过1个用户名和密码,但是您可以尝试'if(mysqli_num_rows($ result)> 0 )'只是为了验证这是错误形成的地方 – Baba 2012-04-10 23:34:13

2

我将其切换到说,

if (mysqli_num_rows($result) > 0) 

但除此之外,代码看起来像它应该工作。你确定$ _POST变量包含你认为应该包含的内容吗?你确定这个用户/合格组合存在于你的数据库中吗?

2

您的代码看起来不错。我会检查以下内容:

确保查询工作。我会回应查询并在您的数据库程序中的数据库上运行它,并查看结果。

确保你没有与电子邮件/密码组合超过1个用户 - 它会鸡奸了您的计数检查。

检查的详细信息您的文章并确保他们是正确的,你必须在数据库中(无杂散空格等)是什么。

最后,你会更好正确缩进和布置您的代码,看看它是多么容易在这里读到:http://codepad.org/DmtMuTpC

0

错误出现了,因为有数据库中的重复数据。