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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Vérifier qu'un libellé de variable existe dans BD

par Sékiltoyai » 01 août 2007, 16:31

Non, ta table reste :
ech_trav_id, serial
ech_trav_min, int
ech_trav_max, int
Mais au lieu d'avoir une clé :
PRIMARY KEY(ech_trav_id)
Tu as deux clés :
PRIMARY KEY(ech_trav_id)
PRIMARY KEY(ech_trav_min, ech_tra_max)
La première te sert surtout à indéxer ton serial (le serial est automatiquement unique vu qu'il est géré par PostgreSQL).
La seconde te sert à rendre le couple (ech_trav_min, ech_tra_max) unique et l'indéxer, de manière à empêcher l'enregistrement de 2 couples identiques, ce que tu cherches à faire par un select, mais qui est sensé se faire dans les bases de données dans les systèmes bien conçus, et à accélérer la recherche lorsque tu essayes de chercher un couple précis.

par laeti » 01 août 2007, 16:23

[quote="Sékiltoyai"]Normalement, tu peux mettre une clé primaire sur deux champs :

Code : Tout sélectionner

ALTER TABLE machin ADD PRIMARY KEY(colonne1, colonne2);
Si je te comprends bien, je devrais donc restructurer ma table ainsi:
ech_trav_min, primary key
ech_trav_max, primary key

Et là, je ne devrais plus avoir de problème, je n'aurai pas de redondance de libellé?


Ryle,
mes champs ne sont pas vides, donc ma requête devrait me renvoyer quelquechose d'autant que dans PgAdmin, le count me renvoie la bonne valeur.

par Ryle » 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 ?

par Sékiltoyai » 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…

par laeti » 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.

par Sékiltoyai » 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à.

par laeti » 01 août 2007, 12:14

C'est pareil. Toujours rien de renvoyer.

par béka » 01 août 2007, 12:12

essai plutot avec print_r() plutot que echo

par laeti » 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.

par béka » 01 août 2007, 11:42

ta requète retourne bien quelque chose, sinon tu aurais ton message d'erreur

par laeti » 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.

par d0m » 01 août 2007, 11:12

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

par laeti » 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.

par d0m » 01 août 2007, 10:37

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

par laeti » 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.