【解決方法】 PHP で成功するログイン システムを作成するにはどうすればよいですか? このエラーに遭遇し続けます。

プログラミングQA


私はこの問題を何日も解決しようとしてきましたが、非常にイライラするところまで来ていたので、助けを求めるしかありませんでした.

私はログイン機能を作成しようとしてきましたが、今では 10 年のように感じられますが、成功は限られています。 機能する登録システムを作成することはできましたが、ログイン機能に本当に悩まされています。 YouTube で誰かのコードを文字通りコピーすることさえしましたが、それでもまだ機能しません。 ログインしようとするたびに、「間違ったユーザー名またはパスワード」と表示されます。これは、ユーザー名またはパスワードが正しく入力されていない場合に設定したエラー メッセージです。 問題は、ユーザー名またはパスワードを間違って入力していないことです。 それらは正しく、データベースに登録されているため、問題が何であるかはわかりません。

私が試したこと:

Here is the (php) code for login.php:

<?php 
     
    session_start(); 
    require "functions.php"; 
    require "db_conn.php"; 
     
    if(isset($_POST['submit'])){ 
     
        $response = loginUser($_POST['username'], $_POST['password']); 
     
    } 
 
?>
 
and here is the code for the functions.php (specifically the login code):

function loginUser($username, $password){ 
         
        $mysqli = connect(); 
        $username = trim($username); 
        $password = trim($password); 
         
        if($username == "" || $password == ""){ 
            return "Both fields are required"; 
        } 
         
        $username = filter_var($username, FILTER_SANITIZE_STRING); 
        $password = filter_var($password, FILTER_SANITIZE_STRING); 
         
        $sql = "SELECT username, password FROM users WHERE username = ?"; 
        $stmt = $mysqli->prepare($sql); 
        $stmt->bind_param("s", $username); 
        $stmt->execute(); 
        $result = $stmt->get_result(); 
        $data = $result->fetch_assoc(); 
         
        if($data == NULL){ 
            return "Wrong username or password"; 
        } 
         
        if(password_verify($password, $data['password']) == FALSE) { 
            return "Wrong username or password"; 
        }else{ 
            $_SESSION['user'] = $username; 
            header("location: registerredirect.php"); 
            exit(); 
        } 
         
    }

and here is my code for the login form:

<div class="wrapper1"> 
        <h1>Login to your Account</h1> 
        <form action="" method="post"> 
            <p class="error"><?php echo @$response; ?></p> 
            <input type="text" placeholder="Username*" name="username" value="<?php echo @$_POST['username']; ?>" required> 
            <input type="password" minlength="6" maxlength="21" placeholder="Password*" name="password" value="<?php echo @$_POST['password']; ?>" required> 
            <input type="submit" id="highlight" name="submit" value="Login"> 
            <div class="member"> 
                Haven't got an account yet? Click <a href="https://www.codeproject.com/Questions/5356359/user_registration.php" class="hover-underline-animation">here!</a></li> 
        </div> 
    </form> 
</div>

私が間違っていたはずの場所、なぜ私が間違っていたに違いないのか、そして将来その間違いを避ける方法を教えてください。 誰かに「宿題をして」と頼んでいるだけではなく、なぜ間違ったのか、どこで間違ったのかを知りたいと思っています。 どうもありがとうございました。

“if(password_verify($password, $data[‘password’]) == FALSE) {” to “if(!password_verify($password, $hash) {” 最初はうまくいったと思ったのですが、ランダムなパスワードを受け入れていることがわかりました。

これは私があきらめたいと感じ始めています。 私は何日もそれを続けてきましたが、それは私の神経に真剣にかかっています. パスワードを確認するだけでこれほど複雑になるとしたら、ウェブサイトの残りの部分のバックエンドを作成するのがどのようなものになるか想像もつきません。 誰かがここで私を助けてくれますか? Quoraで質問してみましたが、そのサイトは役に立たないので、まだ質問に対する答えがありません。 私はスタックオーバーフローを試みましたが、そこにいる人々は地獄のように失礼であり、わざわざ助けもせずに私の質問を閉じることにしました. Redditは、愚かなカルマシステムとユーザーの過度に存在する暴徒の精神のために、テーブルから外れています. ここ数日間調査を試みましたが、解決策が見つかりません。

解決策 1

わかりません。あなたのデータにアクセスすることはできません。これはおそらく重要なことです。

だから、それはあなた次第になるでしょう。 ドキュメントから始めます。 PHP: password_verify – マニュアル[^] これは、2 番目のパラメーターが、によって作成されたハッシュ値であることを示しています password_hash 関数 – したがって、DB から返された実際のデータがどのように見えるかを見て、それが何らかの方法で理解できるかどうかを確認してください。 そうでない場合は、おそらく良いことです。 😀
それがユーザーパスワードの場合、登録システムに問題があり、ストレートテキストではなくハッシュ値を保存する必要があります-それがどのように機能するかを見てください.

わかりにくい場合は、 password_hash 新しく入力したパスワードで登録コードで行ったのとまったく同じように機能し、結果が視覚的に一致するかどうかを確認します。

申し訳ありませんが、これについてはお手伝いできません。DB や登録コードにアクセスすることはできません。 $_POST あなたのコードに供給しています!

コメント

タイトルとURLをコピーしました