PHP/Mysql, recuperer information d'une requete dans une fonction
Résolu/Fermé
Hip
-
21 avril 2015 à 14:04
MrHip7 Messages postés 31 Date d'inscription jeudi 9 janvier 2014 Statut Membre Dernière intervention 6 mai 2015 - 21 avril 2015 à 17:23
MrHip7 Messages postés 31 Date d'inscription jeudi 9 janvier 2014 Statut Membre Dernière intervention 6 mai 2015 - 21 avril 2015 à 17:23
A voir également:
- PHP/Mysql, recuperer information d'une requete dans une fonction
- Fonction si et - Guide
- Récupérer une vidéo youtube - Guide
- Recuperer message whatsapp supprimé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
4 réponses
Miimidedel
Messages postés
345
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
5 juin 2019
71
Modifié par Miimidedel le 21/04/2015 à 14:20
Modifié par Miimidedel le 21/04/2015 à 14:20
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.
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
21 avril 2015 à 14:46
21 avril 2015 à 14:46
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)
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
21 avril 2015 à 15:19
21 avril 2015 à 15:19
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...
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
Modifié par jordane45 le 21/04/2015 à 15:32
Modifié par jordane45 le 21/04/2015 à 15:32
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;
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
Modifié par MrHip7 le 21/04/2015 à 16:00
Modifié par MrHip7 le 21/04/2015 à 16:00
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...
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
>
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
21 avril 2015 à 17:10
21 avril 2015 à 17:10
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;
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
21 avril 2015 à 17:23
21 avril 2015 à 17:23
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)