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 :

Compter résultats d'une requête [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 149
    Par défaut Compter résultats d'une requête
    Bonjour,

    J'ai réalisé un moteur de recherche sur mon site et je voudrais que soit affiché un certain nombre de résultats par page une fois le mot clef entré et le bouton "rechercher" cliqué.
    Une partie de mon code ne fonctionne pas.


    Voici le code qui établit ma requête de sélection et qui l'exécute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Running query:
    $select = "SELECT * FROM objects 
    WHERE name LIKE '%".$recherche."%'
    OR description LIKE '%".$recherche."%'
    OR country LIKE '%".$recherche."%'
    ORDER BY name ASC LIMIT ".$limit.",".$results_pg;
     
    $result = mysql_query($select, $connect) or die ("Erreur : ".mysql_error());
    Voici à présent la part du code qui ne fonctionne pas, celle qui compte les résultats à afficher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Counting total records in table:
    $count = "SELECT COUNT(id) FROM ".$result; 
    $result = mysql_query($count, $connect);
    $row = mysql_fetch_row($result);
    $totalRows = $row[0];
    Merci beaucoup de votre aide !

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Par défaut
    Comment te dire... en fait c'est normal que tu n'obtiennes pas le résultat escompté, je crois que tu fais un sérieux amalgame entre les requetes et les données récupérées d'une base...
    Je te recommande vivement de reprendre les tutos sur les bases de données et les fonctions mysql.

    Bref, pour faire court:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Running query:
    $select = "SELECT * FROM objects 
    WHERE name LIKE '%".$recherche."%'
    OR description LIKE '%".$recherche."%'
    OR country LIKE '%".$recherche."%'
    ORDER BY name ASC LIMIT ".$limit.",".$results_pg;
     
    $result = mysql_query($select, $connect) or die ("Erreur : ".mysql_error());
     
    $count=mysql_num_rows($result);
     
    echo "Nombre de résultats retournés par la requete: ".$count;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 149
    Par défaut
    Salut !

    En effet, ce que j'ai réalisé est totalement erroné. J'ai corrigé en suivant tes conseils.

    Toutefois je pense ne pas avoir expliqué clairement ce que j'essaie de faire.
    Comme il s'agit de créer un moteur de recherche sur un site, je voudrais afficher les résultats de la requête et faire apparaître un lien vers la prochaine page s'il y a plus de 10 résultats. A présent tout fonctionne, ou presque...

    La requête s'effectue bel et bien en fonction du critère entré par l'utilisateur, les résultats apparaissent, mais s'il y a plus de 10 résultats, le lien vers la prochaine page ne figure pas.

    Sans doute mon erreur provient-elle de la manière dont je m'y prends pour calculer s'il faut afficher une autre page. A moins que je ne m'abuse, tel que je code, $totalRows ne saura jamais plus grand que $nextLimit.

    Voici quelques parties de mon script :

    /
    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
    / Defines query 
    $select = "SELECT * FROM objects 
    WHERE name LIKE '%".$recherche."%'
    OR description LIKE '%".$recherche."%'
    OR country LIKE '%".$recherche."%'
    ORDER BY name ASC LIMIT ".$limit.",".$results_pg;
     
    // Runs query
    $result = mysql_query($select, $connect) or die ("Erreur : ".mysql_error());
     
    // Counts total records in query
    $row = mysql_num_rows($result);		
    $totalRows = $row[0];
     
    // Recalculates $limit to know if other results to display
    $nextLimit = $limit + $results_pg;
    $prevLimit = $limit - $results_pg;
     
    // Displays link to previous page if necessary
    if($limit != 0) {  
    echo '<a href="'.$pgName.'?limit='.$prevLimit.'"><<&nbsp;&nbsp; Page précédente</a>';	
    }
     
    // Displays link to next page if necessary
    if($nextLimit < $totalRows) {
    echo '<a href="'.$pgName.'?limit='.$nextLimit.'">Page Suivante &nbsp;&nbsp;>></a>';
    } 
    ?>
    Merci !

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Tu as un exemple pour la pagination ici

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 149
    Par défaut
    Merci N1bus, mais le problème que je rencontre n'a pas trait à la pagination à partir d'une requête qui questionne une base de données; il concerne plutôt la pagination à partir du résultat d'une requête effectuée (dans mon cas, celle d'un moteur de recherche).

    La requête, en tant que telle, s'effectue convenablement et retourne sur la 1ère page le nombre de résultats escomptés, mais elle n'affiche pas de liens vers la 2e page s'il y a plus de résultats à afficher.

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    C'est pourtant ce dont il s'agit dans le lien que je t'ai donné

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 149
    Par défaut
    Pardon pour avoir lu en diagonal trop rapidement...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 149
    Par défaut
    Voila, j'ai bien lu le tutoriel, mais il ne répond pas à mes besoins puisque dans mon cas je réalise au préalable une requête : un utilisateur entre dans la zone de recherche un mot clé, et la requête s'effectue dessus.
    Jusque-là, aucun problème.
    Ensuite, je dois afficher les résultats. Encore là, tout baigne.
    Mais s'il y a plus de résultats à afficher sur les autres pages, le lien "page suivante" n'apparaît pas.
    Dans le tutoriel où tu m'as dirigé, il n'est question que d'interroger une base de données existante, sans qu'aucune requête n'ait été réalisée préalablement. Mais cela est autre chose.

  9. #9
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Bon, visiblement, tu as un soucis.

    Voici comment cela fonctionne :
    • on fait une première requete totale en tenant compte de tes critères de recherche pour connaitre le nombre de résultats
    • on définit un nombre maxi de résultats à afficher par page
    • on calcule le nombre de page ( résultats trouvés / maxi = nombres de pages)
    • enfin, on refait une requete en y ajoutant la clause LIMIT
    • Maintenant on peut afficher les x résultats
    Je viens de te refaire un bout de code commenté pour essayer de mieux te faire comprendre le principe :
    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
     
    <?
    // nombre de résultat par page
    $MaxResult = 10; // ici tu définis le nombre de résultats affichés par page
     
    $Q_sql = "SELECT * FROM ta_table";  // ici tu fais un select total 
    $res_x = mysql_query($Q_sql);
    $nb_x = mysql_num_rows($res_x);  // ici tu as le nombre total de réponses
     
    $NbPages = ceil($nb_x/$MaxResult); // ici tu divises le total par le nombre maxi que tu veux afficher par page. ce qui te donneras le nombre de pages (CQFD)
     
    if(!isset($NumPage)){ $NumPage =1;}  // ici , à l'affichage, si le numéro de page n'est pas défini, on l'initialise
    if(!isset($Deb)){$LimitDeb = 0;} else { $LimitDeb = $Deb;} // sinon, on définit la limite
     
    // Liens des pages
    // ceci va afficher les numéros de pages
    $i = 1;
    $LDeb = 0;
    while($i < ($NbPages +1)){
     if($i != $NumPage){
     $LinkPages.= "<a href='index.php?action=ton_fichier_de_resultat&Deb=" .$LDeb."&NumPage=". $i."' target='_top'>$i</a>";
     }
     else {$LinkPages.= "<b><font color='#FFFFFF'>$i</font></b>";}
     if($i != $NbPages){$LinkPages.= " | ";}
     $LDeb =($LDeb + $MaxResult );
     $i++;
     }
    $NbResult =" LIMIT $LimitDeb , $MaxResult"; // ici on va donc afficher les 10 prochains résultats en tenant compte de la page
    // ceci sera concaténé à la requete finale plus bas
    //
     
     
    //ici, on fait une dernière requete,(c'est celle qui affichera les résultats)  mais on ajoute l'index de début + le nombre de résults ($Maxresult)
    $res = mysql_query($Q_sql.$NbResult);
    $nb = mysql_num_rows($res); // ici on aura le nombre de résultats retournés pour l'affichage (10 maxi mais il peut y en avoir moins sur la dernière page)
     
    // maintenant on passe à l'affichage du résultat 
     if($nb == 0){ // si il n'y a pas de résultat on affiche un message 
      //
      // ton code ici
      // 
      }
      else{ //si il ya des résultats  on les affiches
                    $i = 0;
                    while ($i < $nb){ 
        //
        // ici tu affiches les résultats
        //
        }
      }
     
      // maintenant on affiche les liens des pages :
      echo $LinkPages ;
      ?>
    Attention : ceci est un copié/collé d'un bout de mon code pour une application. je l'ai nettoyé et commenté mais il se peut que j'aie laissé une erreur de syntaxe.

Discussions similaires

  1. [MySQL] [PDO] Compter résultat d'une requête ayant plusieurs variables en entrée
    Par willm_007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/03/2015, 21h31
  2. [AC-2010] Compter/Afficher le résultats d'une requête dans un fomulaire
    Par Mairequimby dans le forum IHM
    Réponses: 7
    Dernier message: 16/04/2011, 04h57
  3. [MySQL] Compter le nombre de résultat d'une requête
    Par gueud dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/02/2008, 13h51
  4. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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