Afficher le résultat d'une requête sql sur plusieurs page

Soyez le premier à donner votre avis sur cette source.

Vue 17 443 fois - Téléchargée 1 276 fois

Description

ce premier petit script que je distribues permet d'afficher le résultat d'une requête sql sur plusieurs pages selon le nombre d'enregistrements que vous choisissez par page, on basculant entre les pages par les deux lien "Suivant" et "précedent"

1/je sais que estétiquement c'est pas jolie mais l'essentiel du script est bien fonctionnelle
vous pouvez mettre on place un tableau pour afficher dedans les enregistrement
comme vous pouvez changer les liens suivant et précédent par des bouton

2/la base sur la quel j'ai travaillé contient 6 champs
id / nom / prenom / adresse / phone / email

3/ le code source contient le code de la base / page index.php pour remplir la page / page liste.php pour afficher les enregistrement

Source / Exemple :


<b> *** code de la base ***</b>

- Base de données: `agenda`
--

-- --------------------------------------------------------

--
-- Structure de la table `contact`
--

CREATE TABLE IF NOT EXISTS `contact` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `nom` varchar(20) NOT NULL,
  `prenom` varchar(20) NOT NULL,
  `adresse` varchar(100) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `email` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

<b>*** code index.php ***</b> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<p><a href="liste.php?page=1">LISTE</a></p>
<table width="782" border="0" cellpadding="0" cellspacing="4">
  <form name="fcontact" method="post" action="index.php">
  <tr>
    <td width="267"><div align="right">Nom :</div></td>
    <td width="503"><label>
      <input type="text" name="nom" id="textfield" />
    </label></td>
  </tr>
  <tr>
    <td><div align="right">Prenom :</div></td>
    <td><label>
      <input type="text" name="prenom" id="textfield2" />
    </label></td>
  </tr>
  <tr>
    <td><div align="right">Adresse : </div></td>
    <td><label>
      <input type="text" name="adresse" id="textfield3" />
    </label></td>
  </tr>
  <tr>
    <td><div align="right">Tel :</div></td>
    <td><label>
      <input type="text" name="tel" id="textfield4" />
    </label></td>
  </tr>
  <tr>
    <td><div align="right">Email :</div></td>
    <td><label>
      <input type="text" name="email" id="textfield5" />
    </label></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><label>
      <input type="submit" name="save" id="button" value="Envoyer" />
    </label></td>
  </tr>
  </form>
</table>
<p>&nbsp; </p>
<?php
if (isset($_POST['save']))
{
mysql_connect('localhost','root');
mysql_select_db('agenda');

$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$adresse=$_POST['adresse'];
$tel=$_POST['tel'];
$email=$_POST['email'];

$sql="insert into contact (`nom`,`prenom`,`adresse`,`phone`,`email`) values('$nom','$prenom','$adresse','$tel','$email')";
$req=mysql_query($sql);

}

?>
</body>
</html>

<b>*** code liste.php **** </b>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
// Afficher le résultat d'une requête sql sur plusieurs page 

//connexion au serveur puis choix de la base  
mysql_connect('localhost','root');
mysql_select_db('agenda');
//la requête que j'ai choisi va sélectionner tout le contenue de la base 
//j'exécute ici la requête sans LIMIT pour extraire le nombre total d'enregistrement 
$sql1="select * from contact";
$req1=mysql_query($sql1);
$nbtotal=mysql_num_rows($req1);
//$limite est le nb d'enregistrement par page , 
$limite=3;
$page=$_GET['page']; //$_get['page'] est une variable qui passera dans le lien , elle commence à 1 donc pour accéder par exemple à la page liste.php il faut ajouter au lien ?page=1
$debut=($page-1)*$limite; // $debut à partir de quel enregistrement commence la selection dans notre cas si $page=1 $debut=0 / si $page=2 $debut=(2-1)*3 = 3
$sql="select * from contact LIMIT $debut,$limite"; //requête pour sélectionner les enregistrements par lot on commençant par début 
$req=mysql_query($sql); // exécution de la requête

while($data=mysql_fetch_array($req)) // parcourir le résultat de la requête
{
echo $data['nom']." ".$data['prenom']." ".$data['adresse']." ".$data['phone']." ".$data['email']."</br></br>"; //affichage des enregistrements
}
$nbpage=$nbtotal/$limite; //calcule de nombre de page 

