0

php と mysql でログインフォームを作ろうとして、過去 3 日間失敗しました。

私は基本的にphpフォームを持っており、同じページにユーザーをWebサイトにログインさせるためのスクリプトがあります。

フォーム.php

<form id="superAdminForm" method="post" action="">
   <input type="email" name="email" required class="txtInput" placeholder="Email..." autocomplete="off"/> <br />
   <input type="password" name="password" required class="txtInput" placeholder="Password..."/> <br />
   <input type="submit" name="submit" value="Enter" id="submit" />
</form>

form.php の php コード

<?php
    require("../php_includes/db-connect.php");

    if (isset($_POST["submit"])) {
        $email = $_POST["email"];
        $password = $_POST["password"];

        $sql = "SELECT * FROM users WHERE email='$email' AND password='$password' LIMIT 1";
        $query = mysqli_query($con, $sql);

        $row = mysqli_fetch_array($query);

        if ($row['email'] == 1) {
            header("Location: admin-index.php");
        }
    }

    mysqli_close($con);

?>

問題は、ログインが成功しないことです。その背後にある理由はわかりません。だから、これで私を助けてください。また、間違いを犯している場所を教えてください。

私はPHPが初めてで、自分の知識に対処するために最善を尽くしています。

4

3 に答える 3

1

あなたがする必要があるのは、ビューロジックを認証ロジックから分離することだと思います。PHP ブロックを独自のファイルに移動し、フォームのアクション パラメータをそのファイル (相対位置) に設定します。

これは、すべての PHP コードがクライアントに送信されるにサーバーによって解釈されるためです。そのため、このフォームは同じページでその PHP ロジックを実際に利用することはできません。

また、認証が失敗した場合に備えて、ログイン ページ (または任意の場所) にリダイレクトするフォールバックを作成することもできます。そうしないと、ユーザーは白い画面のままになります。

編集

他の人が述べたように、セキュリティ、特に$_SESSIONs へのフックを調べる必要があります。コードにもいくつかの作業が必要になります。私は$row['email'] == 1真実になるとは思わないので、スクリプトは失敗し、最終的には何もしません。ここでも、認証の失敗を処理するために else ステートメントを追加します。

修正に関して$row['email'] == $emailは、if で比較することをお勧めしますが、SQL クエリでのメール チェックが冗長になります。ロジックを再構築することをお勧めします。

于 2013-09-17T15:48:38.680 に答える