PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » Formulaire de recherche multi-critères (5 tables) : pb de requête. » 23-03-2010 13:21:02

Maljuna Kris a écrit :

Dommage, ça partait bien et puis tu t'amuses à nous changer les noms des entités pour les tables.
Doit-on considérer que la table Machine représente l'entité CONDITIONNEMENT et la table Application l'entité UTILISATION ?
Sinon il existe une norme SQL92, qui a donc déjà 18 ans, pour l'écriture des jointures.
Cela permet de ne pas mélanger dans la clause WHERE les conditions de filtrage avec celle des jointures.

Merci pour ton excellente remarque! C'est exact, je me suis mélangée les pinceaux, ce sont les noms que j'avais donné avant et que j'ai changé en cours de route... Je vais m'empresser d'éditer mon premier message!

Je vais faire des recherches sur cette fameuse norme et voir de quoi il en est alors...

Est-ce difficile d'arriver à programmer ce que je voudrais? (Je dois préciser que je débute dans tous ces langages de programmation, quels qu'ils soient.)

J'ai entendu dire que mon formulaire étant écrit en html, le rendre utilisable via php ne serait pas possible ou du moins, difficile. Qu'en pensez-vous? Dois-je faire quelque chose de plus (hormis spécifier dans le code php qu'on se connecte à la base de donnée) afin que les critères du formulaire de recherche prennnent en compte ce qu'il y a dans ma base de donnée?

A première vue il te faudrait construire la requête au fur et à mesure de ce que tu récupères vu que tu peux ne travailler que sur certaines tables voire même une seule suivant ce que tu remplis dans le formulaire (cf champs non défini).

Ce n'est pas possible de faire en sorte qu'on ignore les champs "Non définis"? Il n'y a aucun codage permettant de faire cela?
J'avoue ne pas avoir très bien compris ton code, mais peut-être que c'est ce qu'il fait ? Merci pour ton aide en tout cas!



Une connaîssance m'a donné quelques tuyaux, que j'ai essayé d'appliquer :

- J'ai modifié la page de code de mon formulaire initial au niveau des champs "conditionnement" et "application" comme cela :

  <p>
       <label for="conditionnement">Type de conditionnement ?</label><br />
       <select name="id_conditionnement">
               <option value="non">Non défini</option>
           <optgroup label="Bobines plastique">
               <option value="2">25 LBS</option>
               <option value="1">10 LBS</option>
               <option value="4">AM 20</option>
               <option value="5">B3</option>
               <option value="6">B6</option>
               <option value="11">BB 20</option>
               <option value="12">BB 35</option>
               <option value="13">BB 40</option>
               <option value="17">BP 3</option>
               <option value="18">BP 4</option>
               <option value="19">BP 50</option>
               <option value="20">BS 15</option>
               <option value="21">BS 60</option>
               <option value="23">E 200</option>
               <option value="24">EG 30</option>
               <option value="25">FT 60</option>
               <option value="26">GB 2</option>
               <option value="27">J 55</option>
               <option value="28">K 355</option>
           </optgroup>
           <optgroup label="Bobines bois">
               <option value="7">B 150</option>
               <option value="8">B 300</option>
               <option value="31">MP 100</option>
               <option value="32">MP 100K</option>
               <option value="29">MP 50</option>
               <option value="33">MP 110C</option>
               <option value="34">MP 120K</option>
               <option value="30">MP 90</option>
           </optgroup>
           <optgroup label="Futs carton">
               <option value="22">C780</option>
               <option value="35">P500</option>
               <option value="39">PPH760</option>
               <option value="36">P1537</option>
               <option value="37">P604</option>
               <option value="38">P608</option>
           </optgroup>
           <optgroup label="Tourets bois">
               <option value="40">R 260</option>
               <option value="41">R 400</option>
               <option value="42">R 500</option>
               <option value="43">R 700</option>
               <option value="10">B-SIG</option>
           </optgroup>
           <optgroup label="Tourets bois (bande collée)">
               <option value="46">T09</option>
               <option value="47">T13</option>
               <option value="48">T15</option>
               <option value="49">T17</option>
               <option value="51">TD09</option>
               <option value="50">TD08</option>
               <option value="52">Z400</option>
               <option value="53">Z6495</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="application">Type d'application ?</label><br />
       <select name="id_application">
               <option value="non">Non défini</option>
           <optgroup label="Applications">
               <option value="1">Brochage</option>
               <option value="2">Cerclage</option>
               <option value="3">Emballage bois</option>
               <option value="4">emballage carton</option>
               <option value="5t">agrafe fil plat</option>
               <option value="6">Agrafe fil rond</option>
               <option value="7">Soudure</option>
               <option value="8">Trombone</option>
               <option value="9">Rayon</option>
               <option value="10">Armature cable</option>
               <option value="11">Armature gaine</option>
               <option value="12">Armature tuyau</option>
               <option value="13">Armature divers</option>
               <option value="14">Ressort</option>
               <option value="15">Liens</option>
               <option value="16">Façonage</option>
               <option value="17">Brosse</option>
               <option value="18">Grillage</option>
               <option value="19">Crochet</option>
               <option value="20">Chaîne</option>
               <option value="21">Reliure</option>
               <option value="22">Rivet</option>
               <option value="23">Epingle</option>
               <option value="24">Cintre</option>
               <option value="25">Sommier</option>
               <option value="26">Autre</option>
           </optgroup>
       </select>
</p>

- Suite à ces modifications, j'ai modifié mon code pour le traitement du formulaire, comme ceci :

<?php
try
{
 $bdd = new PDO('mysql:host=localhost;dbname=systemes_devidage', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}
 
if (isset($_POST['id_conditionnement']))
{
 
$reponse = $bdd->query('SELECT nom  
FROM systeme, necessite, convient  
WHERE systeme.id = necessite.id_systeme  
 AND necessite.id_conditionnement = convient.id_conditionnement  
 AND convient.id_conditionnement ="'
. $_POST['id_conditionnement'] . '"
 AND convient.id_application ="'
. $_POST['id_application'] . '"
 AND type="'
. $_POST['type'] . '"
 AND vitesse="'
. $_POST['vitesse'] . '"
 AND sens="'
. $_POST['sens'] . '"
 AND pac="'
. $_POST['pac'] . '"
 AND sag="'
. $_POST['sag'] . '"
'
)or die(print_r($bdd->errorInfo()));
 
die(var_dump($reponse));
 
while ($donnees = $reponse->fetch())
{
echo $reponse['nom'] . '<br/>';
}
 
 
$reponse->closeCursor();
}
?>

Qu'en pensez-vous ? En sachant qu'il me manque un bout de code permettant d'ignorer les champs non définis...

Merci d'avance pour votre aide! :-)

#2 Forum Général PHP » Formulaire de recherche multi-critères (5 tables) : pb de requête. » 23-03-2010 13:21:02

chamallowette
Réponses : 3

Bonjour,

Je sollicite votre aide pour un projet sur lequel je travaille depuis un certain temps...sans succès!

Je souhaiterais créer un formulaire de recherche multi-critères destiné au service commercial d'une entreprise. Les personnes de ce service s'en serviraient pour trouver le système (appelés systèmes de dévidage) correspondant aux besoins des clients. Les champs du formulaire (sous forme de menus déroulants) correspondraient aux caractéristiques des différents systèmes.

Le formulaire comporterait les champs suivants :

- Type de conditionnement (choix possibles : A22, H11, B15, etc...) 
- Vitesse d'utilisation (choix possibles : <100 m/mn, <300 m/mn ou >300 m/mn) 
- Domaine d'application (choix possibles : emballage carton, emballage bois, etc...) 
- Type de système (choix possibles : statique ou dynamique) 
- Système dépendant du sens de rotation? (choix possibles : oui ou non)
- Utilisation possible en stop-and-go? (choix possibles : oui ou non)
- Utilisation possible par-à-coup? (choix possibles : oui ou non)

Tous ne doivent pas être forcément renseignés.

* Ma base de donnée :

Le problème c'est que je ne peux pas créer une seule table "système" comportant tous les champs du formulaire. En effet, un même système peut servir pour plusieurs "conditionnements" et peut-être utilisés pour différentes applications (applications qui dépendent elles-même du type de conditionnement).

Mon MCD ressemble à ça :

SYSTEME (1,n)----est adapté----(0,n)CONDITIONNEMENT(1,n)----est utilisé---(0,n)APPLICATION

Et comme mes cardinalités sont toutes "n vers n", je dois créer 2 nouvelles tables :
EstAdapte (id_système, id_conditionnement)
EstUtilise (id_conditionnement, id_application)


D'où mon MLD :
 
Conditionnement (Id, Nom) 
Application (Id, Nom) 
Système (Id, Nom, Vitesse, Type, Sens) 
EstUtilise (id_application, id_conditionnement) 
EstAdapte (id_conditionnement, id_système) 

Je souhaiterais relier ma base de donnée à un formulaire de recherche, de sorte que suivant les critères renseignés dans le formulaire (menus déroulants), l'utilisateur trouve les systèmes correspondant à son besoin.

* Mon formulaire (code html/css) :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Les systèmes de dévidage</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <link rel="stylesheet" media="screen" type="text/css" title="css" href="css3.css" />
   </head>
   <body>

<div id="en_tete">
   <p>
   <img src="bannieregde.png" alt="Bannière cfl" />
</p>


</div>
 
<div id="menu">
 
   <div class="element_menu">
       <h3>Retour accueil</h3>
       <ul>
           <li><a href="page1menu.html">Lien</a></li>
           
       </ul>
   </div>

   <div class="element_menu">
       <h3>Catalogue d'informations</h3>
       <ul>
           <li><a href="page2.html">Lien</a></li>
           
       </ul>
   </div>
 
   <div class="element_menu">
       <h3>Outil de recherche</h3>
       <ul>
           <li><a href="page3.html">Lien</a></li>
         
       </ul>
   </div>
</div>
 
<div id="corps">       


<h2>Vous souhaitez trouver le système de dévidage qui correspond à vos besoins ?<br/></h1>
       <h4><em>Veuillez sélectionner un critère parmis les menus déroulant suivants, puis cliquez sur "soumettre la requête"</em><br/><br/><br/></h1>
<form method="post" action="traitement.php">
   <p>
       <label for="conditionnement">Type de conditionnement ?</label><br />
       <select name="conditionnement" id="conditionnement">
               <option value="non">Non défini</option>
           <optgroup label="Bobines plastique">
               <option value="25LBS">25LBS</option>
               <option value="10LBS">10LBS</option>
               <option value="5LBS">5LBS</option>
               <option value="AM20">AM20</option>
               <option value="AM5">AM5</option>
               <option value="B15">B15</option>
               <option value="B20">B20</option>
               <option value="B3">B3</option>
               <option value="B6">B6</option>
               <option value="B30">B30</option>
               <option value="BB20">BB20</option>
               <option value="BB35">BB35</option>
               <option value="BB40">BB40</option>
               <option value="BP3">BP3</option>
               <option value="BP4">BP4</option>
               <option value="BP50">BP50</option>
               <option value="BS15">BS15</option>
               <option value="BS60">BS60</option>
               <option value="E200">E200</option>
               <option value="E400">E400</option>
               <option value="EG30">EG30</option>
               <option value="FT60">FT60</option>
               <option value="GB2">GB2</option>
               <option value="J55">J55</option>
               <option value="K355">K355</option>
               <option value="M70P">M70P</option>
           </optgroup>
           <optgroup label="Bobines bois">
               <option value="B100">B100</option>
               <option value="B150">B150</option>
               <option value="B300">B300</option>
               <option value="B301">B301</option>
               <option value="B500">B500</option>
               <option value="B510">B510</option>
               <option value="MJ100">MJ100</option>
               <option value="MP100">MP100</option>
               <option value="MP50">MP50</option>
               <option value="MP110">MP110</option>
               <option value="MP120">MP120</option>
               <option value="MP90">MP90</option>
               <option value="MR100">MR100</option>
           </optgroup>
           <optgroup label="Futs carton">
               <option value="C780">C780</option>
               <option value="P500">P500</option>
               <option value="PPH760">PPH760</option>
               <option value="P1537">P1537</option>
               <option value="P604">P604</option>
               <option value="P608">P608</option>
           </optgroup>
           <optgroup label="Tourets bois">
               <option value="R250">R250</option>
               <option value="R260">R260</option>
               <option value="R400">R400</option>
               <option value="R500">R500</option>
               <option value="R510">R510</option>
               <option value="R700">R700</option>
               <option value="R709">R709</option>
               <option value="RM700">RM700</option>
               <option value="RP300">RP300</option>
               <option value="RP250">RP250</option>
               <option value="RP560">RP560</option>
               <option value="SIG">SIG</option>
           </optgroup>
           <optgroup label="Tourets bois (bande collée)">
               <option value="T09">T09</option>
               <option value="T13">T13</option>
               <option value="T15">T15</option>
               <option value="T17">T17</option>
               <option value="TD09">TD09</option>
               <option value="TD08">TD08</option>
               <option value="Z400">Z400</option>
               <option value="Z6495">Z6495</option>
               <option value="Z7770">Z7770</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="application"> Domaine d'application ?</label><br />
       <select name="application" id="application">
               <option value="non">Non défini</option>
           <optgroup label="Utilisations">
               <option value="Brochage">Brochage</option>
               <option value="Cerclage">Cerclage</option>
               <option value="Emballage bois">Emballage bois</option>
               <option value="Emballage carton">Emballage carton</option>
               <option value="Agrafe (fil plat)">Agrafe (fil plat)</option>
               <option value="Agrafe (fil rond)">Agrafe (fil rond)</option>
               <option value="Soudure">Soudure</option>
               <option value="Trombone">Trombone</option>
               <option value="Rayon">Rayon</option>
               <option value="Armature (cable)">Armature (cable)</option>
               <option value="Armature (gaine)">Armature (gaine)</option>
               <option value="Armature (tuyau)">Armature (tuyau)</option>
               <option value="Ressort">Ressort</option>
               <option value="Liens">Liens</option>
               <option value="Façonage">Façonage</option>
               <option value="Brosse">Brosse</option>
               <option value="Grillage">Grillage</option>
               <option value="Crochet">Crochet</option>
               <option value="Chaîne">Chaîne</option>
               <option value="Fibre">Fibre</option>
               <option value="Reliure">Reliure</option>
               <option value="Rivet">Rivet</option>
               <option value="Epingle">Epingle</option>
               <option value="Cintre">Cintre</option>
               <option value="Autre">Autre</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="type">Type de dévidage ?</label><br />
       <select name="type" id="type">
               <option value="non">Non défini</option>
           <optgroup label="Devidage">
               <option value="Statique">Statique</option>
               <option value="Dynamique">Dynamique</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="vitesse">Vitesse de dévidage ?</label><br />
       <select name="vitesse" id="vitesse">
               <option value="non">Non défini</option>
           <optgroup label="Vitesse">
               <option value="<100m/min"><100m/min</option>
               <option value="<300m/min"><300m/min</option>
               <option value=">300m/min">>300m/min</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="sens">Système dépendant du sens de rotation ?</label><br />
       <select name="sens" id="sens">
               <option value="non">Non défini</option>
               <option value="Oui">Oui</option>
               <option value="Non">Non</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="pac">Possibilité de dévider "par à-coup" ?</label><br />
       <select name="pac" id="pac">
               <option value="non">Non défini</option>
               <option value="Oui">Oui</option>
               <option value="Non">Non</option>
           </optgroup>
       </select>
   </p>
   <p>
       <label for="sag">Possibilité de dévider en "stop and go" ?</label><br />
       <select name="sag" id="sag">
               <option value="non">Non défini</option>
               <option value="Oui">Oui</option>
               <option value="Non">Non</option>
           </optgroup>
       </select>
   </p>

   <p>
       <br/><br/><input type="submit" /> <input type="reset" />
   </p>

</form>
</div>
    </body>
</html>

* Ma page de traitement du formulaire (code php) :

C'est cette page de code qui me pose problème...
Je ne vois pas comment créer ma requête. S'il n'y avait qu'une seule table, je pense que ça irait, mais là...

Je proposerais bien ça: (qu'en pensez-vous ?)

<?php
mysql_query('SELECT nom
FROM systeme, estadapte, conditionnement, estutilise, application
WHERE systeme.id = necessite.id_systeme
AND necessite.id_conditionnement = conditionnement.id
AND conditionnement.id = convient.id_conditionnement
AND application.id = convient.id_application
AND conditionnement="' . $_POST['conditionnement'] . '"
AND type="' . $_POST['typedevidage'] . '"
AND vitesse="' . $_POST['vitesse'] . '"
AND application="' . $_POST['application'] . '"
AND sens="' . $_POST['sens'] . '"
AND pac="' . $_POST['pac'] . '"
AND sag="' . $_POST['sag'] . '"');
?>

Merci d'avance à ceux qui voudront bien m'aider à rendre mon formulaire utilisable...! :-)

Pied de page des forums

Propulsé par FluxBB