Recherche base de données moteur de recherche
Bonjour,
j'ai fait un moteur de recherche avec pagination qui laisse le choix à l'internaute de choisir dans quel type de recherche il veut faire avec un select (titre, résumé, mots clé).
Le moteur de recherche simple fonctionne ainsi que les recherche ciblé soit par titre, résumé ou mots clé mais quand je propose une recherche ciblé sur le titre, le résumé et les mots clé en même temps cela ne fonctionne plus. Il me dit :
Citation:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'resume mot_cle LIKE '%saint-lô%' ORDER BY date DESC' at line 1
Mon code html:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <div class="moteur_recherche">
<form name="Formulaire_recherche" method="POST" action="result_recherche.php">
<input type="text" name="txt_recherche" id="idTxt_recherche" />
<label> par </label>
<select name="liste">
<option selected="defaut" value="titre, resume, mot_cle">défaut</option>
<option value="titre">titre</option>
<option value="resume">résumé</option>
<option value="mot_cle">mots clé</option>
</select>
<input class="btn_loupe" type="submit" name="btn_recherche" value="" onclick="return test_recherche(this.Formulaire_recherche)" />
</form>
</div> |
code php:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| <?php
//Liste des variables utilisées
$base = 'tevi';
$host = 'localhost';
$user = 'root';
$pass = '';
$recherche = FALSE;
if (isset($_POST['txt_recherche']) && $_POST['txt_recherche'] != NULL && ($_POST['liste'])){ // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
$mot_cle = $_POST['txt_recherche'];
$liste = $_POST['liste'];
$recherche = TRUE;
}
//On ajoute une methode $_GET pour récuperer $mot_cle dans l'url afin d'afficher les différentes pages de liens
elseif (!empty($_GET['txt_recherche'])){
$mot_cle = urldecode($_GET['txt_recherche']);
$liste = urldecode($_GET['liste']);
$recherche = TRUE;
}
if ($recherche == TRUE){
//Connection a la base de données
mysql_connect($host, $user, $pass);
mysql_select_db($base);
mysql_set_charset( 'utf8' );
//Requête pour la recherche
$sql = mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video WHERE ".$liste." LIKE '%".mysql_real_escape_string($mot_cle)."%' ORDER BY date DESC") or die (mysql_error()); // Requête pour la recherche
$nb_resultats = mysql_num_rows($sql); // on utilise la fonction pour compter les résultats
if($nb_resultats != 0){ // si le nombre de résultats est différent de 0, on continue{
//Affichage du nombre d'éléments trouvé ainsi que les éléments
?>
<h3>Nous avons trouvé <?php echo $nb_resultats; // on affiche le nombre de résultats
if($nb_resultats > 1) { echo ' résultats :'; } else { echo ' résultat :'; } // on vérifie le nombre de résultats pour orthographier correctement.
?></h3>
<?php
//Calcul du nombre de page
$titre = $nb_resultats;
$limite = 5;
$nbPage = ceil($titre/$limite);
if(isset($_GET['page']) && $_GET['page']>0 && $_GET['page']<=$nbPage){
$cPage = $_GET['page'];
}
else{
$cPage = 1;
}
//Construction de la requete
$min = ($cPage-1)*$limite;
$sql=mysql_query("SELECT id_video, date, titre, nom_video, resume FROM tab_video WHERE ".$liste." LIKE '%$mot_cle%' ORDER BY date DESC LIMIT ".$min.",".$limite);
// var_dump($sResult);
//Afficher la liste des actualitées trouvées lié au mot-clé dans un tableau
while($donnees = mysql_fetch_array($sql)){
echo "<table class='tab_affichage_recherche'>";
echo"<tr>
<td class='taille_video'>".$donnees['nom_video']."</td>
<td>
<table>
<tr>
<td class='info_video_titre'>".$donnees['titre']."</td>
</tr>
<tr>
<td class='info_video_date'>".$donnees['date']."</td>
</tr>
<tr>
<td class='info_video_resume'>".$donnees['resume']."</td>
</tr>
</table>
</td>
</td>
</tr>
</table>";
?> |
Comment je pourrai résoudre le problème ?
Merci de votre aide