Recherche par critères en PHP

Rechercher

Recherche par critères en PHP

Par bedi01  -  6 reponses  -  Le 17/10/2011 18:55  -  Editer  - 

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 21:13  -  Haut de page  - 

Salut Bedi01,

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

 
Par bedi01  -  Le 18/10/2011 13:15  -  Haut de page  - 

bonjour ,

voici mon code, merci de me venir en aide

 

      \---|-- Choisir \---|--
 
Par Cyrano  -  Le 18/10/2011 21:25  -  Haut de page  - 

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 10:34  -  Haut de page  - 

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">&nbsp;</td>
        <td>&nbsp;</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">&nbsp;</td>
      </tr>
      <tr height="15"><td colspan="4">&nbsp;</td></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"><td colspan="4">&nbsp;</td></tr>
      <tr>
        <td colspan="2">&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
// 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 ();
?>

 

 

 
Par bedi01  -  Le 19/10/2011 17:38  -  Haut de page  - 

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 21:42  -  Haut de page  - 

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.

 

Ajouter une réponse à la discussion

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

Identifiez-vous
Join |  ID/MDP? |