0

重複の可能性:
データベースで正しい電子メール アドレスが見つからない

if else ステートメントに問題があります。テキストボックスに正しいユーザー名と電子メールを入力すると、else ステートメントに進み続け、if ステートメントを実行して「あなたの詳細は正しい」とエコーするのではなく、「間違った電子メール アドレスに入力しました」とエコーします。データベースから正しいユーザー名とそのユーザーに関連付けられた正しい電子メールを入力したにもかかわらず、間違ったステートメントがエコーされる理由を誰かが知っていますか?

if (isset($_POST['resetbtn'])) {
    //get form data
    $user  = $_POST['user'];
    $email = $_POST['email'];

    //make sure info is provided
    if ($user) {
        if ($email) {
            if ((strlen($email) >= 7) && (strstr($email, "@")) && (strstr($email, "."))) {

                $query   = "SELECT TeacherUsername, TeacherEmail FROM Teacher WHERE TeacherUsername = ?";
                // prepare query
                $stmt    = $mysqli->prepare($query);
                // You only need to call bind_param once
                $stmt->bind_param("s", $user);
                // execute query
                $stmt->execute();
                // get result and assign variables (prefix with db)
                $stmt->bind_result($dbTeacherUsername, $dbTeacherEmail);
                //get number of rows
                $stmt->store_result();
                $numrows = $stmt->num_rows();

                if ($numrows == 1) {

                    $row            = $stmt->fetch();
                    $dbTeacherEmail = $row['TeacherEmail'];

                    //make sure email is correct

                    if ($email == $dbTeacherEmail) {

                        echo "Your details are correct";
                    } else {
                        echo "You entered in the Wrong Email Address";
                    }
                } else {
                    echo "Please Enter in your Email";
                }
            } else {
                echo "Please Enter in your Username";
            }
        }
    }
}
4

2 に答える 2

1

PHP で文字列を比較する場合は、== を使用しないでください。

使用する

strcmp($string1,$string2)==0

平等をテストします。

于 2012-09-04T13:57:56.013 に答える
0

$stmt->fetch()使い方を間違っていると思います。戻り値を配列として扱っているようですが、戻り値はブール値であり、 の値$dbTeacherEmailは既に によって結果にバインドされてい$stmt->bind_result($dbTeacherUsername, $dbTeacherEmail)ます。

読む行を削除してみてください

$dbTeacherEmail = $row['TeacherEmail'];

そして、あなたが望むものが得られるかどうかを確認してください。mysqli-stmt::fetch()のドキュメントも参照してください

于 2012-09-04T20:50:47.697 に答える