0

我正在尝试使用 mysqli 方法制作登录表单。我没有收到任何错误,但在这两种情况下(正确或不正确的身份验证)我都得到了 IF 条件结果的第二部分!“你没有权限!。”

<?php
include_once('db.php');
$eMail = mysql_real_escape_string($_POST["eMail"]);
$passWord = mysql_real_escape_string($_POST["psword"]);
$query  = "SELECT count(*) FROM users WHERE (email='$eMail' AND pass='$passWord')";
if( $query > 0 ) {
echo "You are allowed.";
}
else{
echo "You are not allowed!.";
}
$mysqli->close();
?>

我也将 if 条件改为以下

if( $mysqli->query > 0 ){}

我有一个名为 users 的表和两列(email,pass),其中包含用户的电子邮件和密码。现在你能告诉我我做错了什么吗?谢谢

4

4 回答 4

1

出于某种原因,您正在使用 mysql 和 mysqli 函数。这应该更新。这也是假设您的变量$mysqli包含有效的 mysqli 数据库连接:

<?php
include_once('db.php');
$eMail = mysqli_real_escape_string($mysqli,$_POST["eMail"]);
$passWord = mysqli_real_escape_string($mysqli,$_POST["psword"]);
$query  = $mysqli->query("SELECT count(*) FROM users WHERE (email='$eMail' AND pass='$passWord') LIMIT 1");
if( $mysqli->num_rows($query) > 0 ) {
    echo "You are allowed.";
}else{
    echo "You are not allowed!.";
}
mysqli_free_result($query);
$mysqli->close();?>
于 2012-11-20T17:56:12.633 回答
1

不鼓励使用 mysql_* 扩展来支持mysqli和/或pdo函数。

您的代码失败,因为没有调用该mysql_query函数,因此在您的代码的这一行中:

$query > 0 

您所做的就是验证您的 String 是否大于 0,这就是为什么您总是得到错误结果的原因。

我已经从面向对象的登录方法改编为(大部分)程序登录方法。

在下面查看通过将参数绑定到准备好的语句来处理用户输入的不同方法:

function login($email, $password, $mysqli){
    if($login_stmt = $mysqli->prepare("SELECT Pass,Salt from Users WHERE Email = ? LIMIT 1")){
        $login_stmt->bind_param('s',$email);
        //The line above prevents SQL Injection
        $login_stmt->execute();
        $login_stmt->store_result();

        $rows = $login_stmt->num_rows;

        $login_stmt->bind_result($db_pass,$salt); //Stores the result in the $db_pass and $salt variables
        $login_stmt->fetch();
        $password = hash('sha512',$password.$salt); //This is a method I'm using to encrypt using sha512 encription
        if($rows==1){//The user exists
            if($db_pass==$password){
            //User logged in, do your stuff here
                return true;
            } else { 
                //password not correct
                return false;
            }
        } else{
            return false; //no user
        }
     } else {
         //Prepared statement failed
         return false;
    }
}

这里的主要区别是准备好的语句如何bind_param防止代码上的 SQL 注入。

我希望它有所帮助。干杯

于 2012-11-20T18:07:09.747 回答
0

首先连接到数据库,然后使用执行查询mysql_query($query);

$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
} else {
}
于 2012-11-20T17:50:56.133 回答
0

您忘记运行查询。见mysql_query()

于 2012-11-20T17:45:58.433 回答