Page 1 sur 2

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

Posté : 01 août 2007, 10:12
par laeti
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?

Posté : 01 août 2007, 10:18
par d0m
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:

Posté : 01 août 2007, 10:23
par laeti
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.

Posté : 01 août 2007, 10:37
par d0m
en faisant un echo sur le resultat de la requête il indique combien?

Posté : 01 août 2007, 10:41
par laeti
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.

Posté : 01 août 2007, 11:12
par d0m
il manque les quotes
if($resul['Nb_entrees']==0)

Posté : 01 août 2007, 11:39
par laeti
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.

Posté : 01 août 2007, 11:42
par béka
ta requète retourne bien quelque chose, sinon tu aurais ton message d'erreur

Posté : 01 août 2007, 11:44
par laeti
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.

Posté : 01 août 2007, 12:12
par béka
essai plutot avec print_r() plutot que echo

Posté : 01 août 2007, 12:14
par laeti
C'est pareil. Toujours rien de renvoyer.

Posté : 01 août 2007, 15:57
par Sékiltoyai
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à.

Posté : 01 août 2007, 16:00
par laeti
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.

Posté : 01 août 2007, 16:19
par Sékiltoyai
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…

Posté : 01 août 2007, 16:19
par Ryle
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 ?