Problème avec mysql_fetch_assoc et Match Against
Bonsoir,
J'essai de faire un moteur de recherche interne pour une base de donnée. J'ai reussi à faire la recherche en fulltext avec match against et j'ai voulu faire une pagination pour les resultats obtenus. J'ai trouvé des bouts de codes par-ci par-là parce que je ne suis pas vraiment calé en php. Le problème est que pour compter le nombre de resultats d'une recherche j'ai voulu utiliser une seconde fois le Match Against avec un mysql_fetch_assoc pour recup le tableau et une derniere ligne pour recup la valeur mais j'ai l'erreur suivante:
Code:
1 2
| Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/zefree/public_html/fr/blagues/recherche.php on line 47
recherche de femmeil y a resultat(s) |
Si je fais un simple select de la table ca marche mais ca me donne tous les resultats donc un nombre de pages impressionnant. Ce que je voudrais c'est n'avoir que les pages qui concerne la recherche en question.
Voici ma page recherche.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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| <table border=0 cellspacing=0 cellpadding=0><tr>
<form method="get" action="recherche.php">
<td><input name="search"></td>
<td><input type="submit" value="Chercher"></td>
</form>
</tr></table>
<?php
//connexion a la base
require 'connect.inc.php';
//recup du resultat formulaire
//if(isset($_POST['search'])) $search=$_POST['search'];
//else $search="";
$search = $_GET [search];
//variable pour la longueur de la recherche
$len_search=strlen($search);
// si la recherche est vide on abandonne la requete
if(empty($search))
{
echo 'tapez une recherche';
exit();
}
// si la recherche est inferieur a x on abandonne la recherche
if($len_search<3)
{
echo 'recherche inferieur a 3';
exit();
}
// si les conditions sont remplies on execute la requete
else
{
$Recherche= strtolower($search);
$messagesParPage=5; //Nous allons afficher 5 messages par page.
$retour_total=mysql_query('SELECT COUNT(*) AS total FROM blagues WHERE MATCH (joke) AGAINST $Recherche');
$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme dun tableau.
$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
//Nous allons maintenant compter le nombre de pages.
$nombreDePages=ceil($total/$messagesParPage);
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
$pageActuelle=intval($_GET['page']);
if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
{
$pageActuelle=$nombreDePages;
}
}
else // Sinon
{
$pageActuelle=1; // La page actuelle est la n°1
}
$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
$Requete="SELECT * FROM blagues WHERE MATCH (joke) AGAINST ('$Recherche') LIMIT $premiereEntree, $messagesParPage";
$sql=$Requete;
$MotClef = explode(" ", $Recherche);
$NbMotClef = count($MotClef);
$req = mysql_query($Requete) or die('Erreur SQL !<br>'.$Requete.'<br>'.mysql_error());
echo 'recherche de '.$search.'';
echo 'il y a '.$nb.' resultat(s)';
//while ($data = mysql_fetch_array($req)) {
while ($data = mysql_fetch_assoc($req)) {
echo nl2br('<h5>'.$data['joke'].'</h5>');
}
echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$pageActuelle) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="recherche.php?search='.$search.'&page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
}
?> |
Avez-vous une idée ?
Merci beaucoup à vous tous.