Recherche par critères en PHP - Apprendre-PHP.com

Rechercher
Boutique en ligne, solution e-commerce, script PHP et PERL : RAYNETTE

Recherche par critères en PHP

Par bedi01 -  7 reponses -  Le 17/10/2011 -  Flux RSS - 

bonjour a tous,

je suis a la recherche d'aide pour l'elaboration de mon script me permettant de rechercher et d'afficher a partir d'un formulaire les produits de ma base de donnée en fonction des dates de debut et de fin. voici presenté mon script, mais je pense que la logique et la requete sont maladroitement composé.merci de me venir en aide.

 

 

 

 

 

Réponses apportées à cette discussion

Par Cyrano -  Le 17/10/2011 - 

Salut Bedi01,

sans le code, difficile de te donner une réponse ...

 

 
Par bedi01 -  Le 18/10/2011 - 

bonjour ,

voici mon code, merci de me venir en aide

 

<?php include("../Connections/dbb.php"); ?>

<?php if(isset($_POST['CODEPROD'])){ $CODEPROD=$_POST['CODEPROD']; } //valeur par défaut à l'arrivée else{ $CODEPROD="choisir"; } /*voir suite dans les ajouts PHP dans le select affiche l'option selected le cas échéant*/ ?> <FORM  METHOD="post" ACTION="impprod.php"> <fieldset> <table> <tr> <td height="10">&nbsp;</td><td>&nbsp;</td><td> <SELECT name="CODEPROD"> <option value="choisir" selected="selected"> ----- Choisir ----- </option> <option value="produit"<?php if($CODEPROD =='produit') { echo 'selected'; } ?>>Tous les produits</option> <?php //On se connecte $dbb=mysql_connect($hostname_dbb, $username_dbb, $password_dbb) or die('Erreur de connexion ' . mysql_error());    // on sélectionne la base mysql_select_db($database_dbb) or die('Erreur de selection ' . mysql_error()); //On prépare la requête SQL qui récupère les champs $sql = "SELECT DISTINCT CODEPROD FROM pesee ORDER BY CODEPROD";    /* On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne passe pas (or die) */ $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); //On scanne le résultat et on construit chaque option avec while($data = mysql_fetch_array($req)){ // on affiche chaque champ echo '<option name="'.$data['CODEPROD'].'">'.$data['CODEPROD'].'</option>'; } //On libère MySQL de cette première requête mysql_free_result ($req); //On ferme le select ?> </SELECT> </td><td height="10">&nbsp;</td><td>&nbsp;</td></tr> <tr height="15"></tr> <tr> <td align="right" height="10">p&eacute;riode du:</td> <td><input type="text" name="DATEP1" /></td> <td align="right" height="10">Heure:</td> <td><input type="text" name="HEUREP" /></td></tr> <tr> <td align="right" height="10">Au:</td> <td><input type="text" name="DATEP2" /></td> <td align="right" height="10">Heure:</td> <td><input type="text" name="HEUREP" /></td></tr> <tr height="10"></tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td align="left"><input type="submit" value="Impression" name="OK"></td> <td><input type="reset" value="Annuler" /></td> </tr>   </table> </fieldset> </FORM> <!-- On ferme le formulaire --> <?php //On traite le formulaire if(isset($_POST['OK'])){ $CODEPROD=$_POST['CODEPROD']; $DATEP1=$_POST['DATEP1']; $DATEP2=$_POST['DATEP2']; // On prépare la requête //requête différente selon qu'on veut tout le champ //ou un champ avec une condition $sql = 'SELECT CODEPROD FROM pesee WHERE DATEP BETWEEN "'.$DATEP1.'" AND "'.$DATEP2.'"'; /* On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne passe pas (or die)*/ $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $data=mysql_num_rows($req); // si on a récupéré un résultat on l'affiche. if($data) { // début du tableau echo'<p><u>Liste des produits</u></p>'; echo '<center><table bgcolor="#FFFFFF" width="590" align="center">'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>N°Camion</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>CONNAISSEMENT</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>PRODUIT</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>CLIENT</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>TRANSPORTEUR</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>DESTINATION/ORIGINAL</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>Poids net</u></b></td>'; echo '</tr>'."\n"; //On scanne chaque résultat et affiche while($row = mysql_fetch_array($req)){ echo '<tr>'; echo '<td bgcolor="#CCCCCC">'.$row['NUMCON'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['NUMLOT'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['CODEPROD'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['CODECLI'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['TRANSPORT'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['DESTI'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['POIDNET'].'</td>'; echo '</tr>'."\n"; } echo '</table></center>'."\n"; // on libère le résultat mysql_free_result($req);     } elseif($CODEPROD=='produit') { $sql='SELECT CODEPROD FROM pesee WHERE DATEP BETWEEN "'.$DATEP1.'" AND "'.$DATEP2.'"'; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $data=mysql_num_rows($req); // si on a récupéré un résultat on l'affiche. if($data) { // début du tableau echo'<p><u>Liste des produits</u></p>'; echo '<center><table bgcolor="#FFFFFF" width="590" align="center">'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>Code</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>Libellé</u></b></td>'; echo '<td bgcolor="#669999" style="text-align:center"><b><u>Observation</u></b></td>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne. while($row = mysql_fetch_array($req)) { echo '<tr>'; echo '<td bgcolor="#CCCCCC">'.$row['CODEPROD'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['CODECLI'].'</td>'; echo '<td bgcolor="#CCCCCC">'.$row['POIDNET'].'</td>'; echo '</tr>'."\n"; } echo '</table></center>'."\n"; // fin du tableau. } else echo '<p><u>Liste des produits</u></p>Pas d\'enregistrements dans cette table...'; // on libère le résultat mysql_free_result($req);     } } //On ferme sql mysql_close (); ?>

 

je ne sais pas comment afficher mon code sur ce forum

 

 
Par Cyrano -  Le 18/10/2011 - 

Dans la barre d'outils au dessus de la zone de saisie, il y a à droite un bouton <> (juste à droite de HTML) où on sélectionne le langage et où on peut coller le code. Ce sera effectivement plus facile à lire qu'en vrac comme ça...

 
Par Cyrano -  Le 19/10/2011 - 

Salut,

j'ai quand même regardé un peu, tu ne dois pas avoir beaucoup de résultats, les dates doivent être formatées pour être correctement interprétées par MySQL (et c'est valable pour la plupart des bases de données.

Si par exemple dans ton formulaire tu saisis 19/10/2011, MySQL ne saura pas l'interpréter parce qu'il aurait fallu lui envoyer 2011-10-19.

Il faudrait aussi que tu vérifies un certain nombre de conditions avant de lancer la requête de recherche. Voici ton code un peu remis en forme et nettoyé, j'ai ajusté les commentaires en fonction des modifications :

  1. <?php
  2. include("../Connections/dbb.php");
  3.  
  4. $CODEPROD = (isset($_POST['CODEPROD'])) ? $_POST['CODEPROD'] : "choisir";
  5. /**
  6.  * voir suite dans les ajouts PHP dans le select affiche l'option selected le cas échéant
  7.  */
  8. // tableau des options disponibles, d'abord deux choix par défaut :
  9. $aCodeProd = array(
  10. 'choisir' => ' ----- Choisir ----- ',
  11. 'produit' => 'Tous les produits'
  12. );
  13. // On se connecte
  14. $dbb = mysql_connect($hostname_dbb, $username_dbb, $password_dbb) or die('Erreur de connexion ' . mysql_error());
  15. // on sélectionne la base
  16. mysql_select_db($database_dbb) or die('Erreur de selection ' . mysql_error());
  17. // On prépare la requête SQL qui récupère les champs
  18. $sql = "SELECT DISTINCT CODEPROD FROM pesee ORDER BY CODEPROD";
  19. /**
  20.  * On lance la requête (mysql_query) et on impose un message d'erreur si
  21.  * la requête ne passe pas (or die)
  22.  */
  23. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  24. //On scanne le résultat et on construit chaque option avec
  25. while(false !== ($data = mysql_fetch_array($req)))
  26. {
  27. // On ajoute les codes produits dans la tableau d'options à afficher
  28. $aCodeProd[$data['CODEPROD']] = $data['CODEPROD'];
  29. }
  30. //On libère MySQL de cette première requête
  31. //On ferme le select
  32. ?>
  33. <form method="post" action="impprod.php">
  34. <fieldset>
  35. <table>
  36. <tr>
  37. <td height="10">&nbsp;</td>
  38. <td>&nbsp;</td>
  39. <td>
  40. <select name="CODEPROD">
  41. <?php
  42. /**
  43.  * Construction de la liste des options à partir du tableau construit
  44.  * précedemment :
  45.  */
  46. foreach($aCodeProd as $k => $v)
  47. {
  48. /**
  49.   * Selon la valeur de $CODEPROD, on ajoute l'attribut selected ou non.
  50.   */
  51. $selected = ($CODEPROD == $k) ? ' selected="selected"' : null;
  52. ?>
  53. <option value="<?php echo($k); ?>"<?php echo($selected); ?>><?php echo($v); ?></option>
  54. <?php
  55. }
  56. ?>
  57. </select>
  58. </td>
  59. <td height="10" colspan="2">&nbsp;</td>
  60. </tr>
  61. <tr height="15"><td colspan="4">&nbsp;</td></tr>
  62. <tr>
  63. <td align="right" height="10">p&eacute;riode du:</td>
  64. <td>
  65. <input type="text" name="DATEP1" />
  66. </td>
  67. <td align="right" height="10">Heure:</td>
  68. <td>
  69. <input type="text" name="HEUREP" />
  70. </td>
  71. </tr>
  72. <tr>
  73. <td align="right" height="10">Au:</td>
  74. <td>
  75. <input type="text" name="DATEP2" />
  76. </td>
  77. <td align="right" height="10">Heure:</td>
  78. <td>
  79. <input type="text" name="HEUREP" />
  80. </td>
  81. </tr>
  82. <tr height="10"><td colspan="4">&nbsp;</td></tr>
  83. <tr>
  84. <td colspan="2">&nbsp;</td>
  85. <td align="left">
  86. <input type="submit" value="Impression" name="OK">
  87. </td>
  88. <td>
  89. <input type="reset" value="Annuler" />
  90. </td>
  91. </tr>
  92. </table>
  93. </fieldset>
  94. </form>
  95. <!-- On ferme le formulaire -->
  96. <?php
  97. // Format des dates
  98. $masqueDates = "#^([0-9]{1,2})[^0-9]?([0-9]{1,2})[^0-9]?([0-9]{4})$#";
  99. // On traite le formulaire
  100. // Si les conditions minimum sont remplies
  101. if(
  102. isset($_POST['OK']) &&
  103. $_POST['CODEPROD'] != 'choisir' &&
  104. !empty($_POST['DATEP1']) &&
  105. !empty($_POST['DATEP2']) &&
  106. preg_match($masqueDates, $_POST['DATEP1']) &&
  107. preg_match($masqueDates, $_POST['DATEP2'])
  108. )
  109. {
  110. $CODEPROD = $_POST['CODEPROD'];
  111. /**
  112.   * Mise au format SQL des dates
  113.   */
  114. $DATEP1 = preg_replace($masqueDates, "$3-$2-$1", $_POST['DATEP1']);
  115. $DATEP2 = preg_replace($masqueDates, "$3-$2-$1", $_POST['DATEP2']);
  116. // On prépare la requête
  117. // requête différente selon qu'on veut tout le champ
  118. // ou un champ avec une condition
  119. $sql = "SELECT CODEPROD FROM pesee WHERE DATEP BETWEEN '". $DATEP1 ."' AND '". $DATEP2 ."'";
  120. /* On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne passe pas (or die)*/
  121. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  122. $data = mysql_num_rows($req);
  123. // si on a récupéré un résultat on l'affiche.
  124. if($data > 0)
  125. {
  126. // début du tableau
  127. echo'<p><u>Liste des produits</u></p>';
  128. echo '<center><table bgcolor="#FFFFFF" width="590" align="center">'."\n";
  129. // première ligne on affiche les titres prénom et surnom dans 2 colonnes
  130. echo '<tr>';
  131. echo '<td bgcolor="#669999" style="text-align:center"><b><u>N°Camion</u></b></td>';
  132. echo '<td bgcolor="#669999" style="text-align:center"><b><u>CONNAISSEMENT</u></b></td>';
  133. echo '<td bgcolor="#669999" style="text-align:center"><b><u>PRODUIT</u></b></td>';
  134. echo '<td bgcolor="#669999" style="text-align:center"><b><u>CLIENT</u></b></td>';
  135. echo '<td bgcolor="#669999" style="text-align:center"><b><u>TRANSPORTEUR</u></b></td>';
  136. echo '<td bgcolor="#669999" style="text-align:center"><b><u>DESTINATION/ORIGINAL</u></b></td>';
  137. echo '<td bgcolor="#669999" style="text-align:center"><b><u>Poids net</u></b></td>';
  138. echo '</tr>'."\n";
  139. //On scanne chaque résultat et affiche
  140. while(false !== ($row = mysql_fetch_array($req)))
  141. {
  142. echo '<tr>';
  143. echo '<td bgcolor="#CCCCCC">'.$row['NUMCON'].'</td>';
  144. echo '<td bgcolor="#CCCCCC">'.$row['NUMLOT'].'</td>';
  145. echo '<td bgcolor="#CCCCCC">'.$row['CODEPROD'].'</td>';
  146. echo '<td bgcolor="#CCCCCC">'.$row['CODECLI'].'</td>';
  147. echo '<td bgcolor="#CCCCCC">'.$row['TRANSPORT'].'</td>';
  148. echo '<td bgcolor="#CCCCCC">'.$row['DESTI'].'</td>';
  149. echo '<td bgcolor="#CCCCCC">'.$row['POIDNET'].'</td>';
  150. echo '</tr>'."\n";
  151. }
  152. echo '</table></center>'."\n";
  153. // on libère le résultat
  154. }
  155. elseif($CODEPROD == 'produit')
  156. {
  157. $sql = "SELECT CODEPROD ".
  158. "FROM pesee ".
  159. "WHERE DATEP BETWEEN '". $DATEP1 ."' AND '". $DATEP2 ."'";
  160. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $data=mysql_num_rows($req);
  161. // si on a récupéré un résultat on l'affiche.
  162. if($data)
  163. {
  164. // début du tableau
  165. echo'<p><u>Liste des produits</u></p>';
  166. echo '<center><table bgcolor="#FFFFFF" width="590" align="center">'."\n";
  167. // première ligne on affiche les titres prénom et surnom dans 2 colonnes
  168. echo '<tr>';
  169. echo '<td bgcolor="#669999" style="text-align:center"><b><u>Code</u></b></td>';
  170. echo '<td bgcolor="#669999" style="text-align:center"><b><u>Libellé</u></b></td>';
  171. echo '<td bgcolor="#669999" style="text-align:center"><b><u>Observation</u></b></td>';
  172. echo '</tr>'."\n";
  173. // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
  174. while($row = mysql_fetch_array($req))
  175. {
  176. echo '<tr>';
  177. echo '<td bgcolor="#CCCCCC">'.$row['CODEPROD'].'</td>';
  178. echo '<td bgcolor="#CCCCCC">'.$row['CODECLI'].'</td>';
  179. echo '<td bgcolor="#CCCCCC">'.$row['POIDNET'].'</td>';
  180. echo '</tr>'."\n";
  181. }
  182. echo '</table></center>'."\n";
  183. // fin du tableau.
  184. }
  185. else
  186. {
  187. echo '<p><u>Liste des produits</u></p>Pas d\'enregistrements dans cette table...';
  188. }
  189. // on libère le résultat
  190. }
  191. }
  192. //On ferme sql
  193. ?>

 

 

 

 
