begin process at 2012 05 27 19:33:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > PAGINATION TRÈS SIMPLE SANS TABLEAU

PAGINATION TRÈS SIMPLE SANS TABLEAU


 Information sur la source

Note :
1 / 10 - par 1 personne
1,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Classé sous :bdd, basededonnées, pagination, page, affichage Niveau :Débutant Date de création :28/06/2006 Vu :8 681

Auteur : rakizm

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

ce code permet d'afficher la valeur d'un champ d'une table page par page en ayant 15 lignes par page

il est bien commenté et si vous avez des questions et des améliorations à apporter n'hésitez pas

Source

  • <?
  • $p= $_GET["p"];
  • $q="select id_nom from eco_nom";
  • $t=dbi_query($db_name, $q, $db_driver);//fonction personnelle qui execute la requette à remplacer par mysql_db_query()
  • $nbp=ceil(mysql_num_rows($t)/15);//calcul du nombre de pages
  • if (empty($p))//ce test sert à mettre la page par défaut à 1
  • $p=1;
  • if ($p==1)
  • $d=0;//début d'affichage
  • else
  • $d=($p+15)-2;//début d'affichage si la page!==1
  • $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page
  • $limit = "".$d.",".$f."";//limit du select
  • $query ="select id_nom from eco_nom limit ".$limit;//selection des champs à afficher
  • $temp=dbi_query($db_name, $query, $db_driver);//fonction personnelle qui execute la requette à remplacer par mysql_db_query()
  • //affichage des champs
  • while ($res= dbi_fetch ($temp,"row",$db_driver))//dbi_fetch à remplacer par mysql_fetch_array ou row
  • { ?>
  • <p><? echo $res[0];?></p>
  • <? }
  • if ($p==1)//test si on est à la page1
  • {?>
  • <p><a href="test.php?p=<? echo($p+1)?>">suivant</a></p>
  • <p><a>précédent</a></p><? //ne donne pas la possibilité d'afficher la page précédente ?>
  • <? }?>
  • <? if(($p>1) and ($p<$nbp))//test si on est à la page x comprise entre page 1 et $nbp nombre de page
  • {?>
  • <p><a href="test.php?p=<? echo($p+1)?>">suivant</a></p>
  • <p><a href="test.php?p=<? echo($p-1)?>">précédent</a></p>
  • <? }
  • if($p==$nbp)
  • {?>
  • <p><a>suivant</a></p><? //ne donne pas la possibilité d'afficher la page suivante ?>
  • <p><a href="test.php?p=<? echo($p-1)?>">précédent</a></p>
  • <? }?>
<?
  $p= $_GET["p"];
  $q="select id_nom from eco_nom";
  $t=dbi_query($db_name, $q, $db_driver);//fonction personnelle qui execute la requette à remplacer par mysql_db_query()
  $nbp=ceil(mysql_num_rows($t)/15);//calcul du nombre de pages
if (empty($p))//ce test sert à mettre la page par défaut à 1
	$p=1;

if ($p==1)
   	$d=0;//début d'affichage
else
	$d=($p+15)-2;//début d'affichage si la page!==1
	$f=$d+15;//fin d'affichage dans ce cas 15 affichage par page
	$limit = "".$d.",".$f."";//limit du select 
	$query ="select id_nom from eco_nom limit ".$limit;//selection des champs à afficher
	$temp=dbi_query($db_name, $query, $db_driver);//fonction personnelle qui execute la requette à remplacer par mysql_db_query()
    //affichage des champs
	while ($res= dbi_fetch ($temp,"row",$db_driver))//dbi_fetch à remplacer par mysql_fetch_array ou row
  		{	?>
			<p><? echo $res[0];?></p>
			<? } 
		if ($p==1)//test si on est à la page1
			{?>
			<p><a href="test.php?p=<? echo($p+1)?>">suivant</a></p>
			<p><a>précédent</a></p><? //ne donne pas la possibilité d'afficher la page précédente ?>
		 <? }?>
		<? if(($p>1) and ($p<$nbp))//test si on est à la page x comprise entre page 1 et $nbp nombre de page
			{?>
		<p><a href="test.php?p=<? echo($p+1)?>">suivant</a></p>
		<p><a href="test.php?p=<? echo($p-1)?>">précédent</a></p>
		<? }
			if($p==$nbp)
			{?>
		<p><a>suivant</a></p><? //ne donne pas la possibilité d'afficher la page suivante ?>
		<p><a href="test.php?p=<? echo($p-1)?>">précédent</a></p>
		<? }?>



 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj
Source avec une capture LISTING DE RÉPERTOIRE AVEC AFFICHAGE PAGE PAR PAGE par sparko_dutos
CLASS DE PAGINATION par NainPuissant
Source avec Zip Source avec une capture PAGINATION AUTOMATIQUE PAR APPEL DE FONCTIONS PHP par gigaprint

