0

そのため、ログインフォームを作成しています。ユーザー入力を検証して、電子メール形式が正しいかどうか、パスワードが6文字を超えているかどうかを確認します。これらが有効な場合は、ログイン資格情報が有効であり、に保存されている電子メール/パスワードと一致するかどうかを確認しますusers テーブル。登録フォームで、sha1 と特定のソルトを使用してパスワードを暗号化しています。パスワードが正しいかどうかを確認するときに同じチェックを書きますが、正しいログイン資格情報を入力してもログインを検証できないようです。だからここに私のコードがあります: ユーザーログイン機能:

function user_login($email, $password){
    global $db;
    $salt='%#@#@**#_-!';
    $userid = id_from_email($email);
    $email = sanitize($email);
    $password  = sha1($password.$salt);
    $query="SELECT UserId FROM users WHERE Email= '".$email."' and UserPass= '".$password."' ";
    $result=$db->query($query);
    $valid = $result->num_rows;
    return ($valid >1) ? $userid : false;
}

そして、ログインが有効かどうかをチェックする login.php の部分は次のとおりです。

else if(empty($errors) == true) {
        $userlogin=user_login($email, $password);
        if ($userlogin==false){
        $errors[]='Wrong email/password combination.';
        } else {
        //set the user session
        session_start();
        $_SESSION['UserId']=$userlogin;
        header('Location:success.php');
        }

正しいパスワードとメールアドレスを入力しても問題ありません。それは常に「間違った電子メール/パスの組み合わせ」を出力しますそして、これがregister.phpのデータベースにパスを保存する方法です

$salt='%#@#@**#_-!';
$password = sha1($password.$salt);

あなたが私を助けてくれるなら、私はとても感謝しています。

ありがとうございました。

4

3 に答える 3

1

適切な電子メール変数を使用して、データベースへの呼び出しを変更します。

$query="SELECT UserId FROM users WHERE Email= '".$useremail."' and UserPass= '".$password."' ";
于 2012-06-06T12:55:48.140 に答える
0

データベースからを選択しUserIdていますが、実際にその結果を使用することはありません。関数は、データベースから受け取った ID ではなく、user_login()結果を返します。戻り値をid_from_email($email)確認するか、さらに良いことに、代わりにデータベース クエリから ID を返します。id_from_email()

于 2012-06-06T13:04:14.507 に答える