Maison >développement back-end >tutoriel php >Pourquoi ma méthode de validation jQuery à distance indique-t-elle toujours la disponibilité du nom d'utilisateur ?
Lors de la tentative de validation de l'existence d'un nom d'utilisateur dans une base de données à l'aide de jQuery.validate, l'erreur est toujours déclenchée, indiquant que le nom d'utilisateur est déjà pris, même si ce n'est pas le cas. Le problème se pose avec le code PHP utilisé pour la validation.
L'implémentation initiale a utilisé le code jQuery suivant :
$("#signupForm").validate({ rules: { username: { required: true, minlength: 3, remote: "check-username.php", }, }, messages: { username: { remote: "This username is already taken! Try another.", }, }, });
Et le script PHP suivant pour la validation :
<?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); ?>
Le problème a été résolu en révisant le script PHP. Le code modifié :
<?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 code PHP initial utilisait mysql_real_escape_string pour nettoyer la variable $name. Cependant, une approche plus globale pour nettoyer les entrées était nécessaire. De plus, la logique de l'instruction if-else a été inversée pour produire la réponse correcte : if ($result != 0) aurait indiqué que le nom d'utilisateur existe.
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!