Commentaires et avis

Commentaire de garfield90 le 28/06/2006 17:16:28

Juste histoire de critiquer, j'ai que ca a faire ;)

bon, un systeme de pagination n'a rien a faire de ton systeme de présentation ( tableau ou paragraphe) => titre mal formulé.

De plus, à la lecture, ton code ne permet que le suivant et/ou le précédent
- ca serait pas mal de  donner la possibilité d'aller sur la page X sans faire toutes les pages intermédiaires
- Tu affiches dans tous les cas Precédent ou Suivant qui sont cliquable (avec ou sans effet) ca peut etre amélioré
- Tu devrais donner la possibilité a l'utilisateur de gérer le nombre de 'ligne' par page
- Tu devrais la transformer en fonction
- En lecture, tes variables $p,$f,$d sont incompréhensible au premier coup d'oeil ( on sait pas a quoi elle servent )
- Tu fais 2 requetes quasiment identique, un troncature du tableau de resultat de ta requete serait peut etre mieux (fonction array_slice)
- Tu ouvres et fermes tes balises bcp trop souvent, lecture difficile
- Utilisation de <? en place de <?php
   => code moins portable mais qui marche pour toi ( pas forcement pour tout le monde )
- Tu n'affiches pas le nombre de page donc on sait pas ou on est

En gros, pour moi c'est un source qui est inutile, plein d'erreur

Je crois que c'est a peu pres tout ce qu'il y a dire dessus



Commentaire de stepibou le 29/06/2006 00:03:15

# else
#     $d=($p+15)-2;
=>
# else if (isnumeric($p))
#     $d=($p+15)-2;

Commentaire de malalam le 29/06/2006 09:09:57 administrateur CS

Hello,

à modifier stp.
Je regarderai à mon retour, dans 5 jours.
Mais il y a pas mal de points à revoir, pour que les grands débutants ne voient pas de vilaines habitudes de programmation.

Je rajoute juste, rapidement, à ce qu'a dit Garfield : tu utilises un $_GET directement sans tester son existence. Pas bien.

Commentaire de Palleas_44 le 29/06/2006 11:36:37

ouep, rien de ce qui provient de la machine du visisteur n'est fiable, test avant, controle la structure avec sprintf() par exemple etc...

Commentaire de garfield90 le 29/06/2006 12:10:01

@Phalleas_44 : dans ce cas tu te prends la tete pour rien ( et pourquoi pas, utilisez une expression rationnelle ).

1 simple transtypage suffit :
$p = isset($_GET['p']) ?  (int) $_GET['p'] : 1 ; // test l'existence de $_GET['p']
if ( $_GET['p'] === 0 )  $p=1 ;

Je trouve son systeme de pagination bizarre.

si tu es a la page 2, son systeme fait

#  $p= 2;
#  $d=($p+15)-2;//début d'affichage si la page!==1   => $d = 15
#  $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 30
#  $limit = $d.",".$f; => $limit = 15,30

ici tout marche nickel, maintenant allons en page 5

#  $p= 5;
#  $d=($p+15)-2;//début d'affichage si la page!==1   => $d = 18
#  $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 33
#  $limit = $d.",".$f; => $limit = 18,33

ca me semble erronée.

perso, je ferai plus un truc du genre
#  $nb = 15 // nbre d'info par page
#  $d  = (($p-1)*$nb) + 1 ;
#  $f  = $d + $nb - 1
#  $limit  =  $d.','.$f
=> pour la page 1, $limit = 1,15
=> pour la page 2, $limit = 16,30
=> pour la page 3, $limit = 31,45

je pense pas avoir fait d'erreur

En plus d'être très mal codé, ca ne donne pas le résultat que j'excompte pour un système de pagination

Commentaire de rakizm le 29/06/2006 17:05:03

Merci à tous de contribuer à l'amélioration de ce code je vous ferai part des améliorations faites

:)

Commentaire de rakizm le 30/06/2006 10:46:07

re tout le monde pour ceux qui ne l'aurai pas remarqué l'affichage est faut pour afficher 15 lignes par page il faut utiliser une boucle for et non un while
donc ce ki donne :

for ($i=1;$i<=15;$i++)
{
if ($res= dbi_fetch ($temp1,"row",$db_driver))//dbi_fetch à remplacer par mysql_fetch_array ou row
       {?>
<p><? echo $res[0];?></p>
     <? }
}


par contre garfield merci pour la petite formule elle est juste à peu de chose prés "$f  = $d + $nb - 1" ==> $f=$d+$nb;


j'ai changé les noms des variables

Commentaire de coucou747 le 30/06/2006 12:12:07 administrateur CS

limit n'est pas à utiliser pour ce genre de chose, beetwen est bien plus rapide...
arrétez ces <? et ces fermetures de tags trop violentes... c'est crade comme méhode... utilisez <?php et echo à la place

Commentaire de garfield90 le 30/06/2006 13:55:05

