Pagination et redirection get

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pagination et redirection get

Re: Pagination et redirection get

par Saian » 14 févr. 2023, 12:00

Je comprends pas trop la complexité de la chose, ça me paraît simple. Si tu sais que tu remplies x pages et que l'insertion va demander une page de plus tu as juste à rediriger vers x + 1.
Si nombre d'éléments % (modulo) max par page === 0 => total pages = total pages + 1.
Redirection.

Re: Pagination et redirection get

par rononedex » 14 févr. 2023, 02:12

Bonsoir,

je parle d'une condition a la fin de l'insert je dois redirigé vers la bonne page
var_dump('nombre max de page ' . $PerPage,'page en cour ' . $CurrentPage, 'nombre de pages total '.$pages,'nombre de réponse obtenue ' .$Count);

public\modules\viewtopic.php:109:string 'nombre max de page 6' (length=20)

public\modules\viewtopic.php:109:string 'page en cour 1' (length=14)

public\modules\viewtopic.php:109:string 'nombre de pages total 1' (length=23)

public\modules\viewtopic.php:109:string 'nombre de réponse obtenue 6' (length=28)
sur un topic j'ai 1 page et ma pagination s'arrête a 6 réponse max par page, au moment de la réponse je passerai a la nouvelle page donc la 2 mais au moment de la réponse elle n'existe pas puisse qu'elle se créer pendant la réponse $Count passe a 7 donc seulement là j'aurais 1 page +1 donc pendant la redirection je dois redirigé ver la 2 ieme page sauf si elle n'existe pas bien sur.

Re: Pagination et redirection get

par or 1 » 09 févr. 2023, 14:18

il faut que le insert soit traité avant le select, et alors, rien de spécial à faire.

Re: Pagination et redirection get

par rononedex » 09 févr. 2023, 13:19

Bonjour,

Je ne pense pas qu'il y ai besoin de l'ajax juste une condition php qui va calculé la dernière insertion en bdd ce qu'il faut comprend c'est que je redirige en fonction de get page si j'ai une page en get, mais ce get sera supérieur a la page en court si j'ai une réponse qui incrémente mon nombre de page total a afficher et je sais pas comment calculé ça !

Voici ma pagination fonctionne avec altoRouter les global son temporaire.

Code : Tout sélectionner

<?php namespace App; class URL{ public static function getInt(string $name, ?int $default = null): ?int { global $router, $match; if(!isset($_GET[$name])) return $default; if($_GET[$name] === '0') return 0; if(!filter_var($_GET[$name], FILTER_VALIDATE_INT)) { if(isset($match['params']) && $match['params'] != null){ if(isset($match['params']['slug']) && $match['params']['slug'] != null){ header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']])); }else{ header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']])); } }else{ header('Location:' . $router->generate($match['name'])); } setFlash("Le paramètre $name dans l'url n'est pas un entier",'orange'); http_response_code(301); exit(); } return (int)$_GET[$name]; } public static function getPositiveInt(string $name, ?int $default = null): ?int { global $router,$match; $param = self::getInt($name, $default); if($param !== null && $param <= 0){ if(isset($match['params']) && $match['params'] != null){ if(isset($match['params']['slug']) && $match['params']['slug'] != null){ header('Location:' . $router->generate($match['name'], ['slug' => $match['params']['slug'], 'id' => $match['params']['id']])); }else{ header('Location:' . $router->generate($match['name'], ['id' => $match['params']['id']])); } }else{ header('Location:' . $router->generate($match['name'])); } setFlash("Le paramètre $name dans l'url n'est pas un entier positif",'orange'); http_response_code(301); exit(); } return $param; } }
page viewtopic

Code : Tout sélectionner

if(isset($_GET['page']) && $_GET['page'] === '1'){ $uri = explode('?',$_SERVER['REQUEST_URI'])[0]; $get = $_GET; unset($get['page']); $query = http_build_query($get); if(!empty($query)){ $uri = $uri . '?' . $query; } header('Location:' . $uri); http_response_code(301); exit(); } /******** * pagination *********/ use App\URL; $PerPage = (int) $GetParams->GetParam(2); $CurrentPage = URL::getPositiveInt('page', 1); $smtp = $db->prepare('SELECT COUNT(id) FROM f_topics_reponse WHERE f_topic_id = ?'); $smtp->execute([intval($params['id'])]); $Count = (int)$smtp->fetch(PDO::FETCH_NUM)[0]; $pages = ceil($Count/$PerPage); //on vérifie si la page existe bien sinon on redirige si on a pas de réponse if($CurrentPage > $pages && $CurrentPage > 1) { setflash("Ce numéro de page n'hexiste pas","orange"); header('Location:' . $router->generate($match['name'], ['id' => $params['id']])); http_response_code(301); exit(); } $offset = $PerPage * ($CurrentPage - 1); //ici ma requête select from reponse ORDER BY f_topic_rep_date ASC LIMIT $PerPage OFFSET $offset");
C'est ici que je dois prendre en compte la futur page

