2010-08-03 4 views
1

J'utilise un formulaire d'inscription de base avec AJAX, mais le formulaire ne se connecte pas à la base de données. Je suis évidemment en train de négliger quelque chose. Voici le champ que je veux valider.Vérifier si le nom d'utilisateur est disponible avec AJAX

Username:<input type="text" name="user" id="user" maxlength="30"> 
<span id="msgbox" style="display:none"/></input> 

Puis-je utiliser jQuery, voici le code:

$(document).ready(function() { 
    $("#user").blur(function() { 

     //remove all the class add the messagebox classes and start fading 
     $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow"); 
     //check the username exists or not from ajax 
     $.post("user_availability.php",{ user_name:$(this).val() }, 
      function(data) { 
       if(data=='no') { //if username not avaiable 
        $("#msgbox").fadeTo(200,0.1,function() {//start fading the messagebox 
         //add message and change the class of the box and start fading 
         $(this).html('This User name Already exists').addClass('messageboxerror').fadeTo(900,1); 
        });  

       } else { 
        $("#msgbox").fadeTo(200,0.1,function() { //start fading the messagebox 
         //add message and change the class of the box and start fading 
         $(this).html('Username available to register').addClass('messageboxok').fadeTo(900,1); 
        }); 
       } // else 
      } // function 

     ); // $.post 
    }); // blur 
}); // ready 

Et je ce code, user_availability.php:

mysql_connect(localhost,$user,$password); 
    or die('There is error to connect to server:-'.mysqli_connect_error()); 

$db_selected = mysql_select_db($database); 
$user_name=$_POST['user_name']; 
$sql = "select * from members where username='$user_name'"; 
$result = mysql_query($sql); 

while($row = mysql_fetch_assoc($result)) 
{ 
    $existing_users[] = $row['username']; 
} 

if (in_array($user_name, $existing_users)) 
{ 
    echo "no"; //user name is not availble 
} 
else 
{ 
    echo "yes"; //user name is available 
} 

Je reçois aucune erreur de base de données. Le formulaire sera plus substantiel, mais je ne peux pas le faire fonctionner avec ce champ. Aucune suggestion?

+0

Je commencerais par dépanner la page php elle-même, séparément. Ajoutez également un peu de code pour traiter les variables $ _GET, puis vérifiez que: la réponse attendue s'affiche-t-elle lorsque vous la visitez directement? –

+0

Utilisez également Firebug (ou un outil similaire pour vérifier les paramètres de requête) pour vérifier que votre fonction javascript transmet les paramètres corrects à la page php. –

+0

hmm ... non. le problème est ceci. Il ne se connecte pas à la base de données. Je veux dire, quand un nouvel utilisateur entre son nom d'utilisateur et il est déjà dans la base de données. Il dit toujours 'Nom d'utilisateur est disponible' ..mais la vérité est qu'il n'est pas disponible. – mayumi

Répondre

1

Juste un pinailler sur l'instruction select. Puisque vous avez seulement besoin d'obtenir combien de lignes existent pour le nom d'utilisateur entré, vous n'avez pas besoin de faire un "select *" car en fonction du nombre de colonnes dans votre table d'utilisateurs vous pourriez retourner un peu de données. Je Révisez votre requête pour être comme si:

$sql = "select COUNT(username) from members where username=$user_name"; 

Ensuite, vous vérifiez pour vous assurer que le résultat de la requête est égal à zéro. Si c'est le cas, le nom d'utilisateur est disponible.

Je sais que ce qui précède n'était pas une réponse à votre question mais je pensais que je le signalerais car cela semble être une fonction qui va être appelée beaucoup en fonction du trafic sur votre formulaire d'inscription et la la créativité de vos visiteurs.

-1

Vérifiez votre requête:

$sql = "select * from members where username='$user_name'"; 

Je présente la requête ci-dessus devrait être:

$sql = "select * from members where username=$user_name"; 
+1

Non, le nom d'utilisateur est une chaîne pas un nombre (je suppose) donc l'OP veut certainement des citations – SmokeyPHP

+0

Quoted ou quoteless, il est encore une mauvaise façon de le faire qui est vulnérable à l'injection SQL – Izkata

Questions connexes