2 votes

Pagination - Comment ne pas permettre à l'utilisateur d'aller plus loin dans les pages existantes ?

Désolé si le titre de la question est trop mauvais, je suis nouveau sur php et je ne sais pas s'il y a un nom spécifique pour cela.

J'ai seulement 2 enregistrements et j'ai limité la pagination pour montrer seulement 1 enregistrement par page, alors j'aurai 2 pages, et je peux accéder à ces pages avec &tab=1 et &tab=2 sur mon code actuel si j'écris sur l'URL : &tab=-2 , &tab=-1 , &tab=0 , &tab=3 , &tab=4 , &tab=5 Je peux aller sur cette page, et sur cette page je ne verrai aucun enregistrement car comme je l'ai dit je n'ai que 2 pages.

Mes questions :

1. Il y a des problèmes de sécurité ?

2. Comment ne pas permettre à l'utilisateur d'aller plus loin dans les pages existantes ?

Voici mon code de pagination :

<?php
  if(empty($_GET['tab'])){}else{$page = $_GET['tab'];}
  if(isset($page)){$page = $_GET['tab'];}else{$page = 1;}
  $maximoVEP = 1;
  $startVEP = (($maximoVEP * $page) - $maximoVEP);
  $title     = 'Asic';

  $stmtVEP   = $db->prepare("SELECT count(*) FROM table WHERE data = 'vm' AND title = :title");
  $stmtVEP->bindValue(':title', $title, PDO::PARAM_STR);    
  $stmtVEP->execute();
  $total = $stmtVEP->fetchColumn();
  $total_pages = ceil($total/$maximoVEP);

  echo '<nav aria-label="Page navigation example">';
  echo '<ul class="pagination paginationEp ml-1 mr-1">';
  if ($page >= 2){

    echo '<li class="page-item">';
    echo '<a class="page-link" href="?p=';
    echo htmlentities($slug, \ENT_QUOTES, "UTF-8", false);
    echo '&tab='.($page-1).'"><i class="fas fa-angle-left"></i> ANTERIOR</a>';
    echo '</li>';
  }

  echo '<li class="page-item">';
  echo '<a class="page-link" href="';
  echo htmlentities($slug, \ENT_QUOTES, "UTF-8", false);
  echo '"><i class="fas fa-list-ul"></i></i></a>';
  echo '</li>';

  if ($page < $total_pages){

  echo '<li class="page-item">';
  echo '<a  class="page-link" href="?p=';
  echo htmlentities($slug, \ENT_QUOTES, "UTF-8", false);
  echo '&tab='.($page+1).'">PRÓXIMO <i class="fas fa-angle-right"></i></a>';
  echo '</li>'; 

  }
  echo '</nav>';

  $conn = null;             
?>

Et la requête :

$stmtUTP = $db->prepare("SELECT `id`, `title` FROM table WHERE data = 'vm' ORDER BY id DESC LIMIT :start, :max");
$stmtUTP->bindValue(':start', $startVEP, PDO::PARAM_INT); 
$stmtUTP->bindValue(':max', $maximoVEP, PDO::PARAM_INT);   
$stmtUTP->execute();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X