Rumah >pembangunan bahagian belakang >tutorial php >Mengapa jQuery Saya Mengesahkan Kaedah Jauh Sentiasa Menunjukkan Kewujudan Nama Pengguna?

Mengapa jQuery Saya Mengesahkan Kaedah Jauh Sentiasa Menunjukkan Kewujudan Nama Pengguna?

Susan Sarandon
Susan Sarandonasal
2024-12-27 17:54:12454semak imbas

Why Does My jQuery Validate Remote Method Always Indicate Username Existence?

Kaedah Jauh Mengesahkan jQuery: Mengesahkan Kewujudan Nama Pengguna

jQuery Validate menyediakan kaedah jauh yang membolehkan anda menyemak sama ada nilai sudah wujud dalam pangkalan data. Walau bagaimanapun, kadangkala anda mungkin menghadapi senario di mana pengesahan sentiasa dicetuskan, menunjukkan bahawa nama pengguna diambil walaupun ia tidak.

Spesifikasi Masalah

Pertimbangkan jQuery berikut dan kod PHP yang cuba mengesahkan kewujudan nama pengguna:

// 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);
?>

Kod ini secara konsisten melaporkan nama pengguna sebagai diambil, walaupun ia tidak wujud.

Penyelesaian

Untuk menyelesaikan isu ini, anda perlu mengubah suai skrip PHP. Khususnya, pertanyaan yang digunakan untuk menyemak kewujudan nama pengguna harus dikemas kini:

// 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;
?>

Skrip PHP sebelumnya menggunakan mysql_real_escape_string untuk melindungi daripada suntikan SQL, tetapi ia tidak memasukkan pembolehubah $username dalam pertanyaan. Ini mengakibatkan semakan yang salah yang sentiasa mengembalikan hasil yang positif, menunjukkan bahawa nama pengguna telah diambil.

Dengan skrip PHP yang disemak, pertanyaan dengan betul menyemak kewujudan nama pengguna tertentu, memastikan pengesahan yang tepat.

Atas ialah kandungan terperinci Mengapa jQuery Saya Mengesahkan Kaedah Jauh Sentiasa Menunjukkan Kewujudan Nama Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn