ログイン フォームを MySQL データベースに接続できません
この質問は、ログイン フォームを MySQL データベースに接続する問題に関するものです。ユーザーはログイン試行中にエラーに遭遇しませんでしたが、プロセスはユーザーを認証できませんでした。この問題を解決するには、提供されたログイン フォームとそれに付随する PHP スクリプトを詳しく調べて、接続と認証のメカニズムをデバッグします。
loginpage.php に送信されたコードは単純で、ユーザー名やユーザー名などのユーザー資格情報を取得する必要があります。データをlogin.phpに投稿するフォーム経由でパスワードを入力します。ただし、login.php でのその後の処理により、潜在的な問題が明らかになります。
login.php 内では、コードは $error 変数と $username 変数の両方に空の文字列を割り当てることから始まり、エラー メッセージとユーザー名情報を管理する意図を示しています。 。このアプローチには、これらの入力に対する基本的な入力検証が欠けていることに注意してください。安全でないユーザー入力は、データベース クエリやその他の操作で使用する前に、常にサニタイズおよび検証する必要があります。
次に、 if (empty($_POST['username']) || empty($_POST['password '])) 条件は、ユーザー名またはパスワードの入力フィールドが空かどうかをチェックします。その場合、$error 変数は「ユーザー名またはパスワードが無効です」に設定され、ユーザーは認証されません。
両方のフィールドに空ではない入力が含まれていると仮定すると、コードは指定されたパラメーターを使用してデータベース接続を確立します。 。ただし、ここでの接続アプローチにはエラー処理が欠けています。接続の問題が発生した場合でも、問題は検出されず報告されないため、原因のデバッグが困難になります。
次に、SQL クエリを実行して登録ユーザー情報を取得し、提供された資格情報と比較します。 mysqli_query 関数は失敗すると false を返すため、これを確認する必要があります。クエリが失敗した場合、スクリプトはエラー メッセージを表示して終了するか、さらなる調査のために問題をログに記録する必要があります。
その後、コードは mysqli_num_rows を使用して行数をカウントします。しかし、このチェックには論理的な欠陥があります。有効なログインには 1 行だけが存在することが期待されます。ただし、実際には、データの不整合や悪意のある試みにより、レコードが重複する可能性があります。正確な数に依存するのではなく、少なくとも 1 行の存在を確認する方が賢明です。
行が見つかった場合、ユーザーは承認されているとみなされ、$_SESSION['login_user'] 変数が設定されます。ユーザー名と一緒に。ただし、複数の一致する行が見つかったときにコードがどのように応答するか、潜在的な競合状態や同時実行の問題をどのように管理するかは明らかではありません。
コードはデータベース接続の終了に進みます。ただし、前の操作 (データベース クエリなど) のいずれかでエラーが発生した場合、接続が開いたままになる可能性があり、リソース リークやパフォーマンスの問題が発生する可能性があります。
このコードの堅牢性とセキュリティを強化するには、次のような追加対策が考えられます。
以上が明らかなエラーがないにもかかわらず、ログイン フォームがユーザーの認証に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。