[PHP] Requete et SQL

Requete et SQL [PHP] - PHP - Programmation

Marsh Posté le 27-03-2007 à 17:17:19    

Bonjour,  
 
Voila j'ai un petit problème...
J'ai donc une BDD d'annonces où je souhaite selectionner des dynamquement selon certain critère (grace a WHERE, Mais je suis confronter a un problème je n'arrive pas a faire ce que je veux faire...
Idéalement il faudrai que j'incrémente le nom de la variable....mais ça fait bricolage ... le mieu c'est de vous poster un bou de code :  
Donc voila la requete pour chercher ce que je veux...

Code :
  1. $annonce = mysql_query("SELECT * FROM xxxxxx WHERE (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_bien='".$typebien1."' OR type_bien='".$typebien2."' OR type_bien='".$typebien3."' OR type_bien='".$typebien4."' OR type_bien='".$typebien5."' OR type_bien='".$typebien6."')    ORDER BY $tri LIMIT $limite, $nb_annonce" ) or die("Erreur : Problème avec la requete annonce" );


 
et ça c'est le bout de code qui me permet générer les variable "dynamiquement"... j'ai l'impression d'une part que c'est super lourd.. et je ne c pas si je peux eviter ça... mai aussi je bloque au niveau de la boucle pour nommé la variable... J'ai essayer avec un tableau, effectivement ça marchait mais j'avai un probleme de undefinited offset ds la requete SQL ...ce qui est normal puisque que si je n'avai qu'un variable (correspondant donc a une ligne de tableau) il ne trouvai pas les autres qui n'existe pas d'ou l'errreur  
 

Code :
  1. if(!empty($_GET['type_bien'])) {
  2. $requetebien = $_GET['type_bien'];
  3.  $typebien1 = "";
  4.  $typebien2 = "";
  5.  $typebien3 = "";
  6.  $typebien4 = "";
  7.  $typebien5 = "";
  8.  $typebien6 = "";
  9. $typebien = explode(",",$requetebien);
  10. if(!empty($typebien)) {
  11.  foreach($typebien as $key => $value) {
  12.    $typebien = $value; ICI IL FAUDRAI QUE JE FAUDRAIT QUE LE NOM SE GENERE AUTOMATIQUEMENT
  13.  }
  14. }
  15. else {
  16.  $requetebien="";
  17.  $typebien="";
  18.  $typebien1 = "Villa";
  19.  $typebien2 = "Maison de village";
  20.  $typebien3 = "Appartement";
  21.  $typebien4 = "Terrain";
  22.  $typebien5 = "Cabanon";
  23.  $typebien6 = "Commerce";
  24. }
  25. }
  26. else {
  27. $typebien1 = "Villa";
  28. $typebien2 = "Maison de village";
  29. $typebien3 = "Appartement";
  30. $typebien4 = "Terrain";
  31. $typebien5 = "Cabanon";
  32. $typebien6 = "Commerce";
  33. }


 
 
 
Merci e m'aider  :)


Message édité par lilougirl8 le 27-03-2007 à 17:18:26
Reply

Marsh Posté le 27-03-2007 à 17:17:19   

Reply

Marsh Posté le 27-03-2007 à 17:43:30    

renseigne-toi sur l'injection SQL, j'en vois une belle.
 
Tes types de biens sont fixes ?

Reply

Marsh Posté le 27-03-2007 à 17:48:33    

pas le temps de tout lire mais :
1) pourquoi deux fois ?

(type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_affaire='".$type1."' OR type_affaire='".$type2."')


 
2) au lieu de faire plein de OR, tu peux utiliser IN

Reply

Marsh Posté le 27-03-2007 à 17:54:32    

Soju => Oui effectivement je vais deja faire ça ça sera moins lourd, je débute donc je ne connais pas a fond la syntaxe...
 
Newslettux => a mon avis j'en ai de partout mais je créer d'abord tout ensuite je me pencherai sur la sécurité... mai je veux d'abord que tout marche comme je le souhaite... tu peux me montrer  a quoi tu le vois?
 
 
EDIT : Hop voila c mieux??
 

Code :
  1. $annonce = mysql_query("SELECT * FROM xxx WHERE (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_bien IN ('".$typebien1."','".$typebien2."','".$typebien3."','".$typebien4."','".$typebien5."','".$typebien6."'))    ORDER BY $tri LIMIT $limite, $nb_annonce" ) or die("Erreur : Problème avec la requete annonce" );


Message édité par lilougirl8 le 27-03-2007 à 18:00:37
Reply

Marsh Posté le 27-03-2007 à 17:59:46    

je comprends que tu veuilles t'occuper de la sécurité qu'apres.  
Mais c'est souvent mieux de la prendre en compte dès le debut du projet, sinon apres ça passe bien trop souvent à la trappe...
 
par exemple, si tu es sur un serveur php 5.1>=, utilise plutot PDO et les prepare-statement


Message édité par nemohp le 27-03-2007 à 18:00:07
Reply

Marsh Posté le 27-03-2007 à 18:03:28    

J'ai oublier de préciser mes type de bien sont fixes... il ne changerons pas il y en a que 6

Reply

Marsh Posté le 27-03-2007 à 18:52:03    

Bon après de longue recherche sur le net... apparament je suis parvenue à ça.. ça a ll'air de fonctionner... pourriez vous quend meme me donner votre avis?
 
 

Code :
  1. if(!empty($typebien)) {
  2.  $i=1;
  3.  foreach($typebien as $key => $value) {
  4.    ${"typebien".$i} = $value;
  5.    $i++;
  6.  }
  7. }

Reply

Marsh Posté le 27-03-2007 à 21:26:10    

petit up please..
 
EDIT A quoi voit tu qu'il y a une faille?


Message édité par lilougirl8 le 28-03-2007 à 13:31:14
Reply

Marsh Posté le 11-06-2007 à 12:28:46    

j'ai pas testé ton ptit bout de script, mais moi j'aurais fait comme ça (c'est assez similaire en somme...)
 

Code :
  1. if(!empty($typebien)) {
  2. $i=1;
  3. foreach($typebien as $key => $value) {
  4. $name= '$typebien'.$i; //les simple quotes permettent de ne pas interpréter $typebien, et donc de l'utiliser comme du texte
  5. $$name= $value;
  6. $i++;
  7. }   
  8. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed