Recherche par critères en PHP
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
Salut Bedi01,
sans le code, difficile de te donner une réponse ...
bonjour ,
voici mon code, merci de me venir en aide
\---|-- Choisir \---|--
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...
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 :
<?php
include("../Connections/dbb.php");
$CODEPROD = (isset($_POST['CODEPROD'])) ? $_POST['CODEPROD'] : "choisir";
/**
* voir suite dans les ajouts PHP dans le select affiche l'option selected le cas échéant
*/
// tableau des options disponibles, d'abord deux choix par défaut :
$aCodeProd = array(
'choisir' => ' ----- Choisir ----- ',
'produit' => 'Tous les produits'
);
// 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(false !== ($data = mysql_fetch_array($req)))
{
// On ajoute les codes produits dans la tableau d'options à afficher
$aCodeProd[$data['CODEPROD']] = $data['CODEPROD'];
}
//On libère MySQL de cette première requête
mysql_free_result ($req);
//On ferme le select
?>
<form method="post" action="impprod.php">
<fieldset>
<table>
<tr>
<td height="10"> </td>
<td> </td>
<td>
<select name="CODEPROD">
<?php
/**
* Construction de la liste des options à partir du tableau construit
* précedemment :
*/
foreach($aCodeProd as $k => $v)
{
/**
* Selon la valeur de $CODEPROD, on ajoute l'attribut selected ou non.
*/
$selected = ($CODEPROD == $k) ? ' selected="selected"' : null;
?>
<option value="<?php echo($k); ?>"<?php echo($selected); ?>><?php echo($v); ?></option>
<?php
}
?>
</select>
</td>
<td height="10" colspan="2"> </td>
</tr>
<tr height="15"><td colspan="4"> </td></tr>
<tr>
<td align="right" height="10">pé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"><td colspan="4"> </td></tr>
<tr>
<td colspan="2"> </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
// Format des dates
$masqueDates = "#^([0-9]{1,2})[^0-9]?([0-9]{1,2})[^0-9]?([0-9]{4})$#";
// On traite le formulaire
// Si les conditions minimum sont remplies
if(
isset($_POST['OK']) &&
$_POST['CODEPROD'] != 'choisir' &&
!empty($_POST['DATEP1']) &&
!empty($_POST['DATEP2']) &&
preg_match($masqueDates, $_POST['DATEP1']) &&
preg_match($masqueDates, $_POST['DATEP2'])
)
{
$CODEPROD = $_POST['CODEPROD'];
/**
* Mise au format SQL des dates
*/
$DATEP1 = preg_replace($masqueDates, "$3-$2-$1", $_POST['DATEP1']);
$DATEP2 = preg_replace($masqueDates, "$3-$2-$1", $_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 > 0)
{
// 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(false !== ($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 ();
?>
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 *
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.