Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2007, 06h29   #1
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
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 :
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
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 08h42   #2
Membre habitué
 
Avatar de mimagyc
 
Inscription : novembre 2006
Messages : 310
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2006
Messages : 310
Points : 115
Points : 115
essaie ca (fait rapidement ,, donc il est possible qu'il y est des erreurs )

Code :
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 .
mimagyc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2007, 09h13   #3
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

J'aurais utilisé le lien de la page en dur plutôt que $_SERVER['HTTP_REFERER']
Citation:
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 :
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
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 00h08   #4
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
Merci pour votre aide et vos conseils

Je tester les modifications :p
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 01h43   #5
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

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

Merci
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h55   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

As-tu regardé sur http://antoine-herault.developpez.co...atique-en-php/ ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 13h30   #7
Membre habitué
 
Avatar de mimagyc
 
Inscription : novembre 2006
Messages : 310
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2006
Messages : 310
Points : 115
Points : 115
tu as utilisé $_SERVER['HTTP_REFERER'] ou bien un lien en dur?
mimagyc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2007, 23h28   #8
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
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 ...
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2007, 23h46   #9
Membre habitué
 
Avatar de mimagyc
 
Inscription : novembre 2006
Messages : 310
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2006
Messages : 310
Points : 115
Points : 115
Fais voir ton code actuel, mais logiquement tout devrai marcher .. bien que ce soit basic comme système
mimagyc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2007, 23h58   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355


Ce lien ? http://antoine-herault.developpez.com/tutoriels/php/pagination-automatique-en-php/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2007, 23h59   #11
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
Le voila :

Code :
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
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 00h03   #12
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
Citation:
Envoyé par Yogui
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
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 00h17   #13
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Essaie :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 00h21   #14
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
C'est bon, c'est revenu :]

Merci
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 07h31   #15
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
Voici les modifications après lecture du tuto :

Code :
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 ?
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 08h44   #16
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 23h21   #17
Invité régulier
 
Inscription : juin 2007
Messages : 40
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juin 2007
Messages : 40
Points : 7
Points : 7
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 ?!
CaLeDo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h46.


 
 
 
 
Partenaires

Hébergement Web