Bonjour,
je travaille actuellement sur un guide pratique qui fonctionne sur un moteur de recherche interne qui se présente ainsi sur toutes les pages :
Il est également présent sur la page index.php avec cette fonction de pagination
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 <div id="barre"> <div style="text-align:center;"> <table align="center" class="moteur"> <tr> <td class="align" colspan="3"> <p class="size" style="text-align:center;"> <div class="float"> Rechercher par : </div> <div class="float"> / Prix <form method="post" action="prix.php" onchange="submit()"> <select size="1" name="prix"> <option value="-1">Votre Choix</option> <option value="cher">+ cher</option> <option value="pascher">- cher</option> </select> </form> </div> <div class="float"> / Ambiance <?php $query = "SELECT * FROM ambiance"; $donnees = mysql_query($query); echo '<form action="ambiance.php" method="post" onchange="submit()">'; echo '<select size="1" name="ambiance"><option value="-1">Votre Choix</option>',"\n"; while($ambiance = mysql_fetch_row($donnees)) { echo '<option value="'.$ambiance[1].'">'.$ambiance[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo '</form>'; ?> </div> <div class="float"> / Luminosité <?php $query = "SELECT * FROM luminosite"; $donnees = mysql_query($query); echo '<form action="lumiere.php" method="post" onchange="submit()">'; echo '<select size="1" name="luminosite"><option value="-1">Votre Choix</option>',"\n"; while($luminosite = mysql_fetch_row($donnees)) { echo '<option value="'.$luminosite[1].'">'.$luminosite[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo '</form>'; ?> </div> <div class="float"> / Station de Métro <?php $query = "SELECT * FROM metro"; $donnees = mysql_query($query); echo '<form action="metro.php" method="post" onchange="submit()">'; echo '<select size="1" name="metro" onchange="submit()"><option value="-1">Votre Choix</option>',"\n"; while($metro = mysql_fetch_row($donnees)) { echo '<option value="'.$metro[1].'">'.$metro[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo '</form>'; ?> </div> <div class="float"> / arrêt de bus <?php $query = "SELECT * FROM bus"; $donnees = mysql_query($query); echo '<form action="bus.php" method="post" onchange="submit()">'; echo '<select size="1" name="bus"><option value="-1">Votre Choix</option>',"\n"; while($bus = mysql_fetch_row($donnees)) { echo '<option value="'.$bus[1].'">'.$bus[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo'</form>'; ?> </div> <div class="float"> / WC <i>(Hygiène)</i> <?php $query = "SELECT * FROM wc_hygiene"; $donnees = mysql_query($query); echo '<form action="hygiene.php" method="post" onchange="submit()">'; echo '<select size="1" name="hygiene"><option value="-1">Votre Choix</option>',"\n"; while($hygiene = mysql_fetch_row($donnees)) { echo '<option value="'.$hygiene[1].'">'.$hygiene[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo '</form>'; ?> </div> <div class="float"> / WC <i>(Type)</i> <?php $query = "SELECT * FROM wc_type"; $donnees = mysql_query($query); echo '<form action="type.php" method="post" onchange="submit()">'; echo '<select size="1" name="type"><option value="-1">Votre Choix</option>',"\n"; while($type = mysql_fetch_row($donnees)) { echo '<option value="'.$type[1].'">'.$type[1]; echo '</option>',"\n"; } echo '</select>',"\n"; echo '</form>'; ?> </div> <div class="float"> / Rue <form><input type="text" size="20" /></form> </div> </p> </td> </tr> </table> </div> </div> <div style="clear:both;"></div>
Et le tout s'affiche (joliment) avec :
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162 <?php $ambiance = $_POST['ambiance']; global $ambiance; $hygiene = $_POST['hygiene']; global $hygiene; $type = $_POST['type']; global $type; function pagination($total,$courante) { /* on définit quelques variables dont on aura besoin */ $prec = $courante - 1; // numéro de la page précédente $suiv = $courante + 1; // numéro de la page suivante $avder = $total - 1; // avant dernière page $adjacentes = 3; // nombre de pages à afficher de chaque côté de la page courante $url = $_SERVER['RESQUEST_URI']; /* On commence la pagination que l'on stocke dans la variable à retourner pagination() pourra ainsi être appelée plusieurs fois, en haut et en bas d'une page par exemple */ $pagination = ""; // s'il n'ya pas au moins deux pages, on n'affiche rien if($total > 1) // il y a au moins deux pages { // on commence par stocker dans $pagination le <div> d'ouverture $pagination .= "<div class=\"pagination\">\n"; // on affiche d'abord le bouton précédent if ($courante == 2) // si on est sur la page 2, le bouton précédent renvoit sur la page initiale, il est inutile de mettre ?page=1 sinon on se retrouve avec un duplicate content $pagination.= "<a href=\"$url\">« préc</a>"; elseif ($courante > 2) // si la page actuelle est supérieure à 2 le bouton précédent renvoit sur la page dont le numéro est immédiatement inférieur $pagination.= "<a href=\"$url?page=$prec\">« préc</a>"; else // sinon on est sur la page 1 : on désactive le bouton précédent. on est nécessairement sur la page 1 car on a fait le traitement des pages dans index.php, pas besoin de mettre elseif ($courante==1) $pagination.= "<span class=\"desactive\">« préc</span>"; /** On affiche maintenant les pages. On cherchera à afficher au maximum 11 numéros de page en général, et 12 dans le cas 1 où il n'y a pas de troncature : - dans un 1er cas, il n'y a pas assez de pages pour "tronquer la pagination" : on affiche toutes les pages - dans le 2ème cas, il y a trop de pages : la troncature s'effectue selon la page sur laquelle on est positionnée */ // CAS 1 : il n'y a pas assez de pages pour tronquer, on les affiche toutes (voir figure 1) if ($total < 7 + ($adjacentes * 2)) { /* on AJOUTE la page 1. On la traite séparément pour avoir index.php au lieu de index.php?page=1 et ainsi éviter le duplicate content cette ligne équivaut à : if ($courante == 1) $pagination.= "<span class=\"courante\">1</span>"; else $pagination.= "<a href=\"index.php\">1</a>"; */ $pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"$url\">1</a>"; // pour les pages restantes on utilise une simple boucle for for ($compteur = 2; $compteur <= $total; $compteur++) { if ($compteur == $courante) // on affiche la page courante différemment pour la mettre en évidence $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"$url?page=$compteur\">$compteur</a>"; } } // CAS 2 : on a assez de pages pour tronquer en fonction de la page actuelle elseif($total > 5 + ($adjacentes * 2)) { /* on est placé dans la partie proche des premières pages, on tronque donc la fin de la pagination. l'affichage sera 9 pages à gauche ... 2 pages à droite (voir figure 2) */ if($courante < 1 + ($adjacentes * 2)) { // on affiche la page 1 comme vu précédemment $pagination.= ($courante == 1) ? "<span class=\"courante\">1</span>" : "<a href=\"$url\">1</a>"; // puis les huit pages suivantes for ($compteur = 2; $compteur < 4 + ($adjacentes * 2); $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"$url?page=$compteur\">$compteur</a>"; } // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les deux dernières pages $pagination.= "<a href=\"$url?page=$avder\">$avder</a>"; $pagination.= "<a href=\"$url?page=$total\">$total</a>"; } /* on est placé dans la partie centrale de notre pagination, on tronque donc le début et la fin de la pagination. l'affichage sera 2 pages à gauche ... 7 pages au centre ... 2 pages à droite (voir figure 3) */ elseif($total - ($adjacentes * 2) > $courante && $courante > ($adjacentes * 2)) { // on affiche les deux premières pages $pagination.= "<a href=\"$url\">1</a>"; $pagination.= "<a href=\"$url?page=2\">2</a>"; // les ... pour marquer la troncature $pagination.= " ... "; // puis sept pages : les trois précédent la page courante, la page courante, puis les trois lui succédant for ($compteur = $courante - $adjacentes; $compteur <= $courante + $adjacentes; $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"$url?page=$compteur\">$compteur</a>"; } // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les deux dernière spages $pagination.= "<a href=\"$url?page=$avder\">$avder</a>"; $pagination.= "<a href=\"$url?page=$total\">$total</a>"; } /* sinon on est placé dans la partie de droite, on tronque donc le début de la pagination. l'affichage sera 2 pages à gauche ... 9 pages à droite (voir figure 4) */ else { // on affiche les deux premières pages $pagination.= "<a href=\"$url\">1</a>"; $pagination.= "<a href=\"$url?page=2\">2</a>"; // les ... pour marquer la troncature $pagination.= " ... "; // et enfin les neuf dernières pages for ($compteur = $total - (2 + ($adjacentes * 2)); $compteur <= $total; $compteur++) { if ($compteur == $courante) $pagination.= "<span class=\"courante\">$compteur</span>"; else $pagination.= "<a href=\"$url?page=$compteur\">$compteur</a>"; } } } // pour finir on affiche le bouton suivant if ($courante < $compteur - 1) $pagination.= "<a href=\"$url?page=$suiv\">suiv »</a>\n"; else $pagination.= "<span class=\"desactive\">suiv »</span>\n"; $pagination.= "</div>\n"; } // et on retourne $pagination au programme appelant la fonction return ($pagination); } ?>
Jusque là tout va bien... le couac vient de l'affichage après selection dans le moteur de recherche. La première page s'affiche correctement, mais lorsque l'on clic sur les autres numéros de pages (et bouton suivant), j'ai cette erreur qui apparait :
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 <div id="mainContent"> <h1>Guide Pratique des Cafés de la Ville de Rennes</h1> <?php $max = mysql_query ("SELECT COUNT(*) FROM cafe"); $donnees = mysql_fetch_row($max); ?> <h2>Actuellement <?php echo "<span class='color'>$donnees[0]</span>";?> lieux rennais référencés</h2> <?php include ('inc/moteur.inc.php');?> <hr /> <h3>Les dernières trouvailles :</h3> <?php include ('fonctions/pagination.php'); $query = mysql_query("SELECT COUNT(*) FROM cafe WHERE publie='oui'") or die(mysql_error()); $nb_entrees = mysql_result($query,0,0); $entrees_par_page = 2; $total_pages = ceil($nb_entrees/$entrees_par_page); if(!isset($_GET['page'])){ $page_courante = 1; } else { $page = $_GET['page']; if ($page<1) $page_courante=1; elseif ($page>$total_pages) $page_courante=$total_pages; else $page_courante=$page; } $start = ($page_courante * $entrees_par_page - $entrees_par_page); $query = "SELECT * FROM cafe WHERE publie = 'oui' ORDER BY ajout DESC LIMIT $start, $entrees_par_page"; $resultat = mysql_query($query); while($data = mysql_fetch_array($resultat)) { echo "<table align='left' class='table'>\n"; echo "<tr>\n"; echo "<td colspan='3' class='td'>\n"; echo "<div class='titre'>".$data['nom']."</div>"; echo "</td>\n"; echo "<tr>\n"; echo "<td class='td'>\n"; echo "<img class ='img' src='admin/upload/".$data['image'].".jpg'>"; echo "</td>\n"; echo "<td colspan='2' rowspan='2' class='td'>\n"; echo "<p class='p'>Adresse : <span class='color'>".$data['adresse']."</span></p>\n"; echo "<p class='p'>Horaires : <span class='color'>".$data['horaires']."</span> - Fermé le : <span class='color'>".$data['fermeture']."</span></p>\n"; echo "<p class='p'>Visité le : <span class='color'>".$data['visite']."</span></p>\n"; $total = $data['prix_cafe']+$data['deca']; echo "<p class='p'>Prix total : <span class='color'>".$total."€ </span> <i>(Café = <span class='color'>".$data['prix_cafe']."€ </span> Déca = <span class='color'>".$data['deca']."€</span>)</i></p>\n"; echo "<p class='p'>Ambiance : <span class='color'>".$data['ambiance']." ".$data['descriptif']."</span></p>\n"; echo "<p class='p'>Lumière : <span class='color'>".$data['luminosite']."</span> WC : <span class='color'>".$data['type']."</span> Hygiène : <span class='color'>".$data['hygiene']."</span></p>\n"; echo "</td>\n"; echo "</tr>\n"; echo "<tr>\n"; echo "<td class='td'>\n"; echo "<p class='p'>Metro : <span class='color'>".$data['station']."</span></p>\n"; echo "<p class='p'>Bus : <span class='color'>".$data['arret']."</span></p>\n"; echo "</td>\n"; echo "</tr>\n"; echo "</table>\n"; } echo "<div style='text-align:center;clear:both;'>"; echo "<p> </p>\n"; echo pagination($total_pages,$page_courante); echo "</div>"; echo "<p style='text-align:center;font-weight:bold;'>Il y a " .$nb_entrees. " cafés</p>"; ?> </body> </html>
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/cigam/www/uncafeundecacreme/hygiene.php on line 41
Pour être plus clair, le code de la page hygiene.php
j'ai l'impression que ma variable de formulaire se volatilise après la page une... d'ou ma tentative avec une variable globale.
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 <h1>Guide Pratique des Cafés de la Ville de Rennes</h1> <?php $max = mysql_query ("SELECT COUNT(*) FROM cafe"); $donnees = mysql_fetch_row($max); ?> <h2>Actuellement <?php echo "<span class='color'>$donnees[0]</span>";?> lieux rennais référencés</h2> <?php include ('inc/moteur.inc.php');?> <hr /> <?php include ('fonctions/pagination.php'); echo "<h3>Résultat de votre recherche : <span class='color'>Hygiene ".$hygiene."</span></h3>"; $query = mysql_query("SELECT COUNT(*) FROM cafe WHERE hygiene LIKE '$hygiene' AND publie = 'oui'") or die(mysql_error()); $nb_entrees = mysql_result($query,0,0); $entrees_par_page = 2; $total_pages = ceil($nb_entrees/$entrees_par_page); if(!isset($_GET['page'])){ $page_courante = 1; } else { $page = $_GET['page']; if ($page<1) $page_courante=1; elseif ($page>$total_pages) $page_courante=$total_pages; else $page_courante=$page; } $start = ($page_courante * $entrees_par_page - $entrees_par_page); $query = "SELECT * FROM cafe WHERE hygiene LIKE '$hygiene' AND publie = 'oui' ORDER BY nom DESC LIMIT $start, $entrees_par_page" or die(mysql_error()); $resultat = mysql_query($query); while($data = mysql_fetch_array($resultat)) { include ('inc/resultat.inc.php'); } echo "<div style='text-align:center;clear:both;'>"; echo "<p> </p>\n"; echo pagination($total_pages,$page_courante); echo "</div>"; echo "<p style='text-align:center;font-weight:bold;'>Il y a " .$nb_entrees. " cafés</p>"; ?> <p> </p>
Désolé pour le pavé que je laisse, mais j'espère que vous pourrez m'aider à résoudre ce problème.
Par avance, merci beaucoup à ceux qui vont se pencher sur le problème
Partager