Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problême Pagination Panier

erreur affichage nombre produit par page

Sujet résolu
    21 septembre 2021 à 2:35:10

    Bonsoir,

    j'essaye de créer un panier en php et j'ai un problême concernant la pagination de  mes produits.

    j'aimerai en affichait 2 par pages or les 4 produits s'affichent ...

    voici le code

    <?php
    
    
    // On détermine sur quelle page on se trouve
    if(isset($_GET['page']) && !empty($_GET['page'])){
        $currentPage = (int) strip_tags($_GET['page']);
    }else{
        $currentPage = 1;
    }
    // On se connecte à là base de données
    require_once('connect.php');
    
    // On détermine le nombre total d'articles
    $sql = 'SELECT COUNT(*) AS id FROM `products`;';
    
    // On prépare la requête
    $query = $db->prepare($sql);
    
    // On exécute
    $query->execute();
    
    // On récupère le nombre d'articles
    $result = $query->fetch();
    
    $product = (int) $result['id'];
    
    // On détermine le nombre d'articles par page
    $parPage = 1;
    
    // On calcule le nombre de pages total
    $pages = ceil($product / $parPage);
    
    // Calcul du 1er article de la page
    $premier = ($currentPage * $parPage) - $parPage;
    
    $sql = 'SELECT * FROM `products` ORDER BY `id` DESC LIMIT :premier, :parpage;';
    
    // On prépare la requête
    $query = $db->prepare($sql);
    
    $query->bindValue(':premier', $premier, PDO::PARAM_INT);
    $query->bindValue(':parpage', $parPage, PDO::PARAM_INT);
    
    // On exécute
    $query->execute();
    
    // On récupère les valeurs dans un tableau associatif
    $articles = $query->fetchAll(PDO::FETCH_ASSOC);
    
    
    
    require 'db.class.php';
    require 'panier.class.php';
    $DB = new DB();
    $panier = new panier($DB);
    
    require_once('close.php');
    ?>
    <?php require 'header.php'; ?>
    
    
    <div class="home">
    	<div class="row">
    		<div class="wrap">
    			<?php $products = $DB->query('SELECT * FROM products'); ?>
    			<?php foreach ( $products as $product ): ?>
    				<div class="box">
    					<div class="product full">
    						<a href="#">
    							<img src="img/<?= $product->id; ?>.jpg">
    						</a>
    						<div class="description">
    							<?= $product->name; ?>
    							<a href="#" class="price"><?= number_format($product->price,2,',',' '); ?> €</a>
    						</div>
    						
    						
    						<a class="add addPanier" href="addpanier.php?id=<?= $product->id; ?>">
    							add
    						</a>
    					</div>
    				</div>
    			<?php endforeach ?>
    		</div>
    	</div>
    </div>
    <div id="pagination">
    	<ul class="wrap">
    		<li class="page-item <?= ($currentPage == 1) ? "disabled" : "" ?>">
                                <a href="./?page=<?= $currentPage - 1 ?>" class="page-link">Précédente</a>
                            </li>
                            <?php for($page = 1; $page <= $pages; $page++): ?>
                                <li class="page-item <?= ($currentPage == $page) ? "active" : "" ?>">
                                    <a href="./?page=<?= $page ?>" class="page-link"><?= $page ?></a>
                                </li>
                            <?php endfor ?>
                            <li class="page-item <?= ($currentPage == $pages) ? "disabled" : "" ?>">
                                <a href="./?page=<?= $currentPage + 1 ?>" class="page-link">Suivante</a>
                            </li>
    	</ul>
    </div>
    
    
    <?php require 'footer.php'; ?>


    • Partager sur Facebook
    • Partager sur Twitter
      21 septembre 2021 à 10:19:49

      Salut

      Tu utilises encore une autre requête ligne 7 du second code, et cette requête n'a pas les paramètres de pagination. En l'état, ton fetchAll() ligne 48 n'est pas vraiment utile.

      -
      Edité par Ymox 21 septembre 2021 à 10:21:06

      • Partager sur Facebook
      • Partager sur Twitter
        21 septembre 2021 à 22:18:49

        Salut,

        du coup je doit lier plusieurs paramètre a ma requête mysql ?

        je comprend pas trop je suis débutant en php , j'ai juste suivie le cours  sur openclassroom ...

        -
        Edité par FélixLefebure 21 septembre 2021 à 23:01:13

        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2021 à 0:22:49

          Non, tu dois utiliser le résultat de la requête du premier code dans le second, sinon c'est le résultat de la requête du second code qui sera utilisé, et cette autre requête n'a absolument rien qui permet de gérer la pagination, vu que c'est fait ailleurs.

          • Partager sur Facebook
          • Partager sur Twitter
            22 septembre 2021 à 3:58:50

            comme ceci :

            <?php require 'includes/menu.php'; ?>
            
            <div class="home">
            	<div class="row">
            		<div class="wrap">
            			<?php $products = $DB->query('SELECT * FROM `products` ORDER BY `id` DESC LIMIT :premier, :parpage;'); ?>
            			<?php foreach ( $products as $product ): ?>
            				<div class="box">
            					<div class="product full">
            						<a href="#">
            							<img src="img/<?= $product->id; ?>.jpg">
            						</a>
            						<div class="description">
            							<?= $product->name; ?>
            							<a href="#" class="price"><?= number_format($product->price,2,',',' '); ?> €</a>
            						</div>
            						<a href="addpanier.php?id=<?= $product->id; ?>" class="gift addPanier">
            							Gift
            						</a>



            • Partager sur Facebook
            • Partager sur Twitter
              22 septembre 2021 à 10:49:49

              Il n'y a normalement pas besoin de refaire la requête, tu dois avoir les résultats de la première à disposition dans le second code. Est-ce que celui-ci est bien close.php ?

              • Partager sur Facebook
              • Partager sur Twitter

              Problême Pagination Panier

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown