Bonjour à tous,

Je galère sur un problème de pagination.
En fait, j'ai créé une page interface.php dans laquelle je récupère l'ensemble des contacts enregistrés dans ma table.

Jusque là, tout fonctionne bien. La pagination aussi.

Dans cette page, j'ai rajouté un filtre par date dont le code est le suivant :

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
 
<FORM method="post" name="liste" action="interface2.php">
<TABLE>
<TR>
<TD width="25" align="center">Du</TD>
<TD>
<SELECT name="choix">
 
<option value="">Date de début</option>
<?php
$SQL = "SELECT DISTINCT datecontact FROM visiteurs ORDER BY datecontact";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res)) { ?>
 
<option value="<?php echo $val["datecontact"]; ?>"<?php if(isset($_POST['choix']) && $_POST['choix'] == $val["datecontact"]) {
?> selected="selected" <?php } ?> > <?php echo dateUsToFr($val["datecontact"]) ?></option> <?php } ?>
 
</SELECT>
</TD>
<TD width="25" align="center">au</TD>
<TD>
<SELECT name="choix2">
 
<option value="">Date de fin</option>
<?php
$SQL = "SELECT DISTINCT datecontact FROM visiteurs ORDER BY datecontact";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res)) { ?>
 
<option value="<?php echo $val["datecontact"]; ?>"<?php if(isset($_POST['choix2']) && $_POST['choix2'] == $val["datecontact"]) {
?> selected="selected" <?php } ?> > <?php echo dateUsToFr($val["datecontact"]) ?></option> <?php } ?>
 
</SELECT>
</TD>
<TD width="25"></TD>
<TD><input name="submit" type="submit" value="Envoyer" /></TD>
</TR>
</TABLE>
</FORM>
Une fois que je clique sur "envoyer", j'arrive sur la page interface2.php qui reprend le même système de pagination que la page interface.php mais cette fois pour la fourchette de dates que j'ai filtrée.
Voici le code de la page interface2.php

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
 
<?php 
function dateUsToFr ($date) {
sscanf($date, "%4s%2s%2s", $y, $mo, $d);
return $d.'/'.$mo.'/'.$y; }
 
function barre_navigation ($nb_total, $nb_affichage_par_page, $page, $nb_liens_dans_la_barre) {
$barre = '';
 
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'page' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?page=';
}
else {
$tableau = explode ("page=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?page=';
}else {$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'page=';
}}}
 
// on calcul le numéro de la page active
$page_active = floor(($page/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
 
if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}else { $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;}
 
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A>&nbsp;&nbsp;';
}else {$lien='';}
$barre .= $lien;
 
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= "<span style='color:#000; font-weight:normal;'>".$cpt."</span>";
}else {
$barre .= "<span style='color:#000; font-weight:normal;'>".$cpt."</span>&nbsp;-&nbsp;";
}
}else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}else {
 
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";
}
}
}
 
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
 
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = '&nbsp;&nbsp;<A HREF="'.$cible.'">>></A>';
}
else { $lien='';
}
$barre .= $lien;
return $barre;    
}	
 
mysql_connect("SERVER", "USER", "PWD");
mysql_select_db("DB");
 
if (!isset($_GET['page'])) $_GET['page'] = 0;	
$nb_affichage_par_page = 10;
 
// récupère l'identifiant de la liste déroulante
if( (isset($_POST['choix']) && $_POST['choix'] != "") && (isset($_POST['choix2']) && $_POST['choix2'] != "") )
 
{ 	
$sql = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."' ORDER BY idVisiteur ASC LIMIT ".$_GET['page'].','.$nb_affichage_par_page; 
}else{
header("Location:interface.php");
}
$result = mysql_query($sql);
$nb_total = mysql_num_rows($result);
 
// Nombre d'enregistrements dans la table
 
$contactreq = mysql_query ("SELECT COUNT(*) FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."'");
$count = mysql_fetch_array($contactreq);
?>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Contacts</TITLE>
<META http-equiv="pragma" content="no-cache" />
<META content="text/html; charset=windows-1252" http-equiv=Content-Type>
</HEAD>
 
<BODY>
<DIV><b><?php echo $count[0]; ?></b> contacts ont été trouvés.</DIV>
<TABLE>
<TR><TD>Contacts></TD></TR>
<TR><TD>
<TABLE>
<form method="post" name="suppression" action="suppr.php?debut=<?php echo $_GET['debut']; ?>">
<tr>
<td><<input type="submit" value="Supprimer"></td>
<td>
<input type="button" onClick="window.open('export.php')" value="Exporter la liste" />
</td>
</tr>
<?php  
$req = mysql_query($sql);
while ($donnees = mysql_fetch_array($req)) { ?>
<tr><td>
<input type="checkbox" name="<?php echo $donnees['idVisiteur']; ?>" value="<?php echo $donnees['idVisiteur'] ?>"></td>
<td><strong><?php echo dateUsToFr ($donnees['datecontact']); ?></strong></td>
<td><?php echo $donnees['civilite']; ?></td>
<td><?php echo $donnees['nom']; ?></td>
<td><?php echo $donnees['prenom']; ?></td>
<td><?php echo $donnees['adresse']; if ($donnees['adresse'] =="") {echo '-';}  ?></td>
<td><?php echo $donnees['cp']; ?></td>
<td><?php echo $donnees['ville']; if ($donnees['ville'] =="") {echo '-';}  ?></td>
</tr><tr><td></td></tr><?php } ?>
</form>
</TABLE></TD></TR>
<TR><TD>
<?php echo '<span class="gras" style="font-family:Arial, Helvetica, sans-serif; font-size:11px;">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['page'], 3).'</span>'; ?>
</TD></TR></TABLE>
</BODY>
</HTML>
Mon filtre fonctionne bien mais ma barre de liens pour passer d'une page de résultats à l'autre (lorsque j'ai plus de 10 résultats) n'apparait pas correctement, j'ai juste le numéro 1.

Alors que cette même barre avec le même script apparait bien dans ma page principale qui m'affiche tous les contacts de ma table.
C'est pour cette raison que j'ai choisi d'envoyer vers une autre page le résultat de mon filtre car je n'arrivais pas à le faire dans le même page tout en gardant un système de pagination sur mon résultat.

ça devient une usine à gaz et je ne m'en sors pas.
Merci pour votre aide.