Bonjours, alors voilà: N'étant pas un pro de PHP, j'aimerais savoir d'où viens mon problème.

Quand je veux diviser le nombre total d'id par le nombre de page, ça affiche rien.
Alors que si en revanche je remplace $nbParfH par un nombre, ça marche très bien

 $nbPage = ceil($nbParfH/$ParfparPage); // Ligne originale de mon code

 $nbPage = ceil(67/$ParfparPage); // Ligne modifié de mon code

Voilà le code entier:

<?php 
    $count = ($DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\''));
    $nbParfH = var_dump($count)['nbParfH'];
    $ParfparPage = 5;
    $cPage = 1;
    $nbPage = ceil($nbParfH/$ParfparPage); // C'est cette ligne qui est concernée

    $produits = ($DB->query('SELECT * FROM produits  WHERE pour_qui = \'pourhomme\' ORDER BY id DESC LIMIT '.(($cPage-1)*$ParfparPage).','.$ParfparPage.'')); 

    for($i=1;$i<=$nbPage;$i++){
        echo "$i /";
    }

?>

Merci de m'éclairer!!

17 réponses


Inspirat
Réponse acceptée

Le problème est résolu entre temps (j'ai fini de régler le problème sur skype), il n'a simplement pas encore mis comme résolu, je vais lui dire de le faire ;)

Salut Justela,

ça donne quoi avec ça à la ligne 3:

<?php
    $nbParfH = $count['nbParfH'];
?>

Merci pour ta réponse, maintenant ça m'affiche une erreur:

Notice: Undefined index: nbParfH in C:\xampp\htdocs\boutique\pourhomme.php on line 79

var_dump($count)['nbParfH'];
nbParfH n'est pas définit simplement.

Quand je fais un var_dump, tout marche.. ça me retourne:

array(1) { [0]=> object(stdClass)#5 (1) { ["nbParfH"]=> string(1) "8" } }

Et ensuite, quand je fais:

$nbPage = ceil($nbParfH/$ParfparPage);

et là aucuns numéros de pages est retournés

Sais-tu que $***["nbParfH"] != $nbParfH
Peut-être que $nbParfH retourne une valeur null ? Car sa requête pour récuperer le nbParfH est érronée?
Je propose je ne connais pas vraiment la réponse à ta question.

Ayant fait un système de pagination sur un site en projet, je veux bien te sortir le code brut utilisé dans le système... N'oublie pas de remplacer par les valeurs correctes. Je tiens à te préciser que je fait le système de boutons "précédent" / "suivant" sans les nombres

$page = (!empty($_GET['page'])) ? (((int) $_GET > 0) ? (int) $_GET['page'] : 1) : 1;
        $real_page = $page - 1;
        $skip = $real_page * PAGINATION_PER_PAGE;

        $set = Database::query('SELECT u.username, p.* FROM posts AS p JOIN users AS u ON p.users_id = u.id ORDER BY p.created_at DESC LIMIT '. $skip .',' . PAGINATION_PER_PAGE, [PAGINATION_PER_PAGE]);

        if(empty($set) && $page > 1){
            Request::error(404);
            return;
        }

        $posts_count = Database::count('posts');

        $page_quantity = ceil($posts_count / PAGINATION_PER_PAGE);

        $has_next = ($page < $page_quantity) ? true : false;
        $has_previous = ($page > $page_quantity) ? true : false;

Merci à vous deux pour vos réponses.

@asto63 t'as juste. J'ai fais un var_dump($nbParfH); et ça me retourne NULL.

Pourtant var_dump($count)['nbParfH']; ne me retourne aucune erreur, et m'affiche le résultat sous forme de array.
Peut être c'est pour ça qu'ensuite ça bloque?
Il faudrait convertir

array(1) { [0]=> object(stdClass)#5 (1) { ["nbParfH"]=> string(1) "8" } }

en nombre ou chiffre entier? Mais comment faire?

@lapin-math merci pour ton code, mais je dois en priorité mettre le nombre de page, car il risque d'en avoir beaucoup.

Bonsoir, ton erreur est de mal utiliser la donnée retourné suite à ta requête, voici un exemple:

<?php 
    $req = $DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\'');
    $req = $req->fetch();
    $nbParfH =$req->nbParfH;
?>

Merci Inspirat pour ta réponse.

Mais la fonction query le fais déjà non?

public function query($sql, $data = array()){
        $req =$this->db->prepare($sql);
        $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);
    }

L'utilisation de la fonction query est celle de PDO, qui de base retourne simplement la la requête elle même

Daccord. Et donc je dois faire ça?

$count = ($DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\''));
$count = $count->fetch();
$nbParfH = $count->nbParfH;

Si oui y'a un petit soucis, ça ne m'affiche plus rien.

Enlève moi ces parenthèses, pourquoi tu met des parenthèses ? Le bout de code tel que je t'ai donné est celui qu'il te faut ;)

Les parenthèses j'ai appris comme ça x).

Voilà le début du code:

    $count = $DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\'');
    $count = $count->fetch();
    $nbParfH = $count->nbParfH;

et comme je t'ai dis, ça met tout le reste de la page blanche.

J'ai donc ajouter ligne par ligne, et c'est cette ligne qui cause le problème de la page blanche:

$count = $count->fetch();

Merci en tout cas pour tes réponses, as-tu un moyen de contact plus rapide?

Hum... Il faut voir quelle configuration tu utilise lorsque tu définie l'objet PDO, pour ma part ça donne ça avec le test que j'ai fais:

// On suppose que $config correspond aux identifiants
$DB = new PDO($config, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$DB->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);

// Histoire d'afficher tout type d'erreur pour facilité le debug
error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT);

// Et viens la requête
$req = $DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\'');
$req = $req->fetch();
$nbParfH = $req->nbParfH;

Et oui pour me contacter plus rapidement, tu peux m'ajouter sur skype: InspiratNetwork

Sans vouloir faire de pub, voici un tutoriel pour faire un système de pagination en PHP...
J'espère qu'il pourra t'aider ;)
http://youtu.be/dH4xHMFfS6c

Si je comprend bien tu a ta propre fonction/méthode pour récupérer les données (query)
Le problème ne viens pas de la.
avec ce code :

$count = ($DB->query('SELECT COUNT(id) as nbParfH FROM produits WHERE pour_qui = \'pourhomme\''));
$nbParfH = var_dump($count)['nbParfH'];
// ...
$nbPage = ceil($nbParfH/$ParfparPage); // C'est cette ligne qui est concernée

tu récupère un tableau contenant des un à plusieurs objets et non des tableaux comme le montre ton dump array(1) { [0]=> object(stdClass)#5 (1) { ["nbParfH"]=> string(1) "8" } }

essai ceci pour remplire $nbParfH :

$nbParfH = isset($count[0]->nbParfH) ? $count->nbParfH : 0;