Version complète: sur le forum Webmaster Hub : formulaire recherche
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
nolog
Bonjour

j'ai un formulaire de recherche a multi-criteres

nom, site, mail, adresse
je fais un
SELECT * FROM matable WHERE nom='$_POST['nom']' or site='$_POST['site']'...

mais je n'arrive a avoir que les infos concernant un critere "nom" par ex , au lieu d'avoir les infos sur "nom et sur "site"
si dans mon formulaire je renseigne a la fois le champ nom et site?
pouvais m'aider svp merci
nolog
CODE
if( isset($_POST['raison']) || isset($_POST['adresse']))

{
require_once('db_connect.php');
$client=mysql_query("select
*
FROM
annuaire
WHERE
nom='".$_POST['raison']."'

OR
adresse='".$_POST['adresse']."'

OR
mail='".$_POST['mail']."'
;");
//Affichage de l'erreur éventuelle
$erreur = mysql_error() ;
if ($erreur != "")
{
echo "Il y a une erreur dans la requete : " . $erreur ;
exit(0) ;
}
$nb_membre=mysql_num_rows($client);

$ligne =mysql_fetch_assoc($client);

if ( $nb_membre > 0)
{

echo'<table width="600" height="170" border="0" align="center">
<tr>
<td width="69" rowspan="7" align="left" valign="top"><img src="../images/'.$ligne['image'].'"></td>
<td width="189" ALIGN="left"><span class="rrech2">'.$ligne['nom'].'</span></td>
<td width="289"> <span class="rrech"> Offres de vente </span> </td>
</tr>
<tr>
<td " ALIGN="left"><span class="rrech">'.$ligne['adresse'].'</td>
<td><span class="rrech"> Offres d\'achat </span></td>
</tr>
<tr>
<td ALIGN="left"><span class="rrech">'.$ligne['mail'].'</td>
<td><span class="rrech"> Appel d\'offres </span></td>
</tr>
<tr>
<td ALIGN="left"><span class="rrech2">'.$ligne['telephonne'].'</span></td>
<td><span class="rrech"> Infos activit&eacute; </span></td>
</tr>
<tr>
<td ALIGN="left"></td>
<td><span class="rrech"> Coordonn&eacute;es suppl </span></td>
</tr>
<tr>
<td ALIGN="left"></td>
<td><span class="rrech"> Plan d\'acc&egrave;s </span></td>
</tr>
<tr>
<td ALIGN="left"></td>
<td><span class="rrech"> Page catalogue </span></td>
</tr>
</table> <hr>';

}

}
ouarzazat
Je vais te donner un truc que l'on m'a donné sur le hub!

Le principe est de rentrer tes variables de formulaire dans un tableau comme cela par exemple:
CODE
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="testform">
  <p>Nom : <input type="text" name="critere[field1]" value="" /<p>
  <p>Site : <input type="text" name="critere[field2]" value="1" /<p>
  <p>Champ 3: <input type="checkbox" name="critere[field3]" value="1" /<p>
  <p><input type="submit" name="submit" value="Envoyer" />&nbsp;|&nbsp;<input type="reset" name="reset" value="Reset" /></p>
</form>
</body>
</html>


Puis pour définir ta clause WHERE tu utilises une boucle pour fouiner les résultats contenus dans ce tableau, c'est à dire les variables envoyées par ton formulaire:
CODE
$whereclause = "";

foreach($_POST['critere'] as $criterion => $value)
{
if ($value!="")
{
$whereclause .= mysql_escape_string($criterion)."='".mysql_escape_string($value)."' AND ";
}
}
$whereclause = rtrim($whereclause," AND ");


Rassemble tout ça et test:
CODE
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="testform">
  <<p>Nom : <input type="text" name="critere[field1]" value="" /<p>
  <p>Site : <input type="site" name="critere[field2]" value="1" /<p>
  <p>Champ 3: <input type="checkbox" name="critere[field3]" value="1" /<p>
  <p><input type="submit" name="submit" value="Envoyer" />&nbsp;|&nbsp;<input type="reset" name="reset" value="Reset" /></p>
</form>

<?php
$whereclause = "";

 foreach($_POST['criteria'] as $criterion => $value) {
  $whereclause .= mysql_escape_string($criterion)."='".mysql_escape_string($value)."' AND ";
}
$whereclause = rtrim($whereclause," AND ");
echo $whereclause;
 ?>
</body>
</html>


Ensuite ta requête sera donc comme suit: SELECT * FROM table WHERE $wherclause

Voilà j'espère que c'est du tout bon pour toi!
++
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.