If {} else.. Php Mysql

Fermé
boubou2111 - 27 mars 2015 à 16:21
 Utilisateur anonyme - 28 mars 2015 à 02:25
Bonjour,

Voilà j'ai un petit soucis, je fais un formulaire d'ajouts de donnée à une table, je voulais faire "si l'enregistrement n'existe pas, l'enregistrer, si non, afficher un message" sauf que ça n'enregistre jamais.. Je ne sais pas si c'est clair, voilà le code:


$doublon = $bdd->prepare("SELECT COUNT(*) FROM Cli WHERE NAME= :nom AND FIRSTNAME= :prenom;");
$doublon->execute(array('nom'=>$name, 'prenom'=>$prenom));

if ($doublon>0)
{ echo "Désolé, cet avatar a déjà été ajouté! Merci quand même!";}
else {
$req = $bdd->prepare('INSERT INTO Cli (NAME, FIRSTNAME, SEXE, AGE) VALUES (:name, :prenom, :sexe, :age)');
$req->execute(array(
"name" =>$name,
"prenom"=>$prenom,
"sexe"=>$sexe,
"age"=>$age,
));

echo '<h5>'.$prenom.' '.$nom.' a bien été ajouté!</h5>';
}


J'ai définis toute les variables avant et tout marche en théorie, voilà merci!

A voir également:

4 réponses

Je simplifie un peu :
Quand tu as exécuté une requête SELECT, pour récupérer le résultat (s'il y en a un) il faut faire une opération qui s'appelle fetch et qui te donne une ligne de résultat. Tu peux d'ailleurs recommencer s'il y a plusieurs lignes pour toutes les récupérer, mais ton COUNT(*) donne une seule ligne.
Le résultat récupéré est (sauf utilisation d'autres options) un tableau qui contient autant d'éléments que de champs demandés. Dans ton cas, un seul
$doublon = $bdd->prepare("SELECT COUNT(*) FROM Cli WHERE NAME= :nom AND FIRSTNAME= :prenom;");
$doublon->execute(array('nom'=>$name, 'prenom'=>$prenom));
$ligne=$doublon->fetch();
if ($ligne[0]>0)...
1
Merci beaucoup le père!
0
Utilisateur anonyme
28 mars 2015 à 02:25
De rien :-)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 mars 2015 à 16:32
Bonjour,
$req->execute(array(
"name" =>$name,
"prenom"=>$prenom,
"sexe"=>$sexe,
"age"=>$age,
));


Ajoute les ":" devant le nom des variables
$req->execute(array(":name" =>$name
                    , ":prenom"=>$prenom
                    , ":sexe"=>$sexe
                    , ":age"=>$age
                  ));

0
$req marchais super avant que je la mette dans le if, je pense que le soucis est au niveau de $doublon mais je n'arrive pas à voir où..
0
Bonjour

Ton erreur vient du test if ($doublon>0)
$doublon est le résultat d'un pdo::execute, et vaut donc true ou false suivant que ta requête s'est bien ou mal déroulée. Ce n'est pas un nombre, tester s'il est supérieur à 0 ne veut pas dire grand-chose, en tous cas pas ce que tu crois.
Il faut faire un fetch pour avoir accès au count(*), comme pour n'importe quelle autre résultat de SELECT

Au passage, les : ne sont pas obligatoires dans les noms de paramètres qu'on passe en array à execute : PHP les rajoute si on ne les met pas.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
27 mars 2015 à 16:54

Au passage, les : ne sont pas obligatoires dans les noms de paramètres qu'on passe en array à execute : PHP les rajoute si on ne les met pas.

Ah.. ben j'en était pas sûr. c'est bon à savoir.
0
Le fetch je le met dans le if?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > boubou2111
27 mars 2015 à 17:02
normalement il n'y a même pas besoin de FETCH.
ceci devrait marcher :
if ($doublon)
0
Utilisateur anonyme > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
27 mars 2015 à 17:05
Certainement pas.
Ce test est équivalent au sien, tu vas juste vérifier qu'il n'y a pas eu d'erreur dans l'exécution de la requête, pas le nombre récupéré par le COUNT(*)
0
Utilisateur anonyme
27 mars 2015 à 17:02
Le fetch je le met dans le if?
Tu ne sais pas récupérer le résultat d'une requête SELECT ? C'est la première fois que tu utilises une base de données ?
0
Plus ou moins oui, je comprend le fonctionnement mais je suis en terminale SIG et nous les base de données c'est sur Access donc j'essaye de me debrouiller comme je peux --'
0