Disponibilité pseudo : problème d'intéraction php jquery

Résolu/Fermé
Cariño - Modifié par Cariño le 18/09/2013 à 18:56
 Cariño - 21 sept. 2013 à 13:10
Bonjour à tous, Wonderful Helpers :),


Ca fait des heures que je cherche et tente par tous les moyens de faire afficher à côté de mon input #pseudo si ce pseudo est dispo ou déjà pris.
Jquery m'indique bien en temps réel que le pseudo requiert 6 caractères minimum lorsque nécessaire, mais au delà des 6 caractères requis, il ne dit pas si le pseudo est dispo ou déjà pris....

Je crois penser en tant que débutante en php, que le (data) dans jquery pose problème, mais évidemment je ne sais pas trouver la solution...

Ma connexion à mysql est opérationnelle car plus bas dans mon form (je vous épargne tous mes champs), les données entrées par le user sont bien enregistrées dans ma bdd on submit du form, avec le même include('connect_pivoine.php');

Merci pour votre aide,
Thank you,
A vous lire :)






<form name="registration" action="" method="post">

<label for="pseudo" id="label_pseudo"> Pseudo : *</label><br />
<input type="text" name="pseudo" id="pseudo" class="field" placeholder=" 6 caractères minimum" size="30" maxlength="70" tabindex="10"
value="<?php if(isset($pseudo)) echo $pseudo; ?>" />
<span class="error_message_pseudo"> </span>

(autres inputs)
</form> )


Voici mon code verifpseudo.php :


<?php

include('connect_pivoine.php');

if ( isset($pseudo) && !empty($pseudo) && strlen($pseudo)>5)
{ $query = $bdd->query( "SELECT pseudo FROM users WHERE pseudo='$pseudo' ") or die('erreur sq1: '.mysql_error());
$rows = $query->rowCount();

if ($rows==1)
{ echo 'Pseudo non disponible'; }
else {echo 'Pseudo disponible'; }

}


?>

et mon code jquery

$(document).ready(function () { $("#pseudo").keyup(function() {

var pseudo= $("#pseudo").val();
pseudo = $.trim(pseudo); // pour empecher les espaces d'être pris comme pseudo


if (pseudo!="" && (pseudo.length > 5))
{$.post('verifpseudo.php',{pseudo:pseudo}, function(data) {$(".error_message_pseudo").text(data); });
}else
{$(".error_message_pseudo").text('Veuillez saisir votre pseudo. Minimum 6 caractères'); }


});
});






A voir également:

2 réponses

Le problème est là :

if ( isset($pseudo) && !empty($pseudo) && strlen($pseudo)>5).

Comme tu utilise $.post() tu dois récupérer ta variables avec $_POST['pseudo']

Essaye d'installer le plugin Firebug, il te permet de capter directement le résultat de tes requêtes ajax et ça t'aidera grandement pour la suite. (En l'occurrence ici tu aurai vu "undefined variable $pseudo")

Bonne chance pour la suite.
0
En fait tu aurais rien vue du tout puisque tu test l'existence de la variable, mais ça t'aurais mis sur la piste.
0
Salut Quo,

Merci pour ta réponse.
Entre temps, j'ai bien mis $_POST['pseudo'] et non plus $pseudo (à la base j'avais fait une extract $_POST['submit'] mais apparemment c'est déconseillé car facilement pourrissable par un hacker donc j'ai tout réécrit avec $_POST['']).
En résumé, ma vérification de si pseudo existe dans la bdd fonctionne.

Chez moi, FireBug s'appelle BugIgniter ! depuis que j'ai installé FireBug, plus moyen de voir mes pages sur Firefox ! lol... mais bon je règlerai ce problème après..

Saurais-tu me dire pourquoi verifpseudo.php et verifpseudo.js fonctionnent parfaitement, tandis que verif_email.php et verif_email.js qui vient à sa suite ne fonctionnent pas?
J'ai un Warning: include(1): failed to open stream: No such file or directory... alors que mes fichiers sont bien aux emplacements précisés dans mes paths....
Je ne comprends pas...

C'est clair qu'il en faut du courage et de l'obstination quand on apprend php toute seule...
Merci en tous cas de ton aide



* verifpseudo.php *

<?php   /// 

include('connect_pivoine.php');

