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

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

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.