Une erreur sur ma pagination

a marqué ce sujet comme résolu.

bonjour,

j’ai rencontre un problème d’erreur en créons ma pagination

 ! ) Notice: Undefined variable: reqProducts in C:\wamp64\www\boutique\article1.php on line 28

Fatal error: Uncaught Error: Call to a member function fetch() on null in C:\wamp64\www\boutique\article1.php on line 28

( ! ) Error: Call to a member function fetch() on null in C:\wamp64\www\boutique\article1.php on line 28

page1 nom= article1.php

<?php
    session_start();
    include('basedonne.php');
    include('pagination.php');
?>
<!DOCTYPE HTML>
<html>
    <head>
        <title>IMPACT BOUTIQUE</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" >
        <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap-responsive.min.css" >
        <link rel="stylesheet" type="text/css" href="style.css">
        <link rel="stylesheet" type="text/css" href="corps.css">
    </head> 
    <body class="body">
        <?php
            include 'menu.php';
        ?>
        <?php
            include 'section.php';
        ?>
        <section class="fakeimg">
            <div class="content">
                <div class="topcontent">
                    <div id="products_box">
                    <?php
                        while($products = $reqProducts->fetch()){
                            ?>
                                <div id='single_product'>
                                    <h6 class="post-info"><?php echo($resultat['DESIGNATION']) ?></h6>
                                    <img src="<?php echo($resultat['PHOTO']) ?>" width="170" height="170"><br>
                                    <p class="post_info"><b><?php echo($resultat['PRIX']) ?> FCFA</b></p>
                                    <a href="detail.php?IDPRODUIT=$IDPRODUIT" style="float: left">Details</a>
                                    <a href="index.php?add_cart=$IDPRODUIT"><button style="float: right">Add to cart</button></a>
                                </div>
                            <?php
                        }
                      ?>
                    </div>
                </div>
            </div>
            <ul class="pagination">
                <li class="<?php if($current == '1'){ echo "disabled"; } ?>"><a href="?p=<?php if($current != '1'){ echo $current-1; }else{ echo $current; } ?>">&laquo;</a></li>
                <?php
                    for($i=1; $i<=$nbPage; $i++){
                        if($i == $current){
                            ?>
                                <li class="active"><a href="?p=<?php echo $i ?>"><?php echo $i ?></a></li>
                            <?php
                        }else{
                            ?>
                            <li><a href="?p=<?php echo $i ?>"><?php echo $i ?></a></li>
                            <?php
                        }
                    }
                ?>
                <li class="<?php if($current == $nbPage){ echo "disabled"; } ?>"><a href="?p=<?php if($current != $nbPage){echo $current+1;}else{ echo $current;} ?>">&raquo;</a></li>
            </ul>
        </section>
        <?php
            include_once 'footer.php';
        ?>
    </body>
</html>

page2 mon pagination.php

<?php
    include('basedonne.php');
    
    $perPage = 5;
    
    $req = $bdd->query('SELECT COUNT(*) AS total FROM produits');
    $result = $req->fetch();
    $total = $result['total'];

    $nbPage = ceil($total/$perPage);
    
    if(isset($_GET['p']) && !empty($_GET['p']) && ctype_digit($_GET['p']==1)){
        
        if($_GET['p'] > $nbPage){
            $current = $nbPage; 
        }else{
            $current = $_GET['p'];
        }
    }else{
        $current = 1;
    }
    $firstOfPage = ($current-1)*$perPage;
    $repProducts = $bdd->query("SELECT * FROM produits ORDER BY IDPRODUIT ASC LIMIT $firstOfPage,$perPage");
?>
+0 -0

Salut !

En plus du point relevé par @LysPrintemps, j’aimerais relever quelques détails qui ne changeront rien au fonctionnement de ton code, sinon enlever une redondance et mettre en place une bonne pratique.

  • Ligne 12 de pagination.php, il n’y a pas besoin de tester avec isset() et !empty(), ce dernier fait aussi ce que fait isset(). !empty() seul est suffisant ;
  • Même si tu vérifies (bel et bien cf. la remarque ci-dessous) que le numéro de page soit un entier, je trouve dommage que tu concatènes les valeurs directement dans la requête plutôt que d’utiliser une requête préparée et bindValue().

Aussi, petit point qui n’a rien à voir avec le code : un titre en majuscules est à éviter. Sur internet, les majuscules équivalent à quelque chose de crié.

+1 -0

Je rajoute encore un petit point qui vient d’attirer mon attention :

La ligne 12 de ton deuxième code contient :

ctype_digit($_GET['p']==1)

Le souci avec cette écriture, c’est que tu donnes comme paramètre à la fonction ctype_digit() un booléen (true ou false), alors que la fonction s’attend plutôt à recevoir une chaîne de caractère.

peux tu remplacer de 29 à 41 par

<?php $produit_par_page = $reqProducts->fetch(); var_dump($produit_par_page); foreach($produit_par_page as $product){ echo $product['id'].'<br>'; } ?>

dans ton code, il y a des référence vers result alors que result n’est pas mentionné, il y a des idproduit sans echo, … la forme de ton while me gène personnellement, mais je suis un peu vieux jeu…

@Leeroy Jenkins ta solution ne marchera pas. il serait préférable de faire ainsi :

<?php 
$produit_par_page = $reqProducts;
var_dump($produit_par_page); // affichera "bool(false)" seuleument si la requête a échoué

foreach($produit_par_page as $product){
   echo $product['id'].'<br>'; 
}

en gros le fetch est en trop.

@Grand_ick ton principal problème est que tu utilises souvent des variables qui ne sont définies nulle part.

pour parcourir les résultats de la bdd utilise une boucle foreach ça a plus de sens.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte