Heim >Backend-Entwicklung >PHP-Tutorial >Warum zeigt meine jQuery-Validierung der Remote-Methode immer an, dass ein Benutzername vorhanden ist?

Warum zeigt meine jQuery-Validierung der Remote-Methode immer an, dass ein Benutzername vorhanden ist?

Susan Sarandon
Susan SarandonOriginal
2024-12-27 17:54:12471Durchsuche

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

jQuery Validate Remote-Methode: Validieren der Existenz eines Benutzernamens

jQuery Validate bietet eine Remote-Methode, mit der Sie überprüfen können, ob ein Wert bereits in einem vorhanden ist Datenbank. Manchmal kann es jedoch vorkommen, dass die Validierung immer ausgelöst wird, was darauf hinweist, dass der Benutzername verwendet wird, auch wenn dies nicht der Fall ist.

Problemspezifikation

Bedenken Sie die folgende jQuery und PHP-Code, der versucht, die Existenz des Benutzernamens zu überprüfen:

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

Dieser Code meldet den Benutzernamen stets als vergeben, auch wenn dies nicht der Fall ist existieren.

Lösung

Um das Problem zu beheben, müssen Sie das PHP-Skript ändern. Insbesondere sollte die Abfrage aktualisiert werden, mit der die Existenz des Benutzernamens überprüft wird:

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

Das vorherige PHP-Skript verwendete mysql_real_escape_string zum Schutz vor SQL-Injection, enthielt jedoch nicht die Variable $username in der Abfrage. Dies führte zu einer fehlerhaften Prüfung, die immer ein positives Ergebnis lieferte, was darauf hinweist, dass der Benutzername übernommen wurde.

Mit dem überarbeiteten PHP-Skript prüft die Abfrage korrekt die Existenz des spezifischen Benutzernamens und gewährleistet so eine genaue Validierung.

Das obige ist der detaillierte Inhalt vonWarum zeigt meine jQuery-Validierung der Remote-Methode immer an, dass ein Benutzername vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn