[PHP] Votre avis sur ma requete

Votre avis sur ma requete [PHP] - PHP - Programmation

Marsh Posté le 29-03-2007 à 11:16:36    

Bonjour,  
 
Je voudrais savoir si je n'ai pas fais trop d'erreurs sur ma requete... je precise que tout fonctionne à laffichage, j'aimerai m'assurer que la requete est bonne...Puis si vous voyez des problemes de sécurité se serait sympa de m'expliquer à quoi vous le voyer... (je n'ai pas encore sécurisé mes pages je le ferai en dernier mais ça me fera gagner du temps et surtout ça me fera apprendre :d )
 

Code :
  1. /*=================== triage des résultats ==========================*/
  2. if(empty($limite)){ // Je définit à 0 la limite si elle n'existe pas (J'utilise une fonction pour limiter le nombre de page)
  3. $limite = 0;
  4. }
  5. if(!empty($_GET['type'])) { //Si la requete type  existe
  6. $type1=""; // Je définis tout d'abord mes variables à NULL
  7. $type2="";
  8. $requete = $_GET['type']; // je definis ma requete par la variable $requete
  9. $type = explode(",",$_GET['type']); //Je Met dans un tableau la requete Si il y en a plusieurs
  10. if(!empty($type)) { // Si mon tableau n'est pas vide Je test les 2 lignes (qui sont les seuls possiblitité par rapport à ma base
  11.  if (!empty($type[0])) {
  12.   if (($type[0] == "Transaction" ) OR $type[0] == "Location" ) {
  13.    $type1 = $type[0];
  14.    }
  15.   else {
  16.   $type1 = "Transaction"; //dans tous les cas je définit par défaut pour ma variable $type1 "TRANSACTION"
  17.   }
  18.  }
  19.  if (!empty($type[1])) {
  20.   if (($type[1] == "Transaction" ) OR $type[1] == "Location" ) {
  21.   $type2 = $type[1];
  22.    }
  23.   else {
  24.   $type2 = "Location"; //idem pour $type2
  25.   }
  26.  }
  27. }
  28. else { //Je défini par defaut mes varaibale si elle n'existe pas
  29. $requete="";
  30. $type="";
  31. $type1 = "Transaction";
  32. $type2 = "Location";
  33. }
  34. }
  35. else { //Je défini par defaut mes varaibale si elle n'existe pas
  36. $requete="";
  37. $type="";
  38. $type1 = "Transaction";
  39. $type2 = "Location";
  40. }
  41. if(!empty($_GET['type_bien'])) { //Jutilise la meme procédure que pour $type pour l'exploitation de la requete
  42.  $typebien1 = "";
  43.  $typebien2 = "";
  44.  $typebien3 = "";
  45.  $typebien4 = "";
  46.  $typebien5 = "";
  47.  $typebien6 = "";
  48. $requetebien = $_GET['type_bien'];
  49. $typebien = explode(",",$requetebien);
  50. if(!empty($typebien)) {
  51.  $i=1; //Je créer une variable $i défini a 1 qui me servira a incrémenter le nom de la variable automatiquement
  52.  foreach($typebien as $key => $value) { //Je boucle sur le tableau
  53.   if ($value != "Villa" AND $value != "Appartement" AND $value != "Maison de village" AND $value != "Terrain" AND $value != "Commerce" AND $value != "Cabanon" )  {
  54.    $erreur = true; //Je test les valeurs si elle ne commresponde pas je définit erreur a true
  55.   }
  56.   else { //Sinon je créer mes variables
  57.    ${"typebien".$i} = $value;
  58.    $i++;
  59.   }
  60.  }
  61. }
  62. else { //Je défini par defaut mes varaibale si elle n'existe pas
  63.  $requetebien="";
  64.  $typebien="";
  65.  $typebien1 = "Villa";
  66.  $typebien2 = "Maison de village";
  67.  $typebien3 = "Appartement";
  68.  $typebien4 = "Terrain";
  69.  $typebien5 = "Cabanon";
  70.  $typebien6 = "Commerce";
  71. }
  72. }
  73. else {//Je défini par defaut mes varaibale si elle n'existe pas
  74. $requetebien="";
  75. $typebien="";
  76. $typebien1 = "Villa";
  77. $typebien2 = "Maison de village";
  78. $typebien3 = "Appartement";
  79. $typebien4 = "Terrain";
  80. $typebien5 = "Cabanon";
  81. $typebien6 = "Commerce";
  82. }
  83. if(empty($_GET['tri'])) { // idem les autres cas
  84. $tri = "prix";
  85. }
  86. else {
  87. if($_GET['tri'] != "prix" AND $_GET['tri'] != "date_entree" AND $_GET['tri'] != "ville" AND $_GET['tri'] != "nombre_pieces" AND $_GET['tri'] != "surface_habitable" ){
  88.  $erreur = true;
  89.  }
  90. else {
  91. $tri = $_GET['tri'];
  92. }
  93. }
  94. /*==============================================================*/
  95. if ($erreur == true) { //Si erreur a true je renvoi vers une page d'erreur
  96.     include("./erreur_recherche.php" );
  97. }
  98. else { //sinon je continue...
  99. /*=============== Comptage du Nombre d'annonces ===================*/
  100. $compter = mysql_query("SELECT count(ID) FROM xxxxxxxx WHERE (type_affaire='".$type1."' OR type_affaire='".$type2."') AND (type_bien IN ('".$typebien1."','".$typebien2."','".$typebien3."','".$typebien4."','".$typebien5."','".$typebien6."')) " );
  101. $nb_annonce_total = mysql_fetch_row($compter);
  102. $total = $nb_annonce_total[0];
  103. /*============================================================== */
  104. $annonce = mysql_query("SELECT * FROM xxxx 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 29-03-2007 à 11:50:56
Reply

Marsh Posté le 29-03-2007 à 11:16:36   

Reply

Marsh Posté le 29-03-2007 à 11:30:02    

et si tu te limitais à 80 colonnes ? :o

Reply

Marsh Posté le 29-03-2007 à 11:38:07    

- avec la requête seule
- avec un explicatif de ce que tu attends de la requête ?
 
ça donne quoi ?
 
je vois pas pourquoi on devrait me faire chier à lire 111 lignes de code non documenté, afin d'essayer d'imaginer ce que tu veux qu'il fasse.

Reply

Marsh Posté le 29-03-2007 à 11:38:19    

oops...désolé comment je fais ça? pour les 80 colonnes..  
 
Pis je vai rajouter les commentaires


Message édité par lilougirl8 le 29-03-2007 à 11:38:59
Reply

Marsh Posté le 29-03-2007 à 11:43:07    

Juste survolé beaucoup de if...else
Peut etre y'a t'il moyen d'utilsier des elsif ou des switch ?


---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Marsh Posté le 29-03-2007 à 11:51:30    

j'ai editer... avec des commantaires!!
 
Pour les colonnes heu... lol dsl

Reply

Marsh Posté le 29-03-2007 à 12:01:27    

// Je définis tout d'abord mes variables à NULL
 //Je défini par defaut mes varaibale si elle n'existe pas
 
Définit dés le départ à la valeur par défaut serait plus simple non?
Permettra de gagner bien des lignes.


---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Marsh Posté le 29-03-2007 à 12:10:05    

oui mai si je fais ça... si ma requete GET n'est par exemple que VILLA
les autres seront définit aussi... du coup aucun filtrage non?


Message édité par lilougirl8 le 29-03-2007 à 12:10:19
Reply

Marsh Posté le 30-03-2007 à 10:33:40    

evite autant que faire se peut les "SELECT *", outre le danger potentiel que cela représente (pour toi, pas forcément, mais dans le cas de la lecture d'un profil, ça rapatrie le mot de passe et potentiellement d'autres données sensibles), ça surcharge surtout la requête si tu n'utilises pas tous les champs.
Et même si actuellement tu les utilises tous : il se peut dans dans XXX années que tu veuilles en ajouter d'autres dont tu n'auras pas besoin dans cet exemple précis, et cela illustre la surcharge de la réponse dont je parlais plus haut.
 
EDIT :  

Code :
  1. if(empty($limite)){ // Je définit à 0 la limite si elle n'existe pas (J'utilise une fonction pour limiter le nombre de page)
  2. $limite = 0;
  3. }


 
attention, empty veut dire 'vide', cela ne veut pas dire pour autant que la variable n'existe pas ...
si je met$limite = NULL; alors ma variable sera définie (donc elle existera) mais vide ...
j'écrirais plutôt :

Code :
  1. if(!isset($limite)) { // Je définit à 0 la limite si elle n'existe pas (J'utilise une fonction pour limiter le nombre de page)
  2. $limite = 0;
  3. }


Message édité par NewsletTux le 30-03-2007 à 10:37:27
Reply

Marsh Posté le 30-03-2007 à 13:07:29    

effiectivement c'été pas très juste j'ai corriger par la meme occasion mon test sur le tri c'est la meme chose !!  
Merci beaucoup pour tes conseils

Reply

Marsh Posté le 30-03-2007 à 13:07:29   

Reply

Marsh Posté le 30-03-2007 à 14:10:30    

je vois pas pourquoi tu as besoin de répéter en double ou triple certaines infos ...
 
C'est une lacune de PHP que je n'aime pas à savoir le manque de typage, si tu n'es pas rigoureux tu finis par faire n'importe quoi.

Reply

Sujets relatifs:

Leave a Replay

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