@Rakizm :

si tu fais :
$f = $d + $nb

tu iras de 1 à 16 => 16 resultats et non 15 comme voulu, peut etre que je me plante dans les index.

Utilises pas une boucle for dans un cas comme ca car tu n'as pas forcement 15 réponses.
A la limite, utilise un foreach ou un while ( avec comme condition $nb affichage fait OU plus de réponse)

quant au limit, je suis oki avec toi coucou747 car c'est une spécif MySQL et non pas SQL.
pour la rapidité, j'ai jamais bencher ca.

Commentaire de rakizm le 30/06/2006 14:01:58

garfield je t'assure comme ça ça marche meme pour la dernière page ou il ya que 5 enreg :)
mais il y a plein d'autres chose à faire ex: tu me dis il faut afficher les n°de page à atteindre mais j'en 465 il faut ke j'affiche les 465 liens????

Commentaire de garfield90 le 30/06/2006 14:47:51

ca marche car tu fais un test sur l'existence du resultat, cependant tu boucles dans tous les cas 15 fois, meme si tu n'as que 5 resultat a affiche ( perte de temps et de ressources => pour moi c'est optimisable)

le foreach te permettra de boucle le nombre de fois qu'il y a de reponse pas de trop ni pas assez
le while c'est pareil ( apres il faut faire des bench pour savoir lequel a le plus rapide), c'est 2 structures de prog sont les plus adaptés a mon sens.


tu fais comme tu le sent. soit tu en affiches 10 par 10 et le suivant => page suivante
1->10  <- précedent
11->20 -> si tu es ici
21->30 -> suivant

ou alors tu affiches le 1er numero de page, le dernier numero de page et x page à droite et a gauche de la position courante

Ca c'est vraiment a ton apréciation

Commentaire de coucou747 le 30/06/2006 15:11:47 administrateur CS

avec un limit; il parcours toute la table, avec un where, il n'en parcours qu'une partie...

Commentaire de rakizm le 30/06/2006 15:17:36

coucou qu'est ce que tu racontes??? j'ai pas bien saisi l'histoire du where et limit

Commentaire de coucou747 le 30/06/2006 15:24:30 administrateur CS

et bien, quand tu fais limit, mysql séléctionne tout les champs de la table, et ne renvoi que les premiers, le temps de calcul est considérable... pour du where, mysql ne séléctionne qu'une partie des lignes : uniquement les bonnes... ce qui rend la requette beaucoup plus rapide...

essai avec EXPLAIN par exemple...

Commentaire de rakizm le 03/07/2006 09:20:05

tu veux dire utiliser where comme ça :
select id from table where id between $d,$f ;

le pb c ke les id ne sont pas num auto-increment auquel cas limit sera meilleur

Commentaire de coucou747 le 03/07/2006 12:27:56 administrateur CS

RAKIZM, tu n'as qu'a décaler les id quand tu supprimes un article...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Pagination de page... [ par AgentSmith ] Salut à tous,Je souhaiterai avoir quelque indicationpour savoir si il y a une possibilité depaginer des pages avec la sortie de la base de donnée. Exe pb affichage page par page et Register global [ par choubix ] bonjour,je souhaite afficher des données page par page et le probleme vient surmeent de php qui avec les register globals à off me joue des tours...vo affichage page php [ par lolo1202 ] Bonjour à tous,Quelqu'un sait il comment faire un lien parmis des résultats dune base de données ? (je travaille en php)Je m'explique. J'affiche les r envoyer une donnée a la bdd au dechargement de la page [ par Urukai1 ] Salut za tousje cherche le moyen de comptabiliser de temps de connexion sur une page et de l'envoyer a ma bdd pour cela au chargement je sais envoyer Temps d'affichage d'une page [ par Indy ] Bon bon, après deux jours passés à comprendre le fonctionnement de php3 et de mysql (site chez Free.fr), toutes les infos voulues sont enfin bien envo Affichage html & cadre [ par lastwhirlwind ] (&#168;:._LastWhirlwind_.:&#168;) Salut a tous voila G une page possedant plusieur ta submit.. [ par haka ] Bonjour, Pas très rôdé en php, je rencontre le pb suivant que je n'arrive pas à résoudre :-une page contenant un formulaire pour une inscription News affichage d'une image en fonction du nom de la page [ par fstyle ] Bonjour/soir !J'ai un petit soucis ... j'ai dû modifié un site en php ... et j'ai créer des modèles avec dreamweaver le soucis c'est que quand on est Pobleme d'affichage page par page [ par bricethenetman ] J'essaye de faire un affichage page par page sur mon site afin d'organisé les reponses de ma base de données. Cependant le code ne fonctionne pas donc pagination sur une page php [ par hbib ] salut,je souhaiterai savoir comment faire pour faire une pagination sur une page phpen effet jai un tableau qui affiche differente infos de ma base de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales