Bonsoir,

je suis entrain de faire un petit système de pagination pour des articles et je rencontre une erreur dans mon code "Undefined variable: nbPage in C:\wamp\www\portail\customer.php on line 83" alors que la variable est bien definie je ne comprends pas ce qui se passe.
je vous mets le code de la page ci dessous si quelqu'un a une idee...

<?php
include 'lib/includes.php';
$nb = '';

if(isset($_POST'search']) && $_POST'search'] != NULL){
    $search = $db->quote($_POST'search']);
        $select = $db->query("SELECT COUNT(*) as total FROM customers ORDER BY name DESC");
        $total_donnees = $select->fetch();
        $total = $total_donnees->total;
        $perPage = 5;
        $nbPage = ceil($total/$perPage);
        if(isset($_GET'page']) && $_GET'page']>0 && $_GET'page']<=$nbPage){ // Si la variable $_GET'page'] existe...
                        $currentPage = $_GET'page'];
        }else{ // Sinon
            $currentPage = 1; // La page actuelle est la n°1
        }
        $select = $db->query("SELECT * FROM customers ORDER BY name DESC LIMIT ".(($currentPage-1)*$perPage).",$perPage");
        if($select->rowCount() == 0){
            setFlash("Il n'y a pas d'enregistrements avec ce nom." , 'danger');
            header('Location:customer.php');
            die();
        }
    $results = $select;
    $nb = $select->rowCount();
                if($nb > 1){
                    $res = "résultats";
                }else{
                    $res = "résultat";
                }
}
include 'partials/header.php';
?>
<h3>Rechercher un client</h3>
<div class="row">
    <div class="col-sm-8">
        <form action="#" method="post">
            <div class="form-group">
                <label for="search">Nom du client</label>
                <?= input('search'); ?>
            </div>
            <button type="submit" class="btn btn-primary">Rechercher</button>
        </form>
        <?php if($nb > 0): ?>
            <h3>Résultat de votre recherche.</h3>
            <p>Nous avons trouvé <?= $nb; ?> <?= $res; ?>.</p>
                        <table class="table table-striped">
                            <thead>
                                <tr>
                                    <th>Nom</th>
                                    <th>Actions</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach($results as $result): ?>
                                    <tr>
                                        <td><?= $result->name; ?></td>
                                        <td>
                                            <a href="<?= WEBROOT; ?>client/<?= $result->id; ?>" class="btn btn-success btn-sm" target="_blank">Afficher</a>
                                        </td>
                                    </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
        <?php endif ?>
        <!--
        / Pagination
        -->
        <?php
        for($i=1; $i<=$nbPage; $i++){
            if($i==$currentPage){
                echo ' '.$i.'] ';
                }else{
                    echo ' <a href="customer.php?page='.$i.'">'.$i.'</a>';
                }
            }
        ?>
    </div>
        <?php include 'element/sidebar.php'; ?>
</div>
<!--<?php include 'lib/debug.php'; ?>-->
<?php include 'partials/footer.php'; ?>

merci d'avance

Gilles

4 réponses


Bonjour,

En général, quand php te dit qu'une variable n'est pas défini, c'est que la variable ne l'est pas.

Tu as oublié que ta variable est définie que si la variable $_POST'search'] est defini ou different de null.

Donc ta variable $nbPage n'est pas definie.

Cordialement

gilles40
Auteur

Bonsoir bahamut,

merci pour ta réponse, mais comment puis je faire pour que ma variable reste définie sur les pages suivante? ma problématique est que je doit chercher des clients avec certain critères et ensuite je dois paginer tout cela pour que ce soit plus lisible facilement.
vers quelles solutions je peux me diriger?

merci

Gilles

Tu peu utiliser les sessions ($_SESSION) pour stocker des variables sur plusieurs pages

gilles40
Auteur

Bonjour à tous,

comme le dit Benjamin j'ai essayer d'utiliser $_SESSION pour stocker la variable que je cherche, mais apres je suis un peu perdu pour la passer aux pages suivantes... que doit je faire?
merci d'avance pour votre aide.

Gilles

<?php
include 'lib/includes.php';
$nb = '';
$perPage = 10;
$search = isset($_POST'search']) ? $_POST'search']:'';
$select = $db->query("SELECT COUNT(*) AS nbrecords FROM customers WHERE name LIKE '%$search%'");
$rows= $select->fetch();
$total=$rows->nbrecords;
$nbrePage = ceil($total/$perPage);
$_SESSION'search'] = ($_POST'search']);
if(isset($_GET'page'])){
    $currentPage = intval($_GET'page']);
    if($currentPage > $nbrePage){
        $currentPage = $nbrePage;
    }
}else{
    $currentPage = 1;
}
$firstPage = ($currentPage-1)*$perPage;

//if(isset($_POST'search']) && $_POST'search'] != NULL){
    $search = isset($_POST'search']) ? $_POST'search']:'';
    //$search = $db->quote($_POST'search']);
    $select = $db->query("SELECT * FROM customers WHERE name LIKE '%$search%' ORDER BY name DESC LIMIT $firstPage, $perPage");
       if($select->rowCount() == 0){
            setFlash("Il n'y a pas d'enregistrements avec ce nom." , 'danger');
            header('Location:customer2.php');
            die();
        }
    $results = $select;
    $nb = $select->rowCount();
    if($nb > 1){
        $res = "résultats";
    }else{
        $res = "résultat";
    }
//}
include 'partials/header.php';
?>
<h3>Rechercher un client</h3>
<div class="row">
    <div class="col-sm-8">
        <form action="#" method="post">
            <div class="form-group">
                <label for="search">Nom du client</label>
                <?= input('search'); ?>
            </div>
            <button type="submit" class="btn btn-primary">Rechercher</button>
        </form>
        <?php if($nb > 0): ?>
            <h3>Résultat de votre recherche.</h3>
            <p>Nous avons trouvé <?= $nb; ?> <?= $res; ?>.</p>
                        <table class="table table-striped">
                            <thead>
                                <tr>
                                    <th>Nom</th>
                                    <th>Actions</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach($results as $result): ?>
                                    <tr>
                                        <td><?= $result->name; ?></td>
                                        <td>
                                            <a href="<?= WEBROOT; ?>client/<?= $result->id; ?>" class="btn btn-success btn-sm" target="_blank">Afficher</a>
                                        </td>
                                    </tr>
                                <?php endforeach; ?>
                            </tbody>
                        </table>

        <?php endif ?>
        <?= paginate('customer2.php', $nbrePage, $currentPage); ?>
    </div>
        <?php include 'element/sidebar.php'; ?>
</div>
<?php include 'partials/footer.php'; ?>