IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Filtre avec pagination


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut Filtre avec pagination
    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.

  2. #2
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    Ton code est tortueux..

    Dans ce genre de cas il faut que tu mette en place des mecanismes de debuggage : affiche au moins tes requetes ça te permettra deja d'y voir plus clair.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    Pour être tortueux, il l'est
    Mais, étant débutant en php, je n'ai pas les bons réflexes et j'essaye d'avancer tant bien que mal.

    Mais sur ce coup là, je suis bloqué. Je vais essayer de mettre en place un mécanisme de débuggage mais ce n'est pas gagné...

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    J'ai retiré ma fonction et mis ça à la place (vu sur un autre post)

    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
     
    $affichage_par_page = 10;
    $start = isset($_GET['start'])?$_GET['start']:0; //Nombre indiquant le départ de la requete
    // on cherche le nom de la page.     
    $page = basename(__FILE__); 
     
    $select = "SELECT COUNT(*) AS total FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."'"; 
    $result = mysql_query($select)  or die ('Erreur : '. mysql_error()); 
    $row = mysql_fetch_array($result); 
    $total = $row['total'];
     
    if($total > 0) 
    { 
     	$select = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."' ORDER BY idVisiteur ASC LIMIT ".$start.','.$affichage_par_page;
    	$result = mysql_query($select)  or die ('Erreur : '.mysql_error() ); 
    	}else{
    	header("Location:ininterface.php");
    	}
    Et pour la barre de navigation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    echo 'Page : ';
    $genestart = 1;
    for($i = 1; $i <= ceil( $total_posts / $posts_per_page ); $i++)
    {
    echo '<a '.(((floor($start/$affichage_par_page)+1)==$i)?('href="'.$page.'?start='.$genestart.'"'):('')).'>'.$i.'</a>&nbsp;';
    $genestart += $affichage_par_page;
    }
    Le filtre se fait bien mais impossible de passer aux pages suivantes lorsque j'ai plus de 10 contacts : je n'ai pas de nombres(liens) dans ma barre.

  5. #5
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    ton test sur $i est mauvais. D'autre part il faudrait que tu sortes la division de la boucle, car là, tu la refais à chaque tour, tu pourrais faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $start = isset($_GET['start']) ? $_GET['start'] : 0;
    $nbPages = ceil($total_posts / $posts_per_page);
    for($i = 1; $i <= $nbPages; $i++)	{
    	echo '<a '.($genestart != $start ? 'href="'.$page.'?start='.$genestart.'"' : '').'>'.$i.'</a>&nbsp;';
    	$genestart += $posts_per_page;
    }
    Bye

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    Salut Djak,
    Merci pour ta réponse.
    J'ai adapté ce que tu m'as conseillé. Lorsque je selectionne une fourchette de dates, j'ai bien dans ma nouvelle page interface2.php, la barre de navigation avec les numéros de page, mais les résultats de ma requête ne s'affichent pas.
    Et si je clique sur un des numéros (liens), je reviens sur ma page interface.php avec l'affichage de tous mes contacts.

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    Autant pour moi, j'avais fait une erreur dans ma boucle "while" pour l'affichage des données.
    Reste cependant un problème :

    Lorsque je filtre sur plusieurs dates, et que j'ai par exemple 30 résultats, je vais avoir 3 liens dans ma barre (page : 1-2-3)

    Lorsque je clique sur l'un de ces liens, je reviens sur ma page interface.php avec l'affichage de l'ensemble de mes contacts présents dans ma table.

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    J'ai de nouveau tout modifié et suis revenu à mon code de départ.
    Tout fonctionne sauf ce que j'ai dit dans le message précédent, à savoir, dans ma page filtrée, lorsque je clique sur l'un des liens en bas de page, mes résultats filtrés ne s'affichent pas, passé la première page :

    Je sais d'où vient le problème : c'est le "$_POST['choix']" dans ma requête.
    Comme cette dernière est rappelée à chaque chargement de la page, $_POST['choix'] n'a plus d'interet lorsque l'on clique sur le lien de la 2eme page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	mysql_connect("SERVER", "USER", "PWD");
    	mysql_select_db("DB");
     
    	$sql = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."'"; 
    	$resultat = mysql_query($sql);
    	$nb_total = mysql_num_rows($resultat);
     
    	if (!isset($_GET['debut'])) $_GET['debut'] = 0;	
    	$nb_affichage_par_page = 10;
     
    	$sql = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."' ORDER BY idVisiteur ASC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;
     
    	?>
    Je ne sais pas comment contourner ça.
    Si quelqu'un a une idée...

  9. #9
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Hello,
    il faut que tu repasses tes 2 choix en GET dans l'url, ex :

    echo '<a href="inteface.php"';
    if(isset($_POST['choix1']) {
    echo "?choix1=".$_POST['choix1'];
    }

    Il faudra que tu ajoutes un test sur $_GET['choix1'] avant ta requête.

    Sinon tu peux égalemement t'orienter vers les sessions, mais le passage en get suffit pour ce cas-là.

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    salut Djak,
    Je ne suis pas sûr d'avoir tout compris (je me doutais qu'il fallait utiliser la méthode Get mais je ne savais pas comment) mais je vais essayer, je te tiens au courant.

    Merci encore.

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    Apparemment, si je veux repasser mes choix dans l'url, je dois le faire dans ma fonction qui génère la barre de navigation mais je ne vois pas où !!!

    je comprends le principe mais je suis paumé et je ne sais pas où l'adapter dans mon code...

    Voici la fonction :

    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
     
    function barre_navigation ($nb_total, $nb_affichage_par_page, $debut, $nb_liens_dans_la_barre) {
    $barre = '';
     
    // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
    if ($_SERVER['QUERY_STRING'] == "") {
    $query = $_SERVER['PHP_SELF'].'?debut=';
    }
    else {
    $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
    $nb_element = count ($tableau);
    if ($nb_element == 1) {
    $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
    }
    else {
    if ($tableau[0] == "") {
    $query = $_SERVER['PHP_SELF'].'?debut=';
    }else {$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
    }}}
     
    // on calcul le numéro de la page active
    $page_active = floor(($debut/$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;
    }
    Ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."'"; 
    $resultat = mysql_query($sql);
    $nb_total = mysql_num_rows($resultat);
     
    if (!isset($_GET['debut'])) $_GET['debut'] = 0;	
    $nb_affichage_par_page = 10;
     
    $sql = "SELECT * FROM visiteurs WHERE datecontact >= '".$_POST['choix']."' AND datecontact <= '".$_POST['choix2']."' ORDER BY idVisiteur ASC LIMIT ".$_GET['debut'].','.$nb_affichage_par_page;
    Mon formulaire de filtrage :

    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>
    Merci pour votre aide.

  12. #12
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Apparemment ta fonction semble gérer le transfert des paramètres dans l'url avec l'utilisation de $_SERVER['QUERY_STRING'].
    A priori si tu mets ton formulaire en get : <FORM method="get" ... et que tu changes tous les appels de $_POST['choix1'] et $_POST['choix2'] en GET cela devrait fonctionner.
    A quoi sert le paramètre $debut de la fonction ?

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    Le "$debut" correspond à la barre de navigation qui est définie comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo '<span class="bleu">'.'Page : &nbsp;'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>'; ?>
    Comme tu me l'as conseillé, j'ai modifié mes "post" en "get" et.......ça fonctionne

    Tu es génial Djak !!! merci encore ²²²²

    Par contre, lorsque l'on utilise la méthode "get", existe-t-il un moyen de masquer ce qui apparait dans la barre d'adresse à partir du point d'interrogation ?

  14. #14
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Ah oui j'ai regardé un peu vite, j'avais pas vu que $debut était utilisée dans la fonction.

    Pour masquer les paramètres d'url je crois que le seul moyen est l'urlrewriting mais je suis pas un expert ^^

    D'autre part, n'oublie pas de protéger toutes les entrées du client utilisées directement dans une requête avec mysql_real_escapte_string()

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 92
    Par défaut
    ok, je vais regarder ça.

    Merci encore Djak.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tableau avec tri, filtre et pagination avec entete et pied fixe
    Par Pelote2012 dans le forum Contribuez
    Réponses: 1
    Dernier message: 18/12/2016, 19h06
  2. Tableau avec tri, filtre et pagination sans plugin
    Par Pelote2012 dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/07/2014, 16h26
  3. Tableau avec tri, filtre et pagination
    Par Pelote2012 dans le forum Téléchargez
    Réponses: 1
    Dernier message: 23/07/2014, 10h12
  4. Pagination et filtre avec extJS
    Par anonyhm dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 07/12/2010, 10h17
  5. [ZF 1.10] Mémorisation formulaire de filtre et de tri avec pagination
    Par ilalaina dans le forum Zend_Form
    Réponses: 1
    Dernier message: 24/06/2010, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo