Pagination. $_GET['lapage'] ne récupère rien
Résolu/Fermé
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
-
3 févr. 2020 à 10:31
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 4 févr. 2020 à 15:58
Exileur Messages postés 1475 Date d'inscription mercredi 31 août 2011 Statut Membre Dernière intervention 16 décembre 2022 - 4 févr. 2020 à 15:58
A voir également:
- Pagination. $_GET['lapage'] ne récupère rien
- Pagination powerpoint - Guide
- Sommaire avec pagination - Guide
- Sophie a renversé de l’eau sur son ordinateur portable. l’ordinateur ne fonctionne plus. quels fichiers est-elle certaine de pouvoir récupérer ? - Forum PC portable
- Pagination excel plusieurs feuilles ✓ - Forum Excel
- Double pagination word ✓ - Forum Word
5 réponses
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
3 févr. 2020 à 10:41
3 févr. 2020 à 10:41
Hello,
"ORDER BY nom, prenom LIMIT , 15"
Il semblerait que la variable $premiereEntree soit vide, null ou false ce qui te génére une requéte mal-formée.
Elles sont ou les classes ? QQ
A plus dans l'bus
"ORDER BY nom, prenom LIMIT , 15"
Il semblerait que la variable $premiereEntree soit vide, null ou false ce qui te génére une requéte mal-formée.
Elles sont ou les classes ? QQ
A plus dans l'bus
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
3 févr. 2020 à 10:52
3 févr. 2020 à 10:52
C'est bien là mon problème !! Si je renseigne manuellement $lapage et $premiereEntree, la requête fonctionne.
Je ne comprends pas pourquoi $_GET['lapage'] ne récupère pas le numéro de la page sélectionnée
Je ne comprends pas pourquoi $_GET['lapage'] ne récupère pas le numéro de la page sélectionnée
$lapage = 3; $premiereEntree = ($lapage - 1) * $membresParPage; echo "numéro de page = $lapage , premiere entrée = $premiereEntree";
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
3 févr. 2020 à 11:13
3 févr. 2020 à 11:13
Bon, déja.
Tu démarres pas les sessions PHP, tes variables SESSIONS seront toujours vide -> https://www.php.net/manual/fr/function.session-start.php
Ensuite, : -> $lapage = !empty($_GET['lapage']) ? $_GET['lapage'] : "1";
$premiereEntree = '';
Premiere entrée est un chiffre on est d'accord ?
Alors
Bref, voila ce qui nous interesses :
Si pas de page, ça fonctionne ( donc le else est ok, et le probléme dans le if )
Donc SI $_GET['lapage'] (donc tu arrives sur la page avec une url comme http://monsite.com/mapage.php?lapage=1 et le bloc
pageActuelle = 1;
Nous y voila. pageActuelle est elle bien setté ?
Vaut elle plus que nombre de page ?
Que vaut echo "numéro de page = $lapage , premiere entrée = $premiereEntree"; ??
Et je termine par la concaténation qui n'est pas faite comme elle devrait :
Tu démarres pas les sessions PHP, tes variables SESSIONS seront toujours vide -> https://www.php.net/manual/fr/function.session-start.php
Ensuite, : -> $lapage = !empty($_GET['lapage']) ? $_GET['lapage'] : "1";
$premiereEntree = '';
Premiere entrée est un chiffre on est d'accord ?
Alors
$lapage = !empty($_GET['lapage']) ? $_GET['lapage'] : 1;ou au pire
$premiereEntree = 0;
$premiereEntree = NULL;
Bref, voila ce qui nous interesses :
Si pas de page, ça fonctionne ( donc le else est ok, et le probléme dans le if )
if (isset($_GET['lapage'])) {
$pageActuelle = intval($_GET['lapage']);
if ($pageActuelle > $nombreDePages) {
$pageActuelle = $nombreDePages;
}
}
else {
$pageActuelle = 1; // la page actuelle est la n°1
}
Donc SI $_GET['lapage'] (donc tu arrives sur la page avec une url comme http://monsite.com/mapage.php?lapage=1 et le bloc
echo '<a href= "index.php?page=comodmember&lapage = '.$i.'">'.' '.$i.'</a>';est fonctionnel)
pageActuelle = 1;
Nous y voila. pageActuelle est elle bien setté ?
Vaut elle plus que nombre de page ?
Que vaut echo "numéro de page = $lapage , premiere entrée = $premiereEntree"; ??
Et je termine par la concaténation qui n'est pas faite comme elle devrait :
$sql = "SELECT * FROM membres WHERE nationalite = " . $nationalite . " ORDER BY nom, prenom LIMIT " . $premiereEntree . ", " . $membresParPage;
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 3 févr. 2020 à 11:24
Modifié le 3 févr. 2020 à 11:24
Bonjour,
Quand tu génères le lien de numéro de page, tu as des espaces surnuméraires qu'il faut enlever.
Doit être
Pas d'espace dans une URL !
Xavier
Quand tu génères le lien de numéro de page, tu as des espaces surnuméraires qu'il faut enlever.
echo '<a href= "index.php?page=comodmember&lapage = '.$i.'">'.' '.$i.'</a>';
Doit être
echo '<a href="index.php?page=comodmember&lapage='.$i.'">'.' '.$i.'</a>';
Pas d'espace dans une URL !
Xavier
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
3 févr. 2020 à 11:50
3 févr. 2020 à 11:50
Bien vu
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
>
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
3 févr. 2020 à 12:03
3 févr. 2020 à 12:03
Merci, mais ça ne remplace pas la démarche de recherche du bug que tu as exposée :)
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
4 févr. 2020 à 10:45
4 févr. 2020 à 10:45
Bonjour,
1/ J'avais effectivement oublié la session
2/ Je traitais pas le cas où le clique est sur le numéro de page => donc il n'y avait pas de traitement
3/ J'ai réécris la requête de sélection
4/ J'avais bien remarqué qu'il ne fallait pas d'espace dans l'URL
maintenant tout est ok
ah non encore une chose.
la première fois que je clique sur le lien du menu qui amène à cette page aucun soucis tout est ok. Je fais diverses sélections pour tester que tout se passe normalement. MAIS si je clique de nouveau sur le lien du menu qui amène à cette page j'ai un message d'erreur :
Je remets tout le code de la page
Pourquoi ce message ? un problème de session ?
Je crois que je peux encore améliorer ce code après.
Merci d'avance
1/ J'avais effectivement oublié la session
2/ Je traitais pas le cas où le clique est sur le numéro de page => donc il n'y avait pas de traitement
3/ J'ai réécris la requête de sélection
4/ J'avais bien remarqué qu'il ne fallait pas d'espace dans l'URL
maintenant tout est ok
ah non encore une chose.
la première fois que je clique sur le lien du menu qui amène à cette page aucun soucis tout est ok. Je fais diverses sélections pour tester que tout se passe normalement. MAIS si je clique de nouveau sur le lien du menu qui amène à cette page j'ai un message d'erreur :
Erreur ! SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 15' at line 1
Je remets tout le code de la page
<?php require_once "connect.php"; $sessionChoix = !empty($_SESSION['choix']) ? $_SESSION['choix'] : NULL; //prendre la valeur de session si remplie $choix = !empty($_POST['choix']) ? $_POST['choix'] : $sessionChoix; // prendra la valeur de post si elle est remplie, sinon celle de session $_SESSION['choix'] = $choix; $lapage = !empty($_GET['lapage']) ? $_GET['lapage'] : 1; // prend la valeur de la page $_SESSION['lapage'] = $lapage; $id = !empty($_GET['id']) ? $_GET['id'] : ""; // prend l'id de la valeur cliquée sur le tableau $nom = !empty($_GET['nom']) ? $_GET['nom'] : "";; $prenom = !empty($_GET['prenom']) ? $_GET['prenom'] : ""; $TotalMembres = ''; $membresParPage = 15; $nombreDePages = ''; $premiereEntree = ''; $message = ''; $nationalite = ""; $strWhere = ""; switch($choix){ //teste quel choix est sélectionné case "A": $strWhere = "WHERE nationalite = 'Allemande'"; $nationalite = "'Allemande'"; break; case "F": $strWhere = "WHERE nationalite = 'Française'"; $nationalite = "'Française'"; break; default: $nationalite = "'Allemande' OR nationalite = 'Française'"; break; } if (isset($_POST['envoyer']) && $choix){ //teste si le bouton envoyer et le choix de la nationalité sont cliqués $sql = "SELECT COUNT(*) AS nb FROM membres " . $strWhere; //compte le nombre de personnes en fonction du choix effectué try{ $req = $cnx->query($sql); $data = $req->fetch(); $TotalMembres = $data['nb']; // récupère le nombre d'enregistrements $nombreDePages = ceil($TotalMembres/$membresParPage); // compte le nombre de pages if (isset($_GET['lapage'])) { // teste si le numéro de la page est cliqué $pageActuelle = intval($_GET['lapage']); // affecte le numéro de la page à la page actuelle if ($pageActuelle > $nombreDePages) { // teste si la page actuelle est supérieure aux nombre de pages $pageActuelle = $nombreDePages; // si oui la page actuelle est égale aux nombre de pages } } else { $pageActuelle = 1; // si le numéro de page n'est pas sélectionné,la page actuelle est la n°1 } $premiereEntree = ($pageActuelle - 1) * $membresParPage; // on calcule la première entrée à lire }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } } else if (isset($_GET['lapage'])) { // teste si la un numéro de page est sélectionné $sql = "SELECT COUNT(*) AS nb FROM membres " . $strWhere; //compte le nombre de personnes en fonction du choix effectué try{ $req = $cnx->query($sql); $data = $req->fetch(); $TotalMembres = $data['nb']; // compte le nombre d'enregistrements $nombreDePages = ceil($TotalMembres/$membresParPage); // compte le nombre de pages $pageActuelle = intval($_GET['lapage']); if ($pageActuelle > $nombreDePages) { $pageActuelle = $nombreDePages; } $premiereEntree = ($pageActuelle - 1) * $membresParPage; // on calcule la première entrée à lire }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } } ?> <link rel="stylesheet" type="text/css" href="css/style_connexion.css" /> <!---liaison avec la feuille se style ---> <div style="text-align:center;margin-left:auto;margin-right:auto;background-color:#7FDD4C;width:85%;box-shadow:0.7em 0.7em 0.7em #3A9D23;"> <p> <FORM name="research" ACTION = "index.php?page=comodmember" METHOD="POST"> <br /> <p style="text-align:left;"> <b> Sélectionner la liste des membres à afficher :</b><br /> <input type="radio" name="choix" Value="T" <?php if($_SESSION["choix"] == "T"){ echo 'checked = "checked"';} ?>style="margin-left:5em;">Tous * <span style="margin-left:2em;"><input type="radio" name="choix" Value="A" <?php if($_SESSION["choix"] == "A"){ echo 'checked = "checked"';} ?>>Allemand.e.s</span> <span style="margin-left:2em;"><input type="radio" name="choix" Value="F" <?php if($_SESSION["choix"] == "F"){ echo 'checked = "checked"';} ?>>Français.e.s</span> <span style="margin-left:2em;"><input type="submit" name="envoyer" Value="Afficher" style="cursor:pointer;"></span> <br/> <span style="font-size:0.8em;"> * Affichage par défaut</span></p> <b>Pour modifier les données d'un membre, cliquez sur son nom</b><br /> <?php if (!empty($_SESSION['choix'])){ error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //préparation de la requête et des variables $sql = "SELECT * FROM membres WHERE nationalite = ".$nationalite." ORDER BY nom, prenom LIMIT ".$premiereEntree.", $membresParPage"; try { $requete = $cnx->prepare($sql); $requete->execute(); $arr_membres = $requete->fetchAll();// on stocke le resultat de la requete dans un array } catch(Exception $e){ // en cas d'erreur dans la requete: echo " Erreur ! ".$e->getMessage(); } if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide puis on écrit la table avec son contenu //echo 'Nombre total de membres : '. $TotalMembres .'<br />'; //foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach // echo $M['prenom'] .' '. $M['nom'].'<br />'; echo 'Nombre total de membres : '. $TotalMembres .'<br />'; echo '<table border=1 style="text-align:left;width:100%;">'; echo '<tr style="text-align:center;"><td style="width:15em;">NOM</td><td style="width:8em;">PRENOM</td><td style="width:8em;">TELEPHONE</td><td style="width:20em;">ADRESSE INTERNET</td></TR>'; foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach echo '<tr>'; ?> <td><a href="index.php?page=comodmember&id=<?php echo $M['id'];?>&prenom=<?php echo $M['prenom'];?>"><?php echo $M['nom'];?></a></td> <td><?php echo $M['prenom'];?></td> <td><?php echo $M['telephone'];?></td><td><?php echo $M['mail'];?></td></tr> <?php } echo '</table>'; } } echo '</p>'; if (!empty($message)){ echo $message; echo '<br />'; } if (empty($message)){ for ($i = 1; $i <= $nombreDePages; $i++) { if ($i == $pageActuelle) { echo ' [ '.$i.' ] '; } else { echo '<a href= "index.php?page=comodmember&lapage='.$i.'">'.' '.$i.'</a>'; } } } ?> <br /> </FORM> <br /> </div> <?php if (!empty($id)){ echo '<div style="">'; echo $id .' '.$prenom ; } echo '</div>'; ?>
Pourquoi ce message ? un problème de session ?
Je crois que je peux encore améliorer ce code après.
Merci d'avance
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
>
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
4 févr. 2020 à 11:07
4 févr. 2020 à 11:07
Avec l'affichage de l'erreur, fais également echo $sql pour voir exactement à quoi ressemble la requête fautive.
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
4 févr. 2020 à 11:28
4 févr. 2020 à 11:28
OK Merci,
c'est cette requête qui ne contient pas la première limite si je clique de nouveau sur le lien du menu qui affiche cette page
donc j'ai modifié
par
et je n'ai plus de message d'erreur
Je considère ce problème résolu. Merci encore
c'est cette requête qui ne contient pas la première limite si je clique de nouveau sur le lien du menu qui affiche cette page
$sql = "SELECT * FROM membres WHERE nationalite = ".$nationalite." ORDER BY nom, prenom LIMIT ".$premiereEntree.", $membresParPage";
donc j'ai modifié
$premiereEntree = '';
par
$premiereEntree = 0;
et je n'ai plus de message d'erreur
Je considère ce problème résolu. Merci encore
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
philip51
Messages postés
49
Date d'inscription
vendredi 6 janvier 2017
Statut
Membre
Dernière intervention
25 février 2020
3 févr. 2020 à 11:52
3 févr. 2020 à 11:52
Merci
Je vais reprendre tout ça et je reviens !!
Je vais reprendre tout ça et je reviens !!