ホームページ >バックエンド開発 >PHPチュートリアル >jQuery Validate リモート メソッドが常にユーザー名の存在を示すのはなぜですか?
jQuery Validate リモート メソッド: ユーザー名の存在の検証
jQuery Validate は、値が既に存在するかどうかを確認できるリモート メソッドを提供します。データベース。ただし、検証が常にトリガーされ、ユーザー名が取得されていない場合でも取得されることが示されるシナリオが発生する場合があります。
問題の仕様
次の jQuery について考えてみましょう。ユーザー名の存在を検証しようとする PHP コード:
// jQuery $("#signupForm").validate({ rules: { username: { required: true, minlength: 3, remote: "check-username.php" } }, messages: { username:{ remote: "This username is already taken! Try another." } } }); // check-username.php <?php require_once "./source/includes/data.php"; header('Content-type: application/json'); $name = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT username FROM mmh_user_info WHERE username='$name'"); if (mysql_num_rows($check_for_username) > 0) { $output = true; } else { $output = false; } echo json_encode($output); ?>
このコードは一貫してユーザー名を次のように報告します。
解決策
問題を解決するには、PHP スクリプトを変更する必要があります。具体的には、ユーザー名の存在を確認するために使用されるクエリを更新する必要があります。
// check-username.php <?php require_once "./source/includes/data.php"; header('Content-type: application/json'); $request = $_REQUEST['username']; $query = mysql_query("SELECT * FROM mmh_user_info WHERE username ='$username'"); $result = mysql_num_rows($query); if ($result == 0){ $valid = 'true';} else{ $valid = 'false'; } echo $valid; ?>
以前の PHP スクリプトでは、SQL インジェクションから保護するために mysql_real_escape_string を使用していましたが、クエリに $username 変数が含まれていませんでした。この結果、ユーザー名が取得されたことを示す、常に肯定的な結果が返される誤ったチェックが発生しました。
改訂された PHP スクリプトでは、クエリは特定のユーザー名の存在を正しくチェックし、正確な検証を保証します。
以上がjQuery Validate リモート メソッドが常にユーザー名の存在を示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。