Par bedi01 -  Le 19/10/2011 - 

bonjour,

merci pour l'aide apporter, mais je rencontre toujours des problems a l'affichages. ce ne sont pas des erreus mais mon code n'affiche que dalle.

je voudrai que tu analyse celui ci etant un debutant afin que comprendre pourquoi il ne s'affiche pas ensuite nous allons completer pas cette evolution(ton code est trop evolué pour moi).

merci encore de ton aide

mon code:

 merde! la balise <> ne fonctionne pas chez moi, donc impossible d'afficher mon code

 

 
Par Cyrano -  Le 19/10/2011 - 

Pour avancer, il faudrait qu'il y ait au moins un message d'erreur à interpréter. Est-ce que tu as configuré ton environnement PHP pour ça ? error_reporting = E_ALL et display_error = ON dans le php.ini

Sinon, ça va être particulièrement galère pour tester quoi que ce soit. Par ailleurs je ne peux rien tester chez moi sans la base de données de toutes façons.

Pour afficher du code normalment la balise <> fonctionne bien, mais ça peut dépendre du navigateur que tu utilises, pour ma part sous Firefox ça fonctionne bien même si ponctuellement il m'est arrivé ici qu'il y ait des ratés.

 

 
Par  -  Le 07/01/2012 - 

Really very nice Good article! Thank you so much for sharing this post. cheap ugg boots

 

 

Ajouter une réponse à la discussion

Seuls les membres loggués sont autorisés à poster dans les forums !