Vérifier qu'un libellé de variable existe dans BD

Eléphant du PHP | 91 Messages

01 août 2007, 10:12

Bonjour,
J'ai un formulaire avec des champs texte. Je souhaite vérifier que les libellés saisis n'existent pas dans ma BD.
Pour l'instant, j'ai fait ça:
// On compte le nombre d'entrées dans la table echelle_travail qui contiennent $Ech_trav_min et $Ech_trav_max comme valeur
$sql = "SELECT COUNT(*) AS Nb_entrees FROM echelle_travail WHERE ech_trav_min=".$Ech_trav_min." AND ech_trav_max=".$Ech_trav_max."";
$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
$resul=pg_fetch_assoc($req);
		
// On vérifie si les libellés d'echelle de travail existe déjà dans la base de données
if ($resul[Nb_entrees]=0){
	// On prépare la requête pour insérer les données dans la table echelle_travail et on exécute cette requête
	$sql = "INSERT INTO echelle_travail(ech_trav_min, ech_trav_max) VALUES (".$Ech_trav_min.",".$Ech_trav_max.")";
	$req=pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
}
Je ne rentre pas dans mon If et je ne comprends pas pourquoi. Est-ce que quelqu'un a une petite idée?

d0m
Mammouth du PHP | 1141 Messages

01 août 2007, 10:18

tout simplement parce que ta condition n'est jamais vérifiée.
tu as oublié un =
if($resul[Nb_entrees]==0)
erreur fréquente :wink:

Eléphant du PHP | 91 Messages

01 août 2007, 10:23

Oups!!!
Merci.

Nouveau problème. Ca doit être tout bête encore mais je ne vois pas.
Je rentre dans mon If maintenant mais la condition ne marche pas. Quelque soient les valeurs que je saisie, qu'elles existent ou pas, il me les insère. Alors que je ne souhaite qu'insérer de nouvelles valeurs.

d0m
Mammouth du PHP | 1141 Messages

01 août 2007, 10:37

en faisant un echo sur le resultat de la requête il indique combien?

Eléphant du PHP | 91 Messages

01 août 2007, 10:41

Je viens d'y penser et d'essayer. Il m'indique Array. Pourquoi? alors que j'ai testé la requête dans Pgadmin et elle marche.

d0m
Mammouth du PHP | 1141 Messages

01 août 2007, 11:12

il manque les quotes
if($resul['Nb_entrees']==0)

Eléphant du PHP | 91 Messages

01 août 2007, 11:39

En fait, c'est un problème de requête à mon avis car
		$sql = "SELECT COUNT(*) AS Nb_entrees FROM echelle_travail WHERE ech_trav_min=".$Ech_trav_min." AND ech_trav_max=".$Ech_trav_max."";
		$req = pg_query($sql) or die('Erreur SQL !'.$sql.'<br>'.pg_result_error());
		$resul=pg_fetch_assoc($req);
		echo $resul['Nb_entrees'];
le echo ne renvoie rien du tout.

Mammouth du PHP | 536 Messages

01 août 2007, 11:42

ta requète retourne bien quelque chose, sinon tu aurais ton message d'erreur
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 91 Messages

01 août 2007, 11:44

oui mais pourquoi mon echo ne renvoie rien et en plus quand j'ai des nb_entrees différent de 0 je rentre quand même dans mon If.

Mammouth du PHP | 536 Messages

01 août 2007, 12:12

essai plutot avec print_r() plutot que echo
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 91 Messages

01 août 2007, 12:14

C'est pareil. Toujours rien de renvoyer.

ViPHP
ViPHP | 5924 Messages

01 août 2007, 15:57

Pourquoi ne mettrais-tu pas une clé unique voire primaire sur (ech_trav_min, ech_trav_max) ?
Le problème serait réglé, tu n'aurais même pas à vérifier qu'un enregistrement existe déjà.

Eléphant du PHP | 91 Messages

01 août 2007, 16:00

La structuration de ma table echelle_travail est la suivante:

ech_trav_id, serial
ech_trav_min, int
ech_trav_max, int

Je ne saisie pas trop ce que tu voulais dire. Mais j'ai déjà une clé primaire.

ViPHP
ViPHP | 5924 Messages

01 août 2007, 16:19

Normalement, tu peux mettre une clé primaire sur deux champs :

Code : Tout sélectionner

ALTER TABLE machin ADD PRIMARY KEY(colonne1, colonne2);
Du coup, PostgreSQL n'insèrera pas de donnée dedans s'il y a un doublon de couples (colonne1, colonne2). C'est à dire que si tu as (machin, truc) et que tu essayes d'insérer (trucmuche, truc), ca marchera, mais (machin, truc), ca ne marchera pas…

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 août 2007, 16:19

Si la chaine est vide (vu que ton echo n'affiche rien) alors php la considère de la même manière que le nombre 0 ou le booléen FALSE. La condition de ton if() est donc pour lui respecter.

Ce qui n'est pas normal, c'est que tu n'ais pas de valeur, alors qu'un COUNT(*) retourne toujours un résultat... si tu affiche la requête généré et que tu la joues dans post gre, qu'obtiens tu ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...