if (($page==1) && ($nbpage > 1)) // si on est à la première page et que le nb de pages pour afficher les enregistrement est supérieure à 1 on affiche seulement le lien "suivant >>" qui peut être un bouton
{
$next=$page+1;
echo "<a href='liste.php?page=$next'>SUIVANT >></a>";
$_SESSION['pageencour']=2;
}
else 
{
  if ($page < $nbpage ) // si $page est inférieur au nb totale des page donc on affiche suivant>> et <<precédent
  {
  $prev=$page-1;
  $next=$page+1;
  echo "<a href='liste.php?page=$prev'><< précédent</a>  ";
  echo " <a href='liste.php?page=$next'>SUIVANT >></a>";
  }
  else
  {
   if (($page >= $nbpage) && ($nbpage > 1))// si on n'est à la dernière page et que le nb totale de page est sup à  on affiche seulement <<précédent 
   {
   $prev=$page-1;
  echo "<a href='liste.php?page=$prev'><< precedent </a>";
   }
  }
}
?>
</body>
</html>

Conclusion :


j'attends vos critères ainsi que vos conseilles

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
25 juillet 2013

Hello tout le monde.
Super script !
Je cherchais un truc comme ca justement... J'ai essayé de l'adapté a mon besoin qui est d'afficher une photo à la fois (les photos sont rangées dans une table)...
J'ai plus ou moins 126 lignes de photos. J'ai essayé le script en le modifiant et tout marchait bien, à la 126eme, il affichait le lien précédent, mais pas le suivant. Ce qui est normal.
Mais petit soucis... Je voudrais seulement afficher les photos où le champs "selection"="oui" (il y en a 39/126).
J'ai donc modifier cette ligne :

$sql="select * from photos LIMIT $debut,$limite";
qui est devenue :
$sql="select * from photos WHERE selection='oui' LIMIT $debut,$limite";

Et quand je change ce code, et bien les photos s'affichent bien mais à la 39ème, le lien "suivant" reste. Alors qu'il n'y a plus de photo...
Comment faire pour que ce lien disparaisse apres la sélection. Parce que j'ai cliqué sur suivant pour voir jsuqu'où il s'affichait, et arrivé à la 126eme, le lien disparait enfin...
Donc, avec ou sans la clause WHERE, le lien suivant s'enlève seulement à la page 126...
Comment puis-je faire..?

Je vous remercie,

Eric.
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

douggyfresh tu ne peux pas stocker des ressources en session et il serait totalement inutile de la cloner une ressource est une référence vers une ressource externe, généralement un socket de connexion tu ne peux pas cloner ce genre de données... tu peux par contre utiliser, comme la dit Master Nico, le cache requête de mysql et la clause LIMIT ira à ravir à ce type de requête... de toute façon il vaut mieux attendre 5s à chaque page plutôt que 30s à la première page... .. .

select * from

Vire le joker et met le nom des champs tu gagnera une peu de temps d'execution... .. .

Pour le reste post sur le forum si tu veux de l'aide... .. .

@ tchaOo°
Messages postés
9
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
25 juin 2009

C BIEN COMPRIS Mr MASTERNICO
Messages postés
494
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

Ma réaction fait suite à plusieurs constatations:
1)Il a été dit qu'il ne fallait pas utiliser les sessions pour stocker des tableaux MySQL. Il faut utiliser le cache des requettes au niveau du moteur. Résultat, on se retrouve avec un nouveau post qui nous montre fièrement une nouvelle aproche du problème... en utilisant les sessions.
2)Il a été dit que puisque tu débutes (ce qui en soit n'est pas un mal) il faudrait que tu mettes ta source au niveau 'debutant' et non pas 'initié'. Résultat, c'est toujours en initié.
3)Il a été dit que les modifications que tu apportes à ton script doivent être directement mises dans le source et non pas dans un post. Résultat, le code original est toujours là.
4)Il a été dit que cette section du site est réservée au code fonctionnel qui font avancer le shmilblic et non pas à ceux qui veulent proposer de nouvelles idées en pseudo code. Il y a le Forum pour ça. Résultat, Mr Haiti boy qui nous balance son code direct dans un post.

Conclusion, je ne doute pas que vous cherchiez à vous améliorer et qu'avant tout, c'est votre désir de partager avec la communauté qui vous a poussé à venir ici. Mais alors, SVP, écoutez ce qu'on vous dit...
Messages postés
9
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
25 juin 2009

Bonjour Masternico

je comprend pas ta réaction

merci d'étre un peu claire stp
en fin de compte même si tu trouve mon code nul, sache bien que j'ai commencé avec php y a seulement 3 mois , donc si je suis ici c pour connaitre mieux ce language

:):) merci en tout cas
Afficher les 31 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.