簡體   English   中英

Mysqli查詢結果問題

[英]Issue with Mysqli Query Result

我正在嘗試使用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和Password.Now你可以告訴我我做錯了什么嗎? 謝謝

出於某種原因,您使用的是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();?>

不鼓勵使用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注入。

我希望它有所幫助。 干杯

您忘記運行查詢了。 請參閱mysql_query()

首先連接到數據庫,然后使用mysql_query($query);執行mysql_query($query);

$result = mysql_query($query);
if (mysql_num_rows($result) > 0) {
} else {
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM