Voila petit souci sur un moteur de recherche que j'ai trouver sur la toile (sur le site du zero)
Ce moteur de recherche fonctionne trés bien mais j'aimerais l'améliorer
Je m'explique
la recherche s'effectue QUE sur une seule colonne, et j'aimerais si possible faire une recherche sur plusieurs colonnes de la même table
Voivi la structure de ma table :
CREATE TABLE `vin` (
`id` int(11) NOT NULL auto_increment,
`origine` varchar(50) NOT NULL,
`nom` varchar(50) NOT NULL,
`domaine` varchar(50) NOT NULL,
`region` varchar(50) NOT NULL,
`appellation` varchar(50) NOT NULL,
`cepage` varchar(50) NOT NULL,
`detail_cepage` longtext NOT NULL,
`couleur` varchar(50) NOT NULL,
`millesime` decimal(4,0) NOT NULL,
`date_achat` date NOT NULL,
`quantite` decimal(3,0) NOT NULL,
`prix` decimal(6,2) NOT NULL,
`note` varchar(5) NOT NULL,
`date_conso` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `vin`
--
INSERT INTO `vin` (`id`, `origine`, `nom`, `domaine`, `region`, `appellation`, `cepage`, `detail_cepage`, `couleur`, `millesime`, `date_achat`, `quantite`, `prix`, `note`, `date_conso`) VALUES
(1, 'france', 'château l étoile de viaud', '', 'bordeaux', 'lalande de pomerol', '', '', 'rouge', '2008', '0000-00-00', '0', '0.00', '3', '0000-00-00'),
(2, 'france', 'toto', '', 'bordeaux', 'bordeaux', '', '', 'rouge', '2009', '0000-00-00', '2', '0.00', '2', '0000-00-00'),
(3, 'france', 'tata', '', 'alsace', 'bergerac', '', '', 'rosé', '2008', '0000-00-00', '1', '100.00', '1', '0000-00-00'),
(4, 'france', 'titi', '', 'rhone', 'coteaux du lyonnais', '', '', 'blanc', '2001', '0000-00-00', '0', '150.50', '3', '0000-00-00'),
(5, 'france', 'tutu', '', 'bordeaux', 'bordeaux', '', '', 'rouge', '2002', '0000-00-00', '6', '200.00', '0', '0000-00-00');
actuellement je fais la recherche sur le nom du vin et les vins disponible (si $qte et different de 0)
j'aimerai faire une recherche sur plusieurs champs exemple (nom, region, appellation, couleur, millesime)
J'ai essayé avec AND OR mais sans succès dès que je coche la case disponibilité, je me retrouve avec aucun resultat
voici le code :
<?php
Connect_mySql();
if (isset($_POST['rechercher'])) {
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
$mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));
if (isset($_POST['qte'])) { // si on a coché la case
$qte = "AND quantite <> '0'";
}
else { // si on ne l'a pas cochée
$qte = '';
}
if ($mode == "tous_les_mots") {
$and_ou_or = 'AND'; // on utilisera AND dans la boucle
}
else {
$and_ou_or = 'OR'; // on utilisera OR dans la boucle
}
if ($mode == "expression_exacte") { // si le mode de recherche est par expression exacte
$selection_recherche = mysql_query("SELECT * FROM vin WHERE nom LIKE '%$recherche%' $qte ORDER BY id ASC");
}
else { //si le mode de recherche n'est pas par expression exacte
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count($mots); //compte le nombre de mots
$valeur_requete = '';
for ($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) { // tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
$valeur_requete .= '' . $and_ou_or . ' nom LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; // modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete, $and_ou_or); // suppression de AND ou de OR au début de la boucle
$selection_recherche = mysql_query("SELECT * FROM vin WHERE $valeur_requete $qte ORDER BY id ASC"); // requête avec le résultat de la boucle dedans
}
$nombre_resultats = mysql_num_rows($selection_recherche); // compte le nombre d'entrées sélectionnées par la recherche
if ($nombre_resultats == 0) { // s'il n'y a pas de résultat
?>
<br />
<div id="form">
<form>
<fieldset>
<legend>Résultat de la recherche : <font color="#FF0000"><b>aucun resultat.</b></font></legend>
<br />
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td height="25">
<input type="button" value="retour" onclick="document.location.href = '<?php echo $_SERVER['PHP_SELF'];?>?mod=1';" >
</td>
</tr>
</table>
</fieldset>
</form>
</div>
<?php
}
else { //il y a au moins un résultat
$couleur[0]="#dae0d2";
$couleur[1]="#ddeeff";
$i=0;
?>
<div id="form">
<form action="<?php echo $_SERVER['PHP_SELF'];?>?mod=6&task=dropVin&idVin=<?php echo $_GET['idVin']; ?>" method="post">
<input type="hidden" name="idVin" value="<?php echo $_GET['idVin']; ?>" />
<fieldset>
<legend>Résultat de la recherche : <font color="#0000FF"><b><?php echo $nombre_resultats; ?></b></font> vin(s) trouvé(s).</legend>
<br />
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr bgcolor="#ffcc66">
<td width="3%" height="20" align="center">
</td>
<td width="28%" align="center">
<b>nom</b>
</td>
<td width="15%" align="center">
<b>région</b>
</td>
<td width="15%" align="center">
<b>appellation</b>
</td>
<td width="7%" align="center">
<b>couleur</b>
</td>
<td width="7%" align="center">
<b>millésime</b>
</td>
<td width="5%" align="center">
<b>qté</b>
</td>
</tr>
<?php
while ($resultats = mysql_fetch_array($selection_recherche)) { // boucle affichant les résultats
?>
<tr bgcolor = <?php echo $couleur[($i%2)]; ?> ></i>
<td align="center">
<a href="index.php?mod=6&task=detail&idVin=<?php echo $resultats['id']; ?>" target="_self">
<img src="./img/info.png" title="détail" border="0" width="32" heigth="32" />
</a>
</td>
<td>
<i> <?php echo strtoupper($resultats['nom']); ?></i>
</td>
<td>
<i> <?php echo ucwords($resultats['region']); ?></i>
</td>
<td>
<i> <?php echo ucwords($resultats['appellation']); ?></i>
</td>
<td align="center">
<i><?php echo $resultats['couleur']; ?></i>
</td>
<td align="center">
<i><?php echo $resultats['millesime']; ?></i>
</td>
<td>
<table width="100%" border="0">
<tr>
<td width="50%" align="right">
<i><?php echo $resultats['quantite']; ?></i>
</td>
<td width="50%" align="left">
<img src="./img/bouteille_rouge.png" border="0" width="10" height="32" />
</td>
</tr>
</table>
</td>
<?php
$i++;
}
?>
</tr>
<tr>
<td height="27" valign="bottom" colspan="5">
<input type="button" value="nouvelle recherche" onclick="document.location.href = '<?php echo $_SERVER['PHP_SELF'];?>?mod=1';" >
</td>
</tr>
</table>
<?php
}
}
else { // si on n'a pas validé le formulaire, on l'affiche
?>
</div>
<br />
<div id="form">
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?mod=1">
<fieldset>
<legend>Rechercher un vin</legend>
<br />
<table width="100%" border="0" cellspacing="3" cellpadding="0">
<tr>
<td width="20%" height="25">
Recherche par mot
</td>
<td width="80%">
<input type="text" name="recherche" size="50" onkeyup="this.value=this.value.toLowerCase()" />
</td>
</tr>
<tr>
<td height="25">
Recherche par
</td>
<td>
<select name="mode" style="width: 335px;">
<option value="tous_les_mots">tous les mots</option>
<option value="expression_exacte">mot exacte</option>
<option value="un_mot">au moins un mot</option>
</select>
</td>
</tr>
<tr>
<td width="20%" height="25">
Uniquement les vins disponible
</td>
<td>
<input name="qte" type="checkbox" />
</td>
</tr>
<tr>
<td height="25" colspan="2">
<input type="submit" name="rechercher" value="lance le recherche" />
</td>
</tr>
</table>
</fieldset>
</form>
</div>
<?php
}
mysql_close(); // déconnexion de la bdd
?>
merci pour votre aide