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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Voici ma page recherche.php
Avez-vous une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>'; } ?>
Merci beaucoup à vous tous.
Partager