J'essaie de faire fonctionner un script de moteur de recherche. Ma BDD de livres " ref, auteur, titre, description, commentaire, prix"
lorsque je fais un rechercher, elle ne se fait que dans le champs commentaire et description, et en plus seulement partiellement ( des livres ne sont pas pris en compte).
Pourriez vous m'aidez merci.
le formulaire
Code : Tout sélectionner
<form action="search.php" method="post">
<input type="text" name="search" size="100" style="font-size: 12px;"><br><br>
<input type="radio" name="option" value="all" style="border: none; font-size: 12px;" checked>Rechercher tous les mots<br>
<input type="radio" name="option" value="one" style="border: none; font-size: 12px;">Rechercher un de ces mots<br>
<input type="radio" name="option" value="sentence" style="border: none; font-size: 12px;">Rechercher l'expression exacte
<br><br>
<input type="submit" value="Rechercher" style="font-size: 12px; position: relative; left: 20px;">
</form> la fonction de recherche:
<?php function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
{
// option de recherche
$option = $_POST['option'];
// texte de recherche
$search = $_POST['search'];
// si c'est le premier appel de la fonction
if(!isset($fonction_requete))
{
static $fonction_requete = 1;
// si "Rechercher tous les mots" ou "Rechercher un de ces mots"
if($option == 'all' || $option == 'one')
{
// liste des mots
$mots = explode(' ', $search);
// sépararateur
if($option == 'all')
$sep = ' AND ';
else
$sep = ' OR ';
} // if($option == 'all' || $option == 'one')
// "Rechercher l'expression exacte"
else
{
$mots = $search;
$sep = '';
}
} // if(!isset($fonction_requete))
if(!is_array($champs))
$champs = array($champs);
if($option == 'all' || $option == 'one')
{
// pour savoir si on en est à la première itération ou non
$i = 0;
// pour tous les mots
foreach($mots as $mot)
{
if(!$i)
{
$search = '~ ^!|!^ ~ LIKE \'%' . $mot . '%\'';
$i = 1;
}
else
$search .= $sep . '~ ^!|!^ ~ LIKE \'%' . $mot . '%\'';
} // foreach($mots as $mot)
} // if($option == 'all' || $option == 'one')
else if($option == 'sentence')
$search = '~ ^!|!^ ~ LIKE \'%' . $mots . '%\'';
$i = 0;
// début de requête
if(empty($count))
$req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
else
$req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';
// ajout des champs
foreach($champs as $champ)
{
if(!$i)
{
$req_search .= '( ' . str_replace('~ ^!|!^ ~', $champ, $search) .' ) ';
$i = 1;
}
else
$req_search .= 'OR ( ' . str_replace('~ ^!|!^ ~', $champ, $search) .' ) ';
}
if(empty($count))
$req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";
return $req_search;
}
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=XXXXX;dbname=XXXXX', 'XXXXX', 'XXXXX');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$table= 'stock' ;
$champs= array('ref','auteur','titre', 'description','commentaire','prix');
$select= 'ref, auteur, titre, description, commentaire, prix';
$order='ref';
$sens= 'DESC';
$limit_start = 1;
$limit_nb=25;
# $count: paramètre optionnel: Si est vide ou non-passé, la requête est crée normaleme
$requete = requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb);
$result = $bdd->query($requete);
?>
le fonction d'affichage:
<?php
// On affiche chaque entrée une à une
while ($donnees = $result->fetch())
{
?>
<?php
$image="images_stock/".$donnees['ref']."_1.jpg";
if (file_exists($image))
{
$imageOK=$image;
}
else
{
$imageOK="images_stock/no_image.jpg";
}
?>
<li>
<div class="block">
<a href="#"><img src="<?php echo $imageOK;?>"alt="" /></a>
<h2><a href="#"> <?php echo $donnees['auteur']; ?></a></h2>
<h3><?php echo $donnees['titre']; ?></h3>
<p><?php echo $donnees['description']; ?></p>
<p><?php echo $donnees['commentaire']; ?></p>
<p><?php echo $donnees['prix']; ?></p>
</div>
</li>
<?php
}
$result->closeCursor(); // Termine le traitement de la requête
?>
Merci encore