Afficher la suite d'une page

Fermé
jdk55 Messages postés 21 Date d'inscription vendredi 27 juin 2014 Statut Membre Dernière intervention 9 octobre 2022 - 8 sept. 2014 à 19:51
jdk55 Messages postés 21 Date d'inscription vendredi 27 juin 2014 Statut Membre Dernière intervention 9 octobre 2022 - 10 sept. 2014 à 14:23
Bonjour,
j'ai sur une page php une liste deroulante. quand je sélectionne un élément de la liste déroulante et que je clique sur le bouton valider, j'affiche 20 nom par page.

mais si par exemple les noms correspondants à l'élément sélectionné dépasse 20, je n'arrive plus à afficher les autres noms à part les 20 premiers. pourtant j'ai fais la pagination; quand je clique sur la page suivante, je reviens sur la page de début et je n'arrive jamais à afficher les autres noms à part les 20 premiers.
quelqu'un a t-il une idée sur comment faire? svp
merci pour votre aide.


A voir également:

6 réponses

Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié par Fallentree le 9/09/2014 à 14:13
pas facile de t'aider
utilises tu une requête pour sélectionner tes éléments?
peux tu joindre le bout de ton code ?
0
jdk55 Messages postés 21 Date d'inscription vendredi 27 juin 2014 Statut Membre Dernière intervention 9 octobre 2022
10 sept. 2014 à 10:28
j'affiche les elements de ma page en fonction de ce qui a été selectionné dans le formulaire. (la pagination marche sans le formulaire)
en fait quand je clique sur la page 2 par exple, ca recharge toute la page et affiche de nouveau la page d'origine. mais sans le formulaire, la page 2 affiche la suite de la selection

voici le code
<table>
<tr>
<form method="POST" action="accueil.php?pages=lies.php">
<td align="right">Selectionnez </td>
<td colspan="3">
<select name="prop" >';
<?php
$rek = $connexion->query('select ID_PROP, PROPOSITION from proposition WHERE STATUT ="vrai" order by PROPOSITION ');
while ($result = $rek->fetch()){
$idprop = $result['ID_PROP'];
$proposition = $result['PROPOSITION'];?>

<option value="<?php echo $proposition;?>"><?php echo $proposition;?></option>
<?php
}
?>
</select>
<input type="submit" name="valide" value="Valider" onClick=""/
</form>
</tr>
</table>



<?php
if (isset($_POST['prop'])){
$recu=$_POST['prop'];
}
?>

<h2 align="center"> Affichage des messages </h2>
<?php
$per_page = 2;
if(isset($_GET['page']))
{
$page=$_GET['page'];
}
else

$page = 1;
@ $req="SELECT a.TEL_ABONNE, r.ID_ABONNE,Count(*) AS total, r.ID_QUEST, r.RESULTAT, r.DATEREPONSE FROM abonne AS a, repondre AS r where a.ID_ABONNE=r.ID_ABONNE AND RESULTAT = '$recu' GROUP BY ID_ABONNE";

$requete = $connexion -> prepare($req);
$requete->execute();
$nombre = $requete->rowCount();

$start = ($page-1)*$per_page;

$req = $req." limit $start,$per_page ";
$requete = $connexion -> prepare($req);
$requete->execute();
?>

<?php
echo'<table width="800" align="center" class="tableau_list"> ';
echo'<tr>
<th>Id question</th>
<th>Nb envoie</th>
<th>Num. abonne</th>
<th>Resultat</th>
<th>Date resultat</th>
<!--th width="100">Action</th-->
</tr> ';
?>
<?php
$i=0;

while($enregistrement = $requete->fetch(PDO::FETCH_OBJ)){

$question=$enregistrement->ID_QUEST;
$tot=$enregistrement->total;
$numero=$enregistrement->ID_ABONNE;
$tel=$enregistrement->TEL_ABONNE;
$resultat=$enregistrement->RESULTAT;
$dateresult=$enregistrement->DATEREPONSE;

if($i%2 == 1)
$classe = "ligne2";
else
$classe = "ligne1";
?>

<?php
echo'<tr>';
echo'<td class="'.$classe. '">'.$question .'</td>';
echo'<td class="'.$classe. '">'.$tot .'</td>';
echo'<td class="'.$classe .'">'.$tel .'</td>';
echo'<td class="'.$classe .'">'.$resultat .'</td>';
echo'<td class="'.$classe .'">'.$dateresult.'</td>';

echo'</tr>';
?>
<?php
$i++;
}
?>
</table>