Code : Tout sélectionner

$db->prepare("INSERT INTO f_topics_reponse SET f_user_id = ?, f_rep_name = ?, f_topic_reponse = ?, f_topic_id = ?, f_topic_rep_date = NOW()")->execute($i); setFlash("Votre réponse a bien étais poster"); redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $pages . '#rep-' . $db->lastInsertId()]));

Re: Pagination et redirection get

par Saian » 06 févr. 2023, 13:19

Salut, comment fonctionne la redirection ? il doit bien y avoir le numéro de page dedans non ? il suffirait donc de mettre le bon numéro non ?

Re: Pagination et redirection get

par two3d » 06 févr. 2023, 11:51

donc rajouté une page qui n'existais pas avant cette réponse, je cherche a redirigé l'utilisateur vers la page en court soit vers la page nouvellement créer a l'instant de la réponse.
Si je comprends bien, pendant la lecture de l'utilisateur sur la dernière page, il se peut qu'il y ai un nouveau post ?

"je cherche a redirigé l'utilisateur vers la page en court soit vers la page nouvellement créer a l'instant de la réponse."

Tu as la solution d'afficher les nouvelles réponses en AJAX, tu peux aussi mettre un bouton "recharger la page pour vérifier les nouvelles réponses"

Re: Pagination et redirection get

par rononedex » 06 févr. 2023, 11:25

Bonjour,

Je pense pas que vous ayez bien compris surement parce que j'ai mal expliquer, je ne parle pas d'un utilisateur qui entrerais une page qui n'existe pas puisse que je le redirige toujours avec une 301 je vérifie si la page est bien un nombre positive et si c'est un int et qu'elle existe bien, je n'ai pas de problème avec ça.

Là je parle au moment de la création d'une réponse qui va incrémenté mon nombre de page total
$pages = ceil($Count/$PerPage);
donc rajouté une page qui n'existais pas avant cette réponse, je cherche a redirigé l'utilisateur vers la page en court soit vers la page nouvellement créer a l'instant de la réponse.

Si j'avais 4 page avant cette réponse forcement j'aurais 5 pages après cette réponse puisse que $perpage a atteint sa limite.

On parle d'un futur probable !

Re: Pagination et redirection get

par two3d » 04 févr. 2023, 20:31

Dans la vérification du nombre de page (lors du traitement de ta pagination en PHP) tu vérifie l'entrée utilisateur, si GET > 4 alors qu'il ya que 4 pages, tu affiche 4 , tu n'autorise pas > 4.

Normalement, si tu traite bien ta pagination en PHP, tu ne devrait pas afficher de lien vers la 5 si ta que 4 pages.
Si tu traite bien, il est quand même bien de TOUJOURS vérifier l'entrée de l'utilisateur et se préparer à plusieurs éventualités, ici la possibilité qu'un utilisateur entre manuellement une page qui va trop loin ou ya aussi la possibilité qu'une page soit indexée (page=5 ou >) sur internet qui serait plus d'actualité car le nombre d'article a diminué depuis ;)

Re: Pagination et redirection get

par or 1 » 04 févr. 2023, 13:48

pour aller à la page 4, il y a 4 dans l'url. pour aller à la page 5, il y a 5 dans l'url.

Pagination et redirection get

par rononedex » 04 févr. 2023, 13:40

Bonjour,

Je savais pas trop quel titre mettre mais en gros j'ai ma pagination qui fonctionne bien cela dit je me heurte a un soucis.

imaginons que mon Perpage atteint sa limite on va dire que je veut 4 pages, lors d'une réponse sur mes topic view j'ai déjà mes 4 page et donc la création d'une réponse va forcément créer une nouvelle page jusque ici je redirige vers la page en get que je peut facilement la récupéré, mais la page qui n'existe pas encore ici la page 5 comment puis-je la récupéré pour rediriger a la fin de ma requête ?

Merci bonne journée.