jQuery.validate を使用してデータベース内のユーザー名の存在を検証しようとすると、エラーは常に発生し、ユーザー名が既に取得されていない場合でも、取得されていることを示します。この問題は、検証に使用される PHP コードで発生します。
初期実装では、次の jQuery コードが使用されました:
$("#signupForm").validate({ rules: { username: { required: true, minlength: 3, remote: "check-username.php", }, }, messages: { username: { remote: "This username is already taken! Try another.", }, }, });
検証用に次の 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 スクリプトを修正することで解決されました。変更されたコード:
<?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 コードでは、mysql_real_escape_string を使用して $name 変数をサニタイズしました。ただし、入力をサニタイズするためのより包括的なアプローチが必要でした。さらに、if-else ステートメントのロジックが反転されて、正しい応答が生成されます。if ($result != 0) は、ユーザー名が存在することを示します。
以上がjQuery Validate リモート メソッドが常にユーザー名の可用性を示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。