if ( isset($_POST['pseudo']) && !empty($_POST['pseudo']) && strlen($_POST['pseudo'])>5)
{ $pseudo=htmlspecialchars(trim($_POST['pseudo']));
$query = $bdd->query( "SELECT * FROM users WHERE pseudo='$pseudo' ") or die('erreur sq1: '.mysql_error());
$rows = $query->rowCount();

if ($rows==1)
{ echo 'Pseudo non disponible';
}
else {echo 'Pseudo disponible'; }

}
?>

* verifpseudo.js *
 $(document).ready(function () {  $("#pseudo").keyup(function() { 
var pseudo= $("#pseudo").val();
pseudo = $.trim(pseudo); // pour empecher les espaces d'être pris comme pseudo

if (pseudo!="" && (pseudo.length > 5))
{$.post('verifpseudo.php',{pseudo:pseudo}, function(data) {$(".error_message_pseudo").text(data); });
}
else {$(".error_message_pseudo").text('Veuillez saisir votre pseudo. Minimum 6 caractères'); }


});
});



et


* verif_mail.php *


<?php include('connect_pivoine.php') die('erreur sq1: '.mysql_error() );

if ( isset($_POST['email']) && !empty($_POST['email']) )
{ $email=htmlspecialchars(trim($_POST['email']));

$query = $bdd->query( "SELECT * FROM users WHERE email='$email' ") or die('erreur sq1: '.mysql_error() );
$rows = $query->rowCount();

if ($rows==1)
{ echo 'Cette adresse email est associée à un autre utilisateur. Identifiants oubliés ? ';
}
else {echo ''; }

}

?>

* verif_email.js *

// JavaScript Document

$(document).ready(function () { $("#email").keyup(function() {
var email= $("#email").val();
email= $.trim(email); // pour empecher les espaces d'être pris comme pseudo

if (email!="" && (email.length > 5))
{$.post('verif_email.php',{email:email}, function(data) {$(".error_message_email").text(data); });
}

else {$(".error_message_email").text('Veuillez saisir votre adresse email'); }


});
});


  
<label for="email" id="label_email"> Email : * </label> <br />
<input type="text" name="email" id="email" class="field" size="30" maxlength="70" tabindex="31" value="<?php if (isset($email)) echo $email; ?>" />
<span class="error_message_email"> </span>
<span class="error_message"> <?php if(isset($erreuremail)) echo $erreuremail;?> </span>


<script src="jquery.js" type="text/javascript"> </script>
<script src="js/verif_email.js" type="text/javascript"> </script>
0
Les $_POST et $_GET peuvent être falsifiés oui, mais ce sont les seuls moyens de transmettre des informations donnés par l'utilisateur. C'est à toi de vérifier que ces variables soient bien correctes.

Tu ne m'a pas donné le bout de code qui contient les includes (Le seul qui m'intéressait) alors pour t'aider je ne peux que te donner des conseils généraux.

Quand tu execute un fichier php via ajax les fichiers include sont relatif a son emplacement à lui.
Alors que si tu include dans ton fichier déjà includé le chemin est relatif au premier fichier.
Après vérifie accents et majusucules.

Ta question initiale étant résolu n'hésite pas à mettre également ce sujet en "Résolu" pour un meilleur référencement
0
Bonjour Quo,

Voici ci-dessous mon include('connect_pivoine.php'); inclu aussi bien dans verifpseudo.php que dans verif_email.php. Ca fonctionne avec verifseudo.php mais pas avec verif_email.php., et je n'ai pas bien saisi pourquoi.

Merci de ton aide précieuse :)
Bonne journée,

<?php

try {$bdd= new PDO('mysql:host=localhost;dbname=pivoine', 'root', '' );
}
catch (Exception $e) {die ('ErreurDeConnexionAMysql:' .$e-> getMessage() ); }
?>
0
Autant pour moi j'avais compris que tu avais dumpé le code des fichier que tu includais, pas l'inverse

 include('connect_pivoine.php') die('erreur sq1: '.mysql_error() ) 
Est incorrecte, tu ne peux pas dier sur un include, c'est une spécificité de PDO.

Si tu veux être sur que ton include se fasse bien utilise require() à la place, le script s'arrêtera net.
0
Merci Quo pour tes précisions. Chaque jour j'avance un peu plus :)

Ca roule maintenant, yeaaaaaaaaah !!!!!!!!!!! Je suis contente !!!!
Thank you !
0