Maison >développement back-end >tutoriel php >Pourquoi ma méthode de validation jQuery à distance indique-t-elle toujours l'existence d'un nom d'utilisateur ?

Pourquoi ma méthode de validation jQuery à distance indique-t-elle toujours l'existence d'un nom d'utilisateur ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-27 17:54:12436parcourir

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

Méthode à distance jQuery Validate : validation de l'existence du nom d'utilisateur

jQuery Validate fournit une méthode à distance qui vous permet de vérifier si une valeur existe déjà dans un base de données. Cependant, vous pouvez parfois rencontrer des scénarios dans lesquels la validation se déclenche toujours, indiquant que le nom d'utilisateur est pris même s'il ne l'est pas.

Spécification du problème

Considérez le jQuery suivant et code PHP tentant de valider l'existence du nom d'utilisateur :

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

Ce code signale systématiquement le nom d'utilisateur comme pris, même s'il ne le fait pas. existe.

Solution

Pour résoudre le problème, vous devez modifier le script PHP. Plus précisément, la requête utilisée pour vérifier l'existence du nom d'utilisateur doit être mise à jour :

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

Le script PHP précédent utilisait mysql_real_escape_string pour se protéger contre l'injection SQL, mais il n'incluait pas la variable $username dans la requête. Cela a entraîné une vérification incorrecte qui a toujours renvoyé un résultat positif, indiquant que le nom d'utilisateur a été pris.

Avec le script PHP révisé, la requête vérifie correctement l'existence du nom d'utilisateur spécifique, garantissant une validation précise.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn