0

私はmysqlとphpを初めて使用します。

ユーザー用のテーブルを使用したデータベースの作成に取り組んでいます。

私はデータベースにユーザーを正常に追加することができました。md5を使用したユーザーのパスワード(安全ではないことはわかっています)、オンラインで起動されません。

私の問題は、正しいユーザー名とパスワードに基づいてユーザーをログインさせる方法です。

これが私のコードです

私のロジックは、クエリの実行後、trueまたはfalseのいずれかを返します。

trueの場合、成功したログインを表示し、そうでない場合は失敗します。

ただし、正しいユーザー名とパスワードを入力しても、ログインメッセージが失敗します。

mysqlデータベースを確認しましたが、uesrnameは正しくそこにあります

アイデア?

if(!empty($_POST['userLog']) && !empty($_POST['passLog']))
{
    //set the username and password variables from the form
    $username = $_POST['userLog'];
    $password = $_POST['passLog'];

    //create sql string to retrieve the string from the database table "users"
    $sql = "SELECT * FROM `users` WHERE userName = '$username' AND password = md5('$password')";
    $result = mysql_query($sql);
        if ($result == true) {
            $return = "<font color=#008000><Center><b>**Successful Login**</b></Center></font>";
        } else {
            $return = "<font color=#ff0000><Center><b>**Failed Login**</b></Center></font>";
        }
        print($return);
}
4

4 に答える 4

1

あなたの SQL が実行されるかどうかは完全にはわかりませんが、念のために言っておきます。

ように変更します。

$password_hash = md5($password);

$sql = "SELECT * FROM `users` WHERE userName = '$username' AND password = '$password_hash'";

そして、元の質問について

if(mysql_num_rows($result) == 1) { //If the SQL returns one row, that means that a user was found with `userName = $username` and `password = md5($password)`
    // Login
} else {
    // Authentication Failed
}

また、MySQL は廃止されているため、MySQL の代わりに MySQLi を使用することを検討してください。

于 2013-03-02T21:41:59.720 に答える
0

私のコメントで述べたように、問題は SQL 文字列のようです。ハッシュする代わりに、メソッドを文字列に入れています。だから変える

$sql = "SELECT * FROM `users` WHERE userName = '$username' AND password = md5('$password')";

$sql = "SELECT * FROM `users` WHERE userName ='$username' AND password = '".md5('$password')."'";

結果は true または false にはなりませんが、php は 0 以外の値を true として扱うため、そのまま機能します。また、SQL インジェクションを防ぐために、SQL 文字列に入るすべてのデータをエスケープすることを強くお勧めします。別の注意: mysql は非推奨になっているため、mysqli のようなものに移行するには今が絶好の機会です。

于 2013-03-02T21:47:37.147 に答える
0

まず、コードをSQL インジェクションから保護します。

次に、DB 内のパスワードが実際に md5() 関数でハッシュされていることを確認します。フォームが POST メソッドを使用してデータをスクリプトに渡すようにしてください。

次のコードを試してください。

if(!empty($_POST['userLog']) && !empty($_POST['passLog']))
{
    //set the username and password variables from the form
    $username = $_POST['userLog'];
    $password = $_POST['passLog'];

    //create sql string to retrieve the string from the database table "users"
    $sql = "SELECT * FROM `users` WHERE userName = '". addslashes($username) ."' AND password = '". md5('$password')."'";
    $result = mysql_query($sql);
        if (mysql_num_rows($result)>0) {
            $return = "<font color=#008000><Center><b>**Successful Login**</b></Center></font>";
        } else {
            $return = "<font color=#ff0000><Center><b>**Failed Login**</b></Center></font>";
        }
        print($return);
}
于 2013-03-02T21:42:26.303 に答える
0

mysql_queryTRUE または FALSE を返しません。ドキュメント ( http://php.net/manual/en/function.mysql-query.php ) によると、成功した場合はリソースが返され、エラーが発生した場合は FALSE が返されます。リソースを評価して、有効かどうかを確認する必要があります。

if(!empty($_POST['userLog']) && !empty($_POST['passLog']))
{
    //set the username and password variables from the form
    $username = $_POST['userLog'];
    $password = $_POST['passLog'];

    //create sql string to retrieve the string from the database table "users"
    $sql = "SELECT * FROM `users` WHERE userName = '$username' AND password = md5('$password')";
    $result = mysql_query($sql);
    if ($result && $row = mysql_fetch_assoc($result)) {
        $return = "<font color=#008000><Center><b>**Successful Login**</b></Center></font>";
    } else {
        $return = "<font color=#ff0000><Center><b>**Failed Login**</b></Center></font>";
    }
    print($return);
}
于 2013-03-02T21:43:04.383 に答える