<?php
$nb = $nombre / $per_page;
if(!is_int($nb)){
$nb = (int) $nb;
$nb++;
}
?>
<!-- <span class="active_tnt_link">4</span>-->
<div id="tnt_pagination">
<span class="disabled_tnt_pagination">Precedent</span>
<?php for($i = 1; $i<=$nb; $i++) :?>
<?php if($i == $page) :?>
<span class="active_tnt_link"><?php echo $i ?></span>
<?php else :?>
<a href="accueil.php?pages=liens.php&page=<?php echo $i ?>"><?php echo $i ?></a>
<?php endif?>

<?php endfor?>
<a href="#forwaed">Suivant</a></div>
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 10/09/2014 à 11:13
Salut,

C'est une erreur classique. Pour bien comprendre il suffit voir l'état des variables à chaque requête http :

1. On charge la page pour la première fois : pas de paramètre POST (formulaire) ni GET (pagination) -> on affiche les 20 premiers résultats
2. On filtre les résultats via le formulaire : paramètres POST présent, mais pas de paramètre GET : on affiche les 20 premiers résultats filtrés
3. On clique sur le lien suivant : paramètre GET présent mais nous n'avons plus les paramètres POST (le formulaire n'est pas renvoyé) -> donc on affiche les 20 résultats suivants sans filtres

Le problème vient du fait que tes filtres du formulaires (les paramètres POST ici) ne sont pas conservés entre chaque page, sauf si on utilise uniquement le formulaire.

Plusieurs solutions pour corriger ton problème :
- enregistrer les filtres de recherche en session pour pouvoir les utiliser à chaque changement de page sans devoir renvoyer le formulaire
- transmettre les filtres de recherches en paramètre GET sur tous les liens de pagination
- considérer le paramètre de pagination comme un filtre du formulaire

Je te recommande la première solution qui est simple et efficace.

Bonne journée
0
jdk55 Messages postés 21 Date d'inscription vendredi 27 juin 2014 Statut Membre Dernière intervention 9 octobre 2022
10 sept. 2014 à 12:16
merci beaucoup Pitet. j'ai compris.
svp pour la solution numero 1 que tu me proposes, peux-tu m'aider pour y arriver? svp
merci pour ton aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
10 sept. 2014 à 13:08
Pour mettre en place cette solution :

1. On enregistre les filtres de recherche en session :
1.1. Il faut initialiser la session php pour utiliser les variables de session, on ajoute donc au tout début du script :
session_start();


1.2. A l'envoie du formulaire, on enregistre les filtres en session :
if (isset($_POST['prop'])){
    $_SESSION['recu'] = $_POST['prop'];
} 


2. Dans notre requête sql, on utilise alors les variables de session à la place des paramètres post :
$req="SELECT a.TEL_ABONNE, r.ID_ABONNE,Count(*) AS total, r.ID_QUEST, r.RESULTAT, r.DATEREPONSE FROM abonne AS a, repondre AS r where a.ID_ABONNE=r.ID_ABONNE AND RESULTAT = :recu GROUP BY ID_ABONNE";
$requete = $connexion->prepare($req);
$requete->execute(array(':recu' => $_SESSION['recu']));


Dans ta requête sql, j'ai passé la variable 'recu' en paramètre nommé, sinon aucun intérêt d'utiliser les requêtes préparées (cf tuto PDO).
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
10 sept. 2014 à 13:24
je suis decu de ne pas voir une option SQL limit offset
https://sql.sh/cours/limit
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
10 sept. 2014 à 14:05
Pour la pagination ?
Tu n'as pas bien regardé ;)
$req = $req." limit $start,$per_page "; 
0
jdk55 Messages postés 21 Date d'inscription vendredi 27 juin 2014 Statut Membre Dernière intervention 9 octobre 2022
10 sept. 2014 à 14:23
merci pitet. cest l'utilisation de des variables de session dans la requete qui me manquait. ca ma bcp aidé.merci
0