PHP/Mysql, recuperer information d'une requete dans une fonction
Résolu
Hip
-
MrHip7 Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
MrHip7 Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je réalise actuellement une vérification de formulaire.
J'ai une fonction checkpseudo($pseudo) et checkmail($mail)
et je voudrais qu'elle vérifie que le mail ou le pseudo n'existe pas déjà dans la BDD.
Comment vais-je passer une requête SQL correctement dans la fonction?
J'ai:
Mais cela ne fonctionne pas, j'ai une erreur SQL.
Erreur SQL !INSERT INTO membres VALUES(NULL, 'pseu', 'jean', 'tete', '***@***', 'dbc4d84bfcfe2284ba11beffb853a8c4', '14/05/1990', 1429610378,0)
Je réalise actuellement une vérification de formulaire.
J'ai une fonction checkpseudo($pseudo) et checkmail($mail)
et je voudrais qu'elle vérifie que le mail ou le pseudo n'existe pas déjà dans la BDD.
Comment vais-je passer une requête SQL correctement dans la fonction?
J'ai:
function checkpseudo($pseudo)//Implementer la dépendance UNIQUE { $base = mysqli_connect ('localhost', 'root', ''); $res = 'ok'; $result = mysqli_query($base, "SELECT membre_pseudo FROM membres WHERE membre_pseudo LIKE '".$pseudo."'"); if($result){ mysqli_free_result($result); $res='exists'; return $res; } else{ return $res; } }
Mais cela ne fonctionne pas, j'ai une erreur SQL.
Erreur SQL !INSERT INTO membres VALUES(NULL, 'pseu', 'jean', 'tete', '***@***', 'dbc4d84bfcfe2284ba11beffb853a8c4', '14/05/1990', 1429610378,0)
A voir également:
- PHP/Mysql, recuperer information d'une requete dans une fonction
- Fonction si et - Guide
- Recuperer une conversation whatsapp supprimée - Guide
- Comment recuperer une video sur youtube - Guide
- Comment récupérer un document dans le presse-papier samsung - Guide
- Recuperer le son d'une video - Guide
4 réponses
Me revoilà.
Bon déjà tu as une erreur sur le INSERT donc ce n'est pas cette fonction qui pose problème.
Le fonction qui appelle cette fonction fait le INSERT quand checkPseudo te renvoie "ok" ?
Déjà renvoie true et false dans checkPseudo et dans celle qui l'a appelée vérifie simplement cette valeur de retour
EDIT :
Ton erreur est qu'il fait un INSERT comme si la vérif n'avait pas trouvé le pseudo déjà en BdD alors qu'il y est ?
En gros checkPseudo renvoie la mauvaise réponse ?
As-tu essayé de mettre ta requête SELECT de checkPseudo directement dans PHPMyAdmin par exemple voir ce que ça retourne ?
Bon déjà tu as une erreur sur le INSERT donc ce n'est pas cette fonction qui pose problème.
Le fonction qui appelle cette fonction fait le INSERT quand checkPseudo te renvoie "ok" ?
Déjà renvoie true et false dans checkPseudo et dans celle qui l'a appelée vérifie simplement cette valeur de retour
if(checkPseudo($pseudo)){ //Sous-entend : renvoie true (la vérif est OK) //Faire l'INSERT } else{ //Pas d'insertion et gestion de l'erreur }
EDIT :
Ton erreur est qu'il fait un INSERT comme si la vérif n'avait pas trouvé le pseudo déjà en BdD alors qu'il y est ?
En gros checkPseudo renvoie la mauvaise réponse ?
As-tu essayé de mettre ta requête SELECT de checkPseudo directement dans PHPMyAdmin par exemple voir ce que ça retourne ?
Le code avec les booléens.
Le code si chaque champs est valide:
Le code si il y a un champs invalide:
J'ai pas mal de commentaires dans les "erreurs" car je voulais une alert avec un lien, ce qui n'est pas possible, donc en attente actuellement ;)
EDIT: a mon avis, l'erreur sur le INSERT est due au fait que dans ma BDD, le champs pseudo soit UNIQUE, du coup cela ne passe pas quand on lui dit d'inserer et qu'il n'y a pas d'erreur, il faut donc lui dire qu'il y a une erreur, et c'est donc dans la fonction checkpseudo qu'il faut changer des choses.
function checkpseudo($pseudo) { $base = mysqli_connect ('localhost', 'root', ''); $res = true; $result = mysqli_query($base, "SELECT membre_pseudo FROM membres WHERE membre_pseudo LIKE '".$pseudo."'"); if($result){ mysqli_free_result($result); $res='exists'; return $res; } else{ return $res; } }
Le code si chaque champs est valide:
if($pseudoc && $mailc && $mailvc && $mdpvc && $date_naissancec){ var_dump('Passage dans 1er if (celui de l\'insertion)'); $insertion = "INSERT INTO membres VALUES(NULL, '".$pseudo."', '".$prenom."', '".$nom."', '".$mail."', '".md5($mdp)."', '".$date_naissance."', ".time().",". 0 .")"; mysqli_query ($base,$insertion) or die ('Erreur SQL !'.$insertion.'<br />'.mysql_error()); mysql_close(); header('Location: ../index.php'); exit(); }
Le code si il y a un champs invalide:
else{ var_dump('Passage dans 1er else (si erreur il y a)'); if(!$pseudoc){ var_dump('Pseudo exist'); //~ $message = "Ce pseudo est déjà utilisé, merci d'en choisir un autre.<a href="./inscription.php">Retour</a>"; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif(!$mailc){ var_dump('mail exist'); //~ $message = "Ce mail est déjà utilisé, merci d'en choisir un autre .<a href="./inscription.php">Retour</a>"; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif(!$mailvc){ var_dump('mail different'); //~ $message = "Merci d'entrer deux fois le même mail ..<a href="./inscription.php">Retour</a>"; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif(!$mdpvc){ var_dump('mdp different'); //~ $message = "Merci d'entrer deux fois le même mot de passe .<a href="./inscription.php">Retour</a>"; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif($date_naissancec=='format'){ var_dump('format date'); //~ $message = "Le format de la date n'est pas valide (DD/MM/YYYY) .<a href="./inscription.php">Retour</a>; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif($date_naissancec=='tooold'){ var_dump('trop vieux'); //~ $message = "Vous êtes trop agé! .<a href="./inscription.php">Retour</a>; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } elseif($date_naissancec=='tooyoung'){ var_dump('trop jeune'); //~ $message = "Tu es trop jeune! Reviens dans quelques années ;).<a href="./inscription.php">Retour</a>; //~ echo "<script type='text/javascript'>;</script>"; } elseif($date_naissancec=='invalid'){ var_dump('date invalid'); //~ $message = "La date de naissance renseignée est invalide.<a href="./inscription.php">Retour</a>;; //~ echo "<script type='text/javascript'>alert('$message');</script>"; } }
J'ai pas mal de commentaires dans les "erreurs" car je voulais une alert avec un lien, ce qui n'est pas possible, donc en attente actuellement ;)
EDIT: a mon avis, l'erreur sur le INSERT est due au fait que dans ma BDD, le champs pseudo soit UNIQUE, du coup cela ne passe pas quand on lui dit d'inserer et qu'il n'y a pas d'erreur, il faut donc lui dire qu'il y a une erreur, et c'est donc dans la fonction checkpseudo qu'il faut changer des choses.
Lorsque j'exécute ma requête avec PhpMyadmin et 'pseu' à la place de $pseudo, PhpMyAdmin me renvoie bien la colonne pseudo de la table, avec 1 ligne comme valeur 'pseu'.
Je suppose donc que cela fonctionne.
EDIT
Oui, il ne fait pas la bonne vérif
EDIT2
Si je fais la requête avec un pseudo inexistant dans phpmyadmin, il ne me renvoi rien, la requête marche donc.
Je suppose donc que cela fonctionne.
EDIT
Oui, il ne fait pas la bonne vérif
EDIT2
Si je fais la requête avec un pseudo inexistant dans phpmyadmin, il ne me renvoi rien, la requête marche donc.
Bonjour,
Avec LIKE .. il faut utiliser des %
Prend l'habitude de séparer la requête de son exécution pour pouvoir en faire des echo si besoin.
Une fois le Echo de la requête effectué.. tu la copie et la teste en DIRECT dans ta BDD
Avec LIKE .. il faut utiliser des %
Prend l'habitude de séparer la requête de son exécution pour pouvoir en faire des echo si besoin.
$sql = "SELECT membre_pseudo FROM membres WHERE membre_pseudo LIKE '%$pseudo%' "; echo "<br> La requête :<br>".$sql; $result = mysqli_query($base,$sql);
Une fois le Echo de la requête effectué.. tu la copie et la teste en DIRECT dans ta BDD
re-bonjour Jordane45:
ma fonction checkpseudo($pseudo) ressemble désormais à ca.. au niveau des '%', cela effectue tout seul la concaténation? oubien faut-il que j'utilise des '.'?
Avec cette fonction, j'ai toujours l'erreur MySQL.
Erreur SQL !INSERT INTO membres VALUES(NULL, 'pseu', 'jean', 'dumar', '***@***', 'b59c67bf196a4758191e42f76670ceba', '20/02/1980', 1429620633,0)
function checkpseudo($pseudo) { $base = mysqli_connect ('localhost', 'root', ''); $res = true; $requete = "SELECT membre_pseudo FROM membres WHERE membre_pseudo LIKE '%$pseudo%'"; $result = mysqli_query($base, $requete); if($result){ mysqli_free_result($result); $res='exists'; return $res; } else{ return $res; } }
ma fonction checkpseudo($pseudo) ressemble désormais à ca.. au niveau des '%', cela effectue tout seul la concaténation? oubien faut-il que j'utilise des '.'?
Avec cette fonction, j'ai toujours l'erreur MySQL.
Erreur SQL !INSERT INTO membres VALUES(NULL, 'pseu', 'jean', 'dumar', '***@***', 'b59c67bf196a4758191e42f76670ceba', '20/02/1980', 1429620633,0)
J'ai essayé avec une nouvelle requête, cela ne fonctionne toujours pas, et avec PHPMYADMIn, cela me renvoi bien 1 avec pseu à la place de $pseudo.
cela ne fonctionne pas non plus...
function checkpseudo($pseudo)// { $base = mysqli_connect ('localhost', 'root', ''); $res = true; $requete = "SELECT COUNT(*) AS nbr FROM membres WHERE membre_pseudo = '".$pseudo."'"; $result = mysqli_query($base,$requete); if($result['nbr'] > 0) return false; else return true; }
cela ne fonctionne pas non plus...
Attentio :
Mysqli_query ... te retourne true ou false (1 ou 0 ) ... pour te dire si la requête s'est bien exécutée ou non .. rien de plus !
Ca ne te dit pas si tu as des résultats ou non ....
Pour récupérer le NB il faut le FETCH
$result = mysqli_query($base,$requete);
Mysqli_query ... te retourne true ou false (1 ou 0 ) ... pour te dire si la requête s'est bien exécutée ou non .. rien de plus !
Ca ne te dit pas si tu as des résultats ou non ....
Pour récupérer le NB il faut le FETCH
$res = mysqli_fetch_row($result) $NB = $res['nbr']; $retour = $NB>0 ? true:false;
Du coup:
Pense tu que c'est correct?
EDIT
ok, clairement non, ça ne fonctionne pas. Je ne comprends pas bien la structure que tu me donne Jordane45
seulement il me dis que je ne passe pas le bon parametre a mysqli_fetch_row...
function checkpseudo($pseudo) { $base = mysqli_connect ('localhost', 'root', ''); $requete = "SELECT COUNT(*) AS nbr FROM membres WHERE membre_pseudo = '".$pseudo."'"; $result = mysqli_query($base,$requete); $resu = mysqli_fetch_row($result); $NB = $res['nbr']; if($NB > 0){ var_dump("YES"); return false; } else{ var_dump("NOPE"); return true; } }
Pense tu que c'est correct?
EDIT
ok, clairement non, ça ne fonctionne pas. Je ne comprends pas bien la structure que tu me donne Jordane45
$base = mysqli_connect ('localhost', 'root', ''); $requete = "SELECT COUNT(*) AS nbr FROM membres WHERE membre_pseudo = '".$pseudo."'"; //~ $result = mysqli_query($base,$requete); $resu = mysqli_fetch_row($requete); $NB = $resu['nbr']; if($NB > 0){ var_dump("YES"); return false; } else{ var_dump("NOPE"); return true; }
seulement il me dis que je ne passe pas le bon parametre a mysqli_fetch_row...
Que te donne ceci :
$base = mysqli_connect ('localhost', 'root', ''); $requete = "SELECT COUNT(*) AS nbr FROM membres WHERE membre_pseudo = '".$pseudo."'"; $result = mysqli_query($base,$requete); $resu = mysqli_fetch_row($result); // Le temps des tests : print_r($resu); $NB = $resu['nbr']; $return = $NB>0 ? true:false; // Le temps des tests : print( $return ? 'true':'false' ); return $return;
Salut!
J'ai résolu mon probleme avec:
Merci! =)
(je peux pas le marqué en resolu parceque je suis connecté.. mais ce sujet est a clore)
J'ai résolu mon probleme avec:
function checkpseudo($link, $pseudo) { $stmt = mysqli_prepare($link, 'SELECT COUNT(*) AS nbr FROM membres WHERE membre_pseudo = ?'); mysqli_stmt_bind_param($stmt, 's', $pseudo); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $NB); mysqli_stmt_fetch($stmt); return 0 == $NB; }
Merci! =)
(je peux pas le marqué en resolu parceque je suis connecté.. mais ce sujet est a clore)