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

PHP & Base de données Discussion :

Pagination et redirection get


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué Avatar de SkaalZealot
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut Pagination et redirection get
    Bonjour,

    je suis sur la fin de création de mon forum et je plante en terme de logique, voici mon vardump je ne sais pas comment récupérer cette valeurs inconnue.

    Sur un topic, j'ai 1 page et ma pagination s'arrête a 6 réponses max par page
    Au moment de la réponse je passerai donc à la nouvelle page donc la 2, mais au moment de la réponse elle n'existe pas puisse qu'elle se crée pendant la réponse $Count passe à 7 donc seulement là j'aurais la page 2, pendant la redirection je veut capter ce changement et rediriger vers la 2e page sauf si elle n'existe pas bien sûr, et je dois aussi prendre en compte le cas où il n'y a page de get page.

    comme un lastinsertid, mais avec la page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var_dump('nombre max de page ' . $PerPage,'page en cour ' . $CurrentPage, 'nombre de pages total '.$pages,'nombre de réponses obtenues ' .$Count);
     
    public\modules\viewtopic.php:109:string 'nombre max de page 6' (length=20)
     
    public\modules\viewtopic.php:109:string 'page en cours 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éponses obtenues 6' (length=28)
    les redirections devraient ressembler à ça après l'insert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //si j'ai une nouvelle réponse et que le compteur perpage est atteint
    setFlash("Votre réponse a bien été postée redirection vers page $lastinsertpages");
    redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $lastinsertpage . '#rep-' . $lastinsertid]));
     
    //si j'ai un get, mais que le compteur reste au nombre voulu de réponses par page
    setFlash("Votre réponse a bien été postée");
    redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $_GET['page'] . '#rep-' . $lastinsertid]));
     
    //si j'ai pas de get page
    setFlash("Votre réponse a bien été postée");
    redirect($router->generate('viewtopic',['id' => $params['id'] .'#rep-' . $lastinsertid]));
    Cette condition me prend tous mes neurones.

    En vous remerciant pour les pistes que vous m'apporterez.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    comment calculez vous actuellement le nombre de pages quand vous affichez les informations d'une discussion ?

  3. #3
    Membre habitué Avatar de SkaalZealot
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Bonjour,

    Voici ou je me suis arrêté, je n'ai pas mis toute la req elle est énorme .

    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
     
    use App\URL;
    /********
    *  pagination
    *********/
    $PerPage = (int) $GetParams->GetParam(2);//paramètre géré par l'administration on va dire que c'est 10  
     
    $CurrentPage = URL::getPositiveInt('page', 1); //vérifie si la page est un entier négative ou si le get est différent d'un (int)
     
    $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);
     
    if($CurrentPage > $pages && $CurrentPage > 1) {
        setflash("Ce numéro de page n’existe pas","orange");
        header('Location:' . $router->generate($match['name'], ['id' => $params['id']]));
        http_response_code(301);
        exit();
    }
     
    $offset = $PerPage * ($CurrentPage - 1);
     
    if(isset($_SESSION['auth']->id)){ //si connecter
     
        ORDER BY sticky DESC, Lastdate DESC LIMIT $PerPage OFFSET $offset
        ");
     
        $render->execute([$userid,$get]);
     
    }else{ // si non connecter
     
      $render = $db->prepare("SELECT
     
            ORDER BY sticky DESC, Lastdate DESC LIMIT $PerPage OFFSET $offset
      "); 
     
      $render->execute([$get]);
     
    }

    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
     
    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;
        }
     
    }

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    avec le calcul $pages = ceil($Count/$PerPage); vous avez tout ce dont vous avez besoin.
    quand vous ajoutez le 6e message de la discussion, vous calculez "ceil(6/6)" et donc ça se trouve sur la 1re page. et quand vous ajoutez le 7e message, "ceil(7/6)" donne 2 donc c'est la 2e page.

  5. #5
    Membre habitué Avatar de SkaalZealot
    Homme Profil pro
    autre
    Inscrit en
    Octobre 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2017
    Messages : 11
    Par défaut
    Bonjour,

    donc si j'ai bien compris

    je devrais faire ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(isset($_GET['page'])){
     
         setFlash("Votre réponse a bien étais poster redirection vers pages $pages");
         redirect($router->generate('viewtopic',['id' => $params['id'] . '?page=' . $_GET[$pages] . '#rep-' . $lastid]));
     
    }
    //je dois faire cette vérification car un topic n'a pas forcément de réponses ni de page
    setFlash('Votre réponse a bien étais poster');
    redirect($router->generate('viewtopic',['id' => $params['id'] .'#rep-' . $lastid]));

Discussions similaires

  1. POST/REDIRECT/GET avec STRUTS
    Par raz2008 dans le forum Struts 1
    Réponses: 1
    Dernier message: 10/09/2010, 15h38
  2. pagination avec la méthode GET
    Par berti dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2008, 11h11
  3. Insérer une valeur GET dans la redirection
    Par rduvrac dans le forum Langage
    Réponses: 2
    Dernier message: 27/02/2008, 17h51
  4. Redirection avec paramètre (GET)
    Par gufra dans le forum JSF
    Réponses: 4
    Dernier message: 06/11/2007, 15h10
  5. [ASP.NET] get et redirect
    Par otb82 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/12/2006, 07h53

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