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 :

[SQL] Afficher X résultats par page ! (LIMIT) [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut [SQL] Afficher X résultats par page ! (LIMIT)
    Bonjour,

    J'aurais besoin de votre aide ... donc j'explique :

    J'ai 2 tables SQL, une nommé CLIENT et une autre nommé COM (pour commercial).
    J'ai crée un formulaire pour rechercher un profil commercial dans la table par rapport a son numéro de commercial ou nom.
    Le fichier result_com.php m'affiche le résultat, il m'affiche donc les informations du commercial (n°, nom et tel) puis chaque client qu'il a rentré dans la base avec un trie au choix par n° ou nom. (d'ou une jointure)
    Mais voila, le problème réside dans le fait qu'un commercial peut avoir + de 300 ou 400 clients, et ca serait génant d'avoir tous les clients qui s'affichent sur la même page, longueur de chargement etc ...
    Ainsi je souheterais mettre en place un systeme qui permettrais d'afficher disons 20 clients par page.

    Evidemment, je viens pas à vous sans avoir fait quelques recherches, et j'ai trouvé que pour afficher un certain nombre d'enregistrement de la table on utilisait dans la requête SQL LIMIT, ainsi en remplacant les valeurs par des variables il me serait facile de retourner x éléments par pages. J'ai essayé, et ca fait plusieurs jours que je planche sur le problème et malgrès les tutos que j'ai pu trouver sur le net (phphdebutant.org), je n'ai pas réussi a adapter le code a ma page ... Je précise d'ailleurs que je débute un peu en Php et que mes notions sont plutôt limité alors vous moquez pas du code ^^

    Voici le code de ma page qui affiche juste les 20 premiers enregistrements :

    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
    <?php
    include 'connect_inc.php';
     
    $limit = 20;
    $num = $_POST['num'];
    $nom = $_POST['nom'];        
    $tel = $_POST['tel'];
     
    $result = mysql_query("SELECT * FROM com where nom like '$nom' OR num like '$num' OR tel like '$tel'");
    if (!$result) {
       echo "Impossible d'exécuter la requête : " . mysql_error();
       exit;
    }
    if (mysql_num_rows($result) > 0) {
     
    		  $row = mysql_fetch_row($result);
    		  echo "Code commercial : ".$row['1']."<br>";     
              echo "Nom : ".$row['3']."<br>";
              echo "N° de Téléphone : ".$row['4']."<br>";
              echo "<br>"; 
    		 }            
          else {
              echo "Saisie introuvable.";
    }
     
     
    $result2 = mysql_query("SELECT client.id, client.num_cli, client.nom, com.nom, com.num_cli FROM client LEFT JOIN com ON client.num_cli=com.num_cli WHERE com.num = '$num' OR com.nom LIKE '$nom' OR com.tel LIKE '$tel' ORDER BY client.nom ASC LIMIT $limit");
     
    if (!$result2) {
       echo "Impossible d'exécuter la requête : " . mysql_error();
       exit;
       }
     
        while($row = mysql_fetch_row($result2)) {   
    		echo "Client rattaché au commercial :".$nom."&nbsp;".$num."<br>";
    		if ($row['1'] != 0)
    		{ 
              echo "Numéro client : ".$row['1']."<br>";
            }
            else
            {
              echo "Numéro client : Néant <br>";	
    		}  
    		echo "Nom : ".$row['2']."<br>";
    		$id = $row['0'];
    		echo "<a href=\"affich.php?id=" . $id . "\">Afficher la fiche client.</a><br>";
    		echo "<br>";
    		}          
     
    	 mysql_close();
    ?>
    Merci de votre aide

  2. #2
    Membre habitué Avatar de mimagyc
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 151
    Points
    151
    Par défaut
    essaie ca (fait rapidement ,, donc il est possible qu'il y est des erreurs )

    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
     
    <?php
    include 'connect_inc.php';
    $limit = 0; // tu commence a lire ta base a 0
    $nombreparpage = 20; // tu affiche 20 resultat par page
    if (isset ($_GET['limit'])) { $limit = $_GET['limit']; } // si la variable limit existe , on la remplace par celle de l'url qui a été calculé auparavant (voir plus bas)
    $num = $_POST['num']; 
    $nom = $_POST['nom']; $tel = $_POST['tel'];   
     
    $result = mysql_query("SELECT * FROM com where nom like '$nom' OR num like '$num' OR tel like '$tel'"); 
     
    if (!$result) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; } 
     
    if (mysql_num_rows($result) > 0) {  
     
    $row = mysql_fetch_row($result); 
     
    echo "Code commercial : ".$row['1']."<br>"; 
    echo "Nom : ".$row['3']."<br>"; 
    echo "N° de Téléphone : ".$row['4']."<br>"; 
    echo "<br>"; } else {  echo "Saisie introuvable."; }     
     
     
    $result2 = mysql_query("SELECT client.id, client.num_cli, client.nom, com.nom, com.num_cli FROM client LEFT JOIN com ON client.num_cli=com.num_cli WHERE com.num = '$num' OR com.nom LIKE '$nom' OR com.tel LIKE '$tel' ORDER BY client.nom ASC LIMIT $limit,$nombreparpage");   
     
    if (!$result2) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; }   
     
    while($row = mysql_fetch_row($result2)) { 
    echo "Client rattaché au commercial :".$nom."&nbsp;".$num."<br>"; 
     
    if ($row['1'] != 0)  { echo "Numéro client : ".$row['1']."<br>"; }  
    else  {  echo "Numéro client : Néant <br>"; } 
     
    echo "Nom : ".$row['2']."<br>"; 
    $id = $row['0']; 
    echo "<a href=\"affich.php?id=" . $id . "\">Afficher la fiche client.</a><br>"; 
    echo "<br>"; } 
    // on calcule la variable limite pour les prochaine pages
    $suivant = $limit + $nombreparpage;
    $precedent = $limit - $nombreparpage;
    // affichage du lien precedent
    echo "<a href=".$_SERVER['HTTP_REFERER']."&limit=".$precedent."><< Précédent</a>";
    // affichage du lien suivant
    echo "<a href=".$_SERVER['HTTP_REFERER']."&limit=".$suivant.">Suivant >> </a>";
    mysql_close(); ?>
    âpres tu peus aussi faire en sorte que les lien ne s'affiche pas si il n'existe pas de résultat apres le nombre de la variable $limit .

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    J'aurais utilisé le lien de la page en dur plutôt que $_SERVER['HTTP_REFERER']
    L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.
    Sinon niveau code, je modifierais 2 choses les quotes et les br :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="affich.php?id=' . $id . '">Afficher la fiche client.</a><br />';
    comme ça de partout. Ainsi tu as un code valide, + rapide et + lisible

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Merci pour votre aide et vos conseils

    Je tester les modifications :p

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Ca me met une erreur 404 ... Pourtant je trouve le code correcte, d'ou vient l'erreur ?! Oo'

    Merci

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985

  7. #7
    Membre habitué Avatar de mimagyc
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 151
    Points
    151
    Par défaut
    tu as utilisé $_SERVER['HTTP_REFERER'] ou bien un lien en dur?

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par mimagyc
    tu as utilisé $_SERVER['HTTP_REFERER'] ou bien un lien en dur?
    J'ai utilisé $_SERVER['HTTP_REFERER'] ...

    Edit > Avec les liens en dur, ca me redirige sur la page précédente (search_com.php&limit=20) mais sans m'afficher la suite de la table !

    Edit 2 > Yogui > Ton lien ne fonctionne pas chez moi ...

  9. #9
    Membre habitué Avatar de mimagyc
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Points : 151
    Points
    151
    Par défaut
    Fais voir ton code actuel, mais logiquement tout devrai marcher .. bien que ce soit basic comme système

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut


    Ce lien ? http://antoine-herault.developpez.com/tutoriels/php/pagination-automatique-en-php/

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Le voila :

    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
    <?php
    include 'connect_inc.php';
    $limit = 0; // tu commence a lire ta base a 0
    $nombreparpage = 20; // tu affiche 20 resultat par page
    if (isset ($_GET['limit'])) { $limit = $_GET['limit']; } // si la variable limit existe , on la remplace par celle de l'url qui a été calculé auparavant (voir plus bas)
    $num = $_POST['num']; 
    $nom = $_POST['nom']; $tel = $_POST['tel'];   
     
    $result = mysql_query("SELECT * FROM com where nom like '$nom' OR num like '$num' OR tel like '$tel'"); 
     
    if (!$result) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; } 
     
    if (mysql_num_rows($result) > 0) {  
     
    $row = mysql_fetch_row($result); 
     
    echo "Code commercial : ".$row['1']."<br>"; 
    echo "Nom : ".$row['3']."<br>"; 
    echo "N° de Téléphone : ".$row['4']."<br>"; 
    echo "<br>"; } else {  echo "Saisie introuvable."; }     
     
     
    $result2 = mysql_query("SELECT client.id, client.num_cli, client.nom, com.nom, com.num_cli FROM client LEFT JOIN com ON client.num_cli=com.num_cli WHERE com.num = '$num' OR com.nom LIKE '$nom' OR com.tel LIKE '$tel' ORDER BY client.nom ASC LIMIT $limit,$nombreparpage");   
     
    if (!$result2) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; }   
     
    while($row = mysql_fetch_row($result2)) { 
    echo "Client rattaché au commercial :".$nom."&nbsp;".$num."<br>"; 
     
    if ($row['1'] != 0)  { echo "Numéro client : ".$row['1']."<br>"; }  
    else  {  echo "Numéro client : Néant <br>"; } 
     
    echo "Nom : ".$row['2']."<br>"; 
    $id = $row['0']; 
    echo "<a href=\"affich.php?id=" . $id . "\">Afficher la fiche client.</a><br>"; 
    echo "<br>"; } 
    // on calcule la variable limite pour les prochaine pages
    $suivant = $limit + $nombreparpage;
    $precedent = $limit - $nombreparpage;
    // affichage du lien precedent
    if ( $precedent > 20 ) {
    echo "<a href=".$_SERVER['HTTP_REFERER']."&limit=".$precedent."><< Précédent</a>&nbsp;"; }
    // affichage du lien suivant
    echo "<a href=".$_SERVER['HTTP_REFERER']."&limit=".$suivant.">Suivant >> </a>";
    mysql_close(); ?>
    J'ai pas encore modifié les quotes, je le ferais une fois que ca marchera :p

    Merci encore

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Heu ... sorry, apparemment par chez moi, y'a des problèmes de connexions vers l'international, bizarrement le forum passe, mais pas ton lien Oo'

    C'est ça d'habiter sur une île

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    C'est bon, c'est revenu :]

    Merci

  15. #15
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Voici les modifications après lecture du tuto :

    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
    <?php
    include 'connect_inc.php';
     
    $messagesparpage=20;
    $retour_total=mysql_query('select count(*) AS total FROM client');
    $donnees_total=mysql_fetch_assoc($retour_total);
    $total = $donnees_total['total'];
     
    $nombredepages=ceil($total/$messagesparpage);
     
    if (isset ($_GET['page'])) 
    {
    $pageactuelle = intval($_GET['page']);
    	If ($pageactuelle>$nombredepages)
    	{
    	$pageactuelle = $nombredepages;
    	}
    }
    Else
    { 
    $pageactuelle = 1;
    }
     
    $premiereentree = ($pageactuelle-1)*$messagesparpage;
     
     
    $num = $_POST['num']; 
    $nom = $_POST['nom']; $tel = $_POST['tel'];   
     
    $result = mysql_query("SELECT * FROM com where nom like '$nom' OR num like '$num' OR tel like '$tel'"); 
     
    if (!$result) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; } 
     
    if (mysql_num_rows($result) > 0) {  
     
    $row = mysql_fetch_row($result); 
     
    echo "Code commercial : ".$row['1']."<br>"; 
    echo "Nom : ".$row['3']."<br>"; 
    echo "N° de Téléphone : ".$row['4']."<br>"; 
    echo "<br>"; } else {  echo "Saisie introuvable."; }     
     
     
    $result2 = mysql_query("SELECT client.id, client.num_cli, client.nom, com.nom, com.num_cli FROM client LEFT JOIN com ON client.num_cli=com.num_cli WHERE com.num = '$num' OR com.nom LIKE '$nom' OR com.tel LIKE '$tel' ORDER BY client.nom ASC LIMIT $premiereentree,$messagesparpage");   
     
    if (!$result2) {  echo "Impossible d'exécuter la requête : " . mysql_error(); exit; }   
     
    while($row = mysql_fetch_row($result2)) { 
    echo "Client rattaché au commercial :".$nom."&nbsp;".$num."<br>"; 
     
    if ($row['1'] != 0)  { echo "Numéro client : ".$row['1']."<br>"; }  
    else  {  echo "Numéro client : Néant <br>"; } 
     
    echo "Nom : ".$row['2']."<br>"; 
    $id = $row['0']; 
    echo "<a href=\"affich.php?id=" . $id . "\">Afficher la fiche client.</a><br>"; 
    echo "<br>"; } 
     
    echo '<p align="center"> Page : ';
    for ($i=1;$i<=$nombredepages;$i++)
    { 
     if($i==$pageactuelle)
     { 
     echo ' [ '.$i. ' ] ';
     }
     Else
    	{ 
    	echo ' <a href="result_com.php?page='.$i.'">'.$i.'</a>';
    	}
    }
    echo '</p>';
     
    mysql_close(); ?>
    J'ai dans ma table un peu de plus de 20 entrées, et j'ai bien 2 numéros de page qui s'affiche (ouf, quelque chose qui marche), mais lorsque je clic sur les liens j'ai Saisie Introuvable ....

    Edit > Ca viendrait pas du fait, qu'il faudrait faire remonter en url le critère de la recherche ?

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    En effet; s'il y a un critère de recherche le tutoriel n'est probablement pas 100% adapté.

    Une solution est de remonter le paramètre dans l'URL, un autre est d'utiliser les sessions pour conserver la valeur d'une page à l'autre.

  17. #17
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2007
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Yogui
    En effet; s'il y a un critère de recherche le tutoriel n'est probablement pas 100% adapté.

    Une solution est de remonter le paramètre dans l'URL, un autre est d'utiliser les sessions pour conserver la valeur d'une page à l'autre.
    Oui, ce que je pensais faire c'est faire remonter le critère de recherche donc ici, le numéro du commercial ou le nom dans l'url mais comment vérifier si c'est dans la recherche le nom ou le numéro du commercial qu'on aura taper ?!

Discussions similaires

  1. [SQL] Je souhaite limiter le nombre de résultat par page
    Par kilian67 dans le forum PHP & Base de données
    Réponses: 38
    Dernier message: 20/08/2007, 17h55
  2. Limiter nbr de résultat par page
    Par Marconico dans le forum ASP
    Réponses: 13
    Dernier message: 14/12/2006, 13h27
  3. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20
  4. [SQL] Nombre de résultats par pays
    Par flOZ dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/05/2006, 05h29
  5. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 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