Une erreur sur ma pagination

a marqué ce sujet comme résolu.
Auteur du sujet

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");
?>

Édité par Taurre

+0 -0

Salut,

J’ai remarqué que tu as donné deux variables avec des noms très proches : $repProducts (ligne 23, 2e code) et $reqProducts (ligne 30, premier code).

Je pense que cela peut t’aider à corriger ta première erreur.

Au passage, tu peux écrire tes include comme ceci :

include 'basedonne.php';

+2 -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é.

Édité par Ymox

Evitez qu’on vous dise de les lire : FAQ PHP et SymfonyTutoriel WAMP • Cliquez 👍 pour dire merci • Marquez vos sujets résolus

+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.

+2 -0

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…

+0 -1

@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.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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