0

I am trying to make a login form using mysqli method.I am not getting any error but in both case (Correct or Incorrect Authentication) I am getting the second part of the IF condition result! "You are not allowed!."

<?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();
?>

I also changed to if condition to following

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

users というテーブルと、ユーザーの Email と Password を含む 2 つの列 (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

mysqliand/or関数を優先するため、mysql_* 拡張機能の使用は推奨されていませんpdo

mysql_query関数の呼び出しがないため、コードが失敗しているため、コードの次の行で:

$query > 0 

あなたがしているのは、文字列が 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()

于 2012-11-20T17:45:58.433 に答える
0

最初にデータベースに接続してから、次を使用してクエリを実行しますmysql_query($query);

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