Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pagination et filtrage

garder le filtrage sur les pages de pagination

Sujet résolu
    3 décembre 2024 à 18:28:43

    merci pou

    r votre patiente, c'étais plustôt simple finalement

    $productTotal = count($totalProduct);


    et pour UTF8

    j'ai corriger ainsi

    private $DB_ENCODING = 'utf8';
    
    
    
    try{
    			$this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database.';charset=.'$DB_Encoding, $this->username, $this->password, array(
    					PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
    				));
    		}catch(PDOException $e){
    			die('<h1>Impossible de se connecter a la base de donnee</h1>');
    		}



    -
    Edité par lutinjoyeux 3 décembre 2024 à 19:06:34

    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2024 à 22:14:08

      mouef, ça "fonctionne" mais la démarche est encore moins optimale qu'avant, tu utilises ta surcouche de PDO dont la méthode query retourne le résultat d'un fetchAll dedans : du coup tu ne peux pas faire un SELECT COUNT(*) puis fetchColumn d'où ce count :/ Elle est tellement limitée que je ne suis pas convaincu qu'elle présente un intérêt quelconque au final, il faudrait donner un accès à PDO::query ou écrire une méthode spécialisée (one ?) qui exécute la requête que tu lui passes puis renvoie le résultat d'un fetchColumn. Et encore, c'est en supposant qu'elle est correctement employée quand il y aurait des binds à réaliser (j'ai des doutes sur ce point).

      PS : il est 1000 fois préférable de laisser planter à ce genre de try/catch qui n'a strictement aucune utilité

      -
      Edité par julp 3 décembre 2024 à 22:28:15

      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2024 à 13:12:07

        donc pour l'accés pdo

        public function countAll($sql, $data = array()){
        		$req = $this->db->prepare($sql);
        		$req->execute($data);
        		return $req->rowCount();
        	}


        et pour le try catch j'enlève simplement ?

        try/catch

        J'enlève tout simplement ?

        -
        Edité par lutinjoyeux 4 décembre 2024 à 13:24:03

        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2024 à 13:33:18

          Plutôt qu'un rowCount() sur une requête SELECT * …, je conseillerais un fetchColumn() sur une requête SELECT count(…) FROM …. Cela évite de charger tous les résultats pour au final ne faire que les compter.

          Et oui, tu peux enlever le bloc try/catch autour de la construction de PDO dans ta classe DB.

          -
          Edité par Ymox 4 décembre 2024 à 13:33:56

          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2024 à 13:38:45

            alors voila le nouveau code qui semble marcher

                        if ($nature == "spoon pipes") {
                            $totalProduct = $DB->count('SELECT COUNT(*) FROM products WHERE nature ="spoon pipes"');
                        }
                        elseif ($nature == "chillums") {
                            $totalProduct = $DB->count('SELECT COUNT(*) FROM products WHERE nature ="chillums"');
                        }
                        elseif ($nature == "pipes sherlock") {
                            $totalProduct = $DB->count('SELECT COUNT(*) FROM products WHERE nature ="pipes sherlock"');
                        }
                        elseif ($nature == "steamrollers") {
                            $totalProduct = $DB->count('SELECT COUNT(*) FROM products WHERE nature ="steamrollers"');
                        }
                        else{
                            $totalProduct = $DB->count('SELECT COUNT(*) FROM products WHERE nature IN("spoon pipes", "chillums", "pipes sherlock", "steamrollers")');
                        }
                      
                        
             
                        $productTotal = $totalProduct;
            public function count($sql, $data = array()){
            		$req = $this->db->prepare($sql);
            		$req->execute($data);
            		return $req->fetchColumn();
            	}
            
            par contre le PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',

            mon UTF8 je le place bien dans

            public function __construct($host = null, $username = null, $password = null, $database = null){
            		if($host != null){
            			$this->host = $host;
            			$this->username = $username;
            			$this->password = $password;
            			$this->database = $database;
            		}




            -
            Edité par lutinjoyeux 4 décembre 2024 à 14:35:11

            • Partager sur Facebook
            • Partager sur Twitter

            Pagination et filtrage

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