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

Langage PHP Discussion :

Probleme pagination sur script recherche


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Par défaut Probleme pagination sur script recherche
    Bonjour

    Je viens vers vous car j'ai un soucis pour faire une pagination. Chaque fois que je met un code de pagination cela m'affiche plus de 5000 pages j'ai tout essayé et pas moyen d'y arriver j'essaie avec ce tuto http://antoine-herault.developpez.co...atique-en-php/ mais voila cela m'affiche trop de page

    Voici mon code
    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    <?php 
    mysql_connect('localhost','root','password');
    mysql_select_db('database');
    //pagination
    $messagesParPage=2; //Nous allons afficher 5 messages par page.
     
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query('SELECT COUNT(*) AS total FROM download'); //Nous récupérons le contenu de la requête dans $retour_total
    $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);
     
    if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    {
         $pageActuelle=intval($_GET['page']);
     
         if($pageActuelle<$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         {
              $pageActuelle=$nombreDePages;
         }
    }
    else // Sinon
    {
         $pageActuelle=1; // La page actuelle est la n°1    
    }
     
    $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
    //On determine l'expression a rechercher
    if(isset($_GET['search']) && strlen($_GET['search'])>2)
    {
            $rec = mysql_real_escape_string(htmlspecialchars($_GET['search']));
     
    //On determine le type de recherche
    if(isset($_GET['type']))
    {
            if($_GET['type']=='un')//Un des mots
            {
                    $type = 1;
            }
            elseif($_GET['type']=='all')//Tout les mots
            {
                    $type = 2;
            }
            else//L'expression exacte
            {
                    $type = 3;
            }
    }
    else
    {
            $type = 1;//type par defaut: L'expression exacte
    }
    //On determine si on doit surligner les mots dans les resultats
    if(!isset($_GET['surligner']) or $_GET['surligner']!='true')
    {
            $surligner = false;
    }
    else
    {
            $surligner = true;
    }
     
    //On dertermine les identifiants, les noms et les informations des utilisateur
    $req = 'SELECT * FROM download WHERE ';
    if($type==1)
    {//ayant un des mots dans leurs informations
            $mots = explode(' ',$rec);//En separre lexpression en mots cles
            foreach($mots as $mot)
            {
                  $req .= ' keywords LIKE "%'.$mot.'%" OR (name LIKE "%'.$mot.'%") OR';
            }
            $req .= ' 1=0';
    }
    elseif($type==2)
    {//ayant tout des mots dans leurs informations
            $mots = explode(' ',$rec);//En separre lexpression en mots cles
            foreach($mots as $mot)
            {
                    $req .= ' (online = \'yes\' AND (keywords LIKE "%'.$mot.'%") OR (name LIKE "%'.$mot.'%")) AND';
            }
            $req .= ' 1=1';
    }
    else
    {//ayant l'expression exacte dans leurs informations
            //$req .= 'keywords LIKE "%'.$rec.'%"';
    		$req .= ' (online = \'yes\' AND (keywords LIKE "%'.$rec.'%") OR (name LIKE "%'.$rec.'%"))';
    }
     
    //Les utilisateur seront ranges par identifiant en ordre croissant
    $req .= '  ORDER BY adedd DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
    $requete = mysql_query($req);
    //Le formulaire de recherche
    ?>
    <form action="" method="get">
    Expression &agrave; rechercher: <input type="text" name="search" value="<?php echo $rec; ?>" /><br />
    Type de recherche: <input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <input type="radio" name="type" value="all"<?php if($type==2){echo 'checked="checked"';} ?> /> Tout les mots <input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br />
    Mettre en gras les mots recherch&eacute;s: <input type="checkbox" name="surligner" value="true" <?php if($surligner){echo 'checked="checked"';} ?> /><br />
    <input type="submit" value="Rechercher" />
    </form>
    <h2>R&eacute;sultats</h2>
    <table>
            <tr>
                    <th>Affiche</th>
                    <th>Titre</th>
                    <th>Mots clefs</th>
            </tr>
    <?php
    echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
    for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    {
         //On va faire notre condition
         if($i==$pageActuelle) //Si il s'agit de la page actuelle...
         {
             echo ' [ '.$i.' ] '; 
         }	
         else //Sinon...
         {
              echo ' <a href="search.php?page='.$i.'">'.$i.'</a> ';
         }
    }
    echo '</p>';
    //On affiche les resultats
    while($dnn = mysql_fetch_array($requete))
    {
    ?>
            <tr>
                    <td><?php echo '<img src="uploads/images/'.$dnn['image1'].'" alt="Help" width="100" />'; ?></td>
                    <td><?php echo $dnn['name']; ?></td>
                    <td><?php
    if($surligner)//Si il faut surligner les mots, on les surligne
    {
            if($type==3)
            {
                    echo preg_replace('#('.preg_quote($rec).')#i', '<strong>$1</strong>', $dnn['keywords']);//On surligne l'expression exacte
            }
            else
            {
                    echo preg_replace('#('.str_replace(' ','|',preg_quote($rec)).')#i', '<strong>$1</strong>', $dnn['keywords']);//On surligne les mots cles de la recherche
            }
    }
    else
    {
            echo $dnn['keywords'];//On ne surligne pas
    }
    ?></td>
            </tr>
    <?php
    }
     
    ?>
    </table>
    <?php
    }else{
    ?>
    <form action="" method="get">
    Expression &agrave; rechercher: <input type="text" name="search" value="<?php echo $rec; ?>" /><br />
    Type de recherche: <input type="radio" name="type" value="un"<?php if($type==1){echo 'checked="checked"';} ?> /> Un des mots <input type="radio" name="type" value="all"<?php if($type==2){echo 'checked="checked"';} ?> /> Tout les mots <input type="radio" name="type" value="exacte"<?php if($type==3){echo 'checked="checked"';} ?> /> Expression exacte<br />
    Mettre en gras les mots recherch&eacute;s: <input type="checkbox" name="surligner" value="true" <?php if($surligner){echo 'checked="checked"';} ?> /><br />
    <input type="submit" value="Rechercher" />
    </form>
    <?php
    }
    ?>
    Pouvez-me dire ou est le probleme?? merci de votre aide

  2. #2
    Membre éclairé
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Par défaut
    J'avoue n'avoir regarder que le début de ton code (la partie qui calcul le nombre de page) vu qu’apparemment c'est ça qui te pose un problème.

    Il existe une fonction pour compter le nombre de ligne d'une réponse à une requete sql: mysql_num_rows, cela devrai t'aider à compter le nombre de ligne qui se trouve dans ta table download.

    essaies avec quelque chose comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query("SELECT * FROM download"); //Nous récupérons le contenu de la requête dans $retour_total
    $total=mysql_num_rows($retour_total); //On compte le nombre de lignes.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);

    Mais je ne suis pas sur que cela résolve ton problème tu peux nous dire combien tu as d'enregistrement dans ta table et de combien il se trompe pour la pagination?

  3. #3
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    bonjour,
    il faut voir d'ou vient le pb :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    $messagesParPage=2; //Nous allons afficher 5 messages par page.
     
    $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);
     
    echo "Nb total : ".$total.' / Nb de page : '.$nombreDePage;
    a voir si les valeurs affichés corresponde bien a ce que tu attends....

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Tu pourra faire un echo de ta requéte a la fin pour voir quece qui donne

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Par défaut
    Citation Envoyé par PtiteA2 Voir le message
    J'avoue n'avoir regarder que le début de ton code (la partie qui calcul le nombre de page) vu qu’apparemment c'est ça qui te pose un problème.

    Il existe une fonction pour compter le nombre de ligne d'une réponse à une requete sql: mysql_num_rows, cela devrai t'aider à compter le nombre de ligne qui se trouve dans ta table download.

    essaies avec quelque chose comme ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query("SELECT * FROM download"); //Nous récupérons le contenu de la requête dans $retour_total
    $total=mysql_num_rows($retour_total); //On compte le nombre de lignes.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);

    Mais je ne suis pas sur que cela résolve ton problème tu peux nous dire combien tu as d'enregistrement dans ta table et de combien il se trompe pour la pagination?
    Quanje fais cela j'ai cette erreur
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\web\www\search\index.php on line 138
    J'ai 11 673 entrée dans ma base j'effectue une recherche avec un nom et ce nom il y en a que 7 dans la base de donnée

    c'est bizarre et j'ai essayez plein de pagination et c'est le meme probleme d'affiche de page.

    Qu'appelez vous par faire un echo

    Je vous remercie de vos reponse

  6. #6
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Bonjour,

    déja, commence par récupérer le résultat de ta requête comme il le faut.
    mysql_fetch_assoc (comme indiqué dans la doc) retourne un tableau de résultat.

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $nombre_total=0;
    if($resultat= mysql_fetch_assoc($retour_total)) {
       $nombre_total= $resultat[0]['total'];
    }

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $messagesParPage=2; //Nous allons afficher 5 messages par page.
     
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query('SELECT COUNT(*) AS total FROM download'); //Nous récupérons le contenu de la requête dans $retour_total
    $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);
    cela dit, en divisant un $total=10000 par un $messagesParPage=2, cela donne 5000

    ou je me trompe?

  8. #8
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    héhé

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 27
    Par défaut
    Citation Envoyé par ascito Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $messagesParPage=2; //Nous allons afficher 5 messages par page.
     
    //Une connexion SQL doit être ouverte avant cette ligne...
    $retour_total=mysql_query('SELECT COUNT(*) AS total FROM download'); //Nous récupérons le contenu de la requête dans $retour_total
    $donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    $total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    //Nous allons maintenant compter le nombre de pages.
    $nombreDePages=ceil($total/$messagesParPage);
    cela dit, en divisant un $total=10000 par un $messagesParPage2, cela donne 5000

    ou je me trompe?
    oui c'est sur. mais c'est un moteur de recherche interne. Donc si je fais une recherche avec un mot precis et qu'en sachant qu'il y a que 7 champs avec ce mots ma recherche donnera 7 messages avec un $messagesParPage=2 me donnera que 3 pages et non 5000 c'est cela qui ne va pas

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/07/2014, 13h53
  2. [MySQL] probleme script recherche dans une table
    Par rhaamo dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/02/2007, 14h25
  3. [Scripts]recherche logiciel de capture d'image sur WMV
    Par gretch dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 20/11/2006, 11h46
  4. [vb6] probleme sur une recherche
    Par lumbroso dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 29/08/2006, 13h58
  5. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22

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