Page 1 sur 1

Select automatique + manuel

Posté : 18 sept. 2009, 12:45
par fabrice88250
bonjour,
je suis en traind e faire un petit moteur de recherche pour mon site internet.
j'ai donc créé un formulaire pour la recherche sur 2 champs :
un champ via un select qui recupere toutes les galerie du site pour faire la recherche par nom de galerie
un champ de saisie pour cherche en fonction d'un mot.

mon probleme se pose sur le champ select :
pour agrémenté mon champs select je fait :
<form action="search.php" method="post">
Rechercher par 
<select name="rechercherpar">
<?php
include("../admin/connexion-sql.php");
$sql = "SELECT DISTINCT type FROM IWgalerie"; // requéte SQL   
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  // envoie de la requéte 
while($resultat = mysql_fetch_array($req))   
{
echo '<option>'.$resultat['type'].'</option>';
}
?>
</select>
Mot clé
<input type="text" name="mot_cle">
<input type="submit" value="Rechercher">
</form>
je recupere donc dans mon champ select tout les types et sans doublons.
maintenant je voudrai ajouter une option supplementaire qui serait de pouvoir également faire la recherche dans toutes les galerie et c'est là que je bloc.

comment ajouter manuellement ou automatiquement une option au select qui dit : toutes les galeries (tous les types).

ma requet sql est la suivante :
$resultat=mysql_query("SELECT * FROM IWgalerie WHERE type='$champ' AND match(`ref`,`exemple`,`alt`) against ('$mot')");

Re: Select automatique + manuel

Posté : 18 sept. 2009, 16:18
par Ryle
Pour php, ta requête sql n'est rien de plus qu'une chaine de caractères. Tu peux donc lui demander de la construire comme n'importe quelle chaine en concaténent plusieurs chaines :
$sql = "SELECT * FROM IWgalerie" . "WHERE type='$champ' " . "AND match(`ref`,`exemple`,`alt`) against ('$mot')";
$resultat=mysql_query($sql);
Et mieux encore, tu peux mettre des conditions pour savoir si tu ajoutes ou pas une chaine :
$sql = "SELECT * FROM IWgalerie";
if (ma_condition)
   $sql.= "WHERE type='$champ' ";
if (mon_autre_condition)
   $sql.= "AND match(`ref`,`exemple`,`alt`) against ('$mot')";
$resultat=mysql_query($sql);
(Je te donne ici les grandes lignes, il faut naturellement gérer les cas ou une seule ou les deux conditions sont remplies pour glisser un "where" ou un "and" à l'endroit qui va bien :))

Résultat, rien ne t'empêche d'avoir une autre liste déroulante avec les types disponibles, et d'utiliser la valeur sélectionner pour filtrer ta requête :)