Apabila cuba mengesahkan kewujudan nama pengguna dalam pangkalan data menggunakan jQuery.validate, ralat sentiasa dicetuskan, menunjukkan bahawa nama pengguna sudah diambil, walaupun tidak. Masalah timbul dengan kod PHP yang digunakan untuk pengesahan.
Pelaksanaan awal menggunakan kod jQuery berikut:
$("#signupForm").validate({ rules: { username: { required: true, minlength: 3, remote: "check-username.php", }, }, messages: { username: { remote: "This username is already taken! Try another.", }, }, });
Dan skrip PHP berikut untuk pengesahan :
<?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); ?>
Isu telah diselesaikan dengan menyemak semula skrip PHP. Kod yang diubah suai:
<?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; ?>
Kod PHP awal menggunakan mysql_real_escape_string untuk membersihkan pembolehubah $name. Walau bagaimanapun, pendekatan yang lebih komprehensif untuk membersihkan input diperlukan. Selain itu, logik pernyataan if-else telah diterbalikkan untuk menghasilkan respons yang betul: if ($result != 0) akan menunjukkan bahawa nama pengguna itu wujud.
Atas ialah kandungan terperinci Mengapa jQuery Saya Mengesahkan Kaedah Jauh Sentiasa Menunjukkan Ketersediaan Nama Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!