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 ?

Pourquoi ma méthode de validation jQuery à distance indique-t-elle toujours la disponibilité du nom d'utilisateur ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 04:47:15833parcourir

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

La méthode distante de validation jQuery ne parvient pas à vérifier la disponibilité du nom d'utilisateur

Description du problème

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.

Implémentation initiale

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

Implémentation résolue

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

Analyse

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!

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