IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

pagination sur le résultat d'une recherche


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Par défaut pagination sur le résultat d'une recherche
    Bonjour,

    J'essaie de faire une pagination sur le résultat d'une recherche (qui fonctionne bien sur la totalité) qui me renvoie une erreur PDO à la ligne 40 si vous pouvez me dire ce qui ne va pas, je vous remercie de votre aide.

    Mon code n'est pas très long.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
        include 'main-functions.php';
        /////////////////////////////// DEBUT RECHERCHE //////////////////////////////
        function recherche_par_mots_cles($search){
     
            global $connexion;
        // 
            $where = "";
            $search = preg_split('/[\s\-]/' ,$search);
            $count_keywords = count($search);
            foreach ($search as $key => $searches){
                $where .= "article LIKE '%$searches%' OR description LIKE '%$searches%'";
                if ($key != ($count_keywords-1)){
                    $where .= " AND ";
                }
            }
     
            $query = mysqli_query($connexion, "SELECT * FROM articles WHERE $where")or exit(mysqli_error($connexion));
            $rows = mysqli_num_rows($query);
            if ($rows){
                while ($article = mysqli_fetch_assoc($query))
                {
                 echo "<div class=\"row\">
                            <div class=\"col l12 m12 s12\">
                                <a href=index.php?page=articles&id=".$article['id'].">".$article['article']."</a>
                            <br>
                                <u>Description:</u><br>
                                ".$article['description']."
                            <br>
                                    Prix: ".$article['prix']."€
                            </div>
                        </div>";
                }
        /////////////////////////////// DEBUT PAGINATION //////////////////////////////
                global $bdd;
     
                //Nombre de pages à afficher
                $parPage = (int) 3;
                //Requête simple pour compter les entrées
                $req = $bdd->query("SELECT COUNT(*) as nb_billets FROM articles WHERE article LIKE '$where' OR description LIKE '$where'");
                $resultat = $req->fetch();
                //nb de billets dans la table
                $totalBillets = $resultat['nb_billets'];
     
                //Nb pages à afficher à l'arrondi
                $nbPage = ceil($totalBillets/$parPage);
     
                //Condition pour voir sur quelle page on se trouve et si c'est bien un chiffre (==1 vérifie bien que c'est un chiffre)
                if(isset($_GET['numeroPage']) && !empty($_GET['numeroPage']) && ctype_digit($_GET['numeroPage'])==1)
                {	//Si le numéro de page n'est pas supérieur au nombre de pages existantes
                    if ($_GET['numeroPage']>$nbPage)
                    {
                        $pageCourrante = $nbPage;
                    }
                    else
                    {
                        $pageCourrante = $_GET['numeroPage'];
                    }
                }
                else 
                {	//Sinon la page courrante = 1
                    $pageCourrante = (int)1;
                }
                $premierBilletDeLaPage = ($pageCourrante-1)*$parPage;
        /////////////////////////////// FIN PAGINATION //////////////////////////////
     
        ///////////////// DEBUT AFFICHAGE DES NUMEROS DE PAGES /////////////////////
                include('pagination.inc.php');
        ///////////////// FIN AFFICHAGE DES NUMEROS DE PAGES /////////////////////
     
            }else{
                echo "<p>Pas de résultat !</p>";
            }
        }
        /////////////////////////////// FIN RECHERCHE //////////////////////////////
        ?>

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    le mieux c'est de poser juste avant la ligne qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "SELECT COUNT(*) as nb_billets FROM articles WHERE article LIKE '$where' OR description LIKE '$where'";
    et tu verras par toi-même ce qui est envoyé à la base de données

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,

    1/ d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            global $connexion;
    ...
            $query = mysqli_query(....
    et plus loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                global $bdd;
    ...
                $req = $bdd->query(....
    2 types de connexions ?
    2 systèmes (1 procédural et 1 orienté objet) ?
    Il faudrait commencer par rester cohérent.

    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                $req = $bdd->query("SELECT COUNT(*) as nb_billets FROM articles WHERE article LIKE '$where' OR description LIKE '$where'");
    Or, $where est déjà de la forme (voir début du code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "article LIKE '%$searches%' OR description LIKE '%$searches%'" . " AND ". "......."
    La requête est donc bien (pour le TOTAL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM articles WHERE $where";
    Pour la pagination, il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " LIMIT $premierBilletDeLaPage,  $parPage "
    Bref, c'est bien de copier-coller du code. C'est MIEUX de le comprendre.

  4. #4
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Par défaut pagination sur le résultat d'une recherche
    Merci de vos réponses. J'ai fait la pagination à partir d'un tutoriel et la recherche à partir d'un autre et voilà pourquoi une parite est en procédurale et l'autre en orienté objet mais bon...

Discussions similaires

  1. [AC-2007] Requête sur le résultat d'une recherche
    Par kristof95 dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/09/2012, 13h36
  2. Réponses: 1
    Dernier message: 27/12/2011, 14h13
  3. Afficher le résultat d'une recherche sur un formulaire
    Par cheikhoufia dans le forum NetBeans
    Réponses: 1
    Dernier message: 08/06/2011, 23h52
  4. Effectuer recherche Multi-critères sur le résultat d'une requête
    Par 30avril1989 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/06/2010, 15h04
  5. Réponses: 0
    Dernier message: 03/06/2010, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo