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

Soyez le premier à donner votre avis sur cette source.

Vue 17 068 fois - Téléchargée 1 236 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

djmmix
Messages postés
152
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
29 avril 2009
-
salut,
je vois pas trop ce que cette source apporte mais bon.

ici: 87.$sql="insert into contact (`nom`,`prenom`,`adresse`,`phone`,`email`) values('$nom','$prenom','$adresse','$tel','$email')"; dans values test variable précèdent les avec la fonction mysql_real_escape_string() pour evité les injections SQL et pourquoi déclaré des variables alors que tu aurai pu mettre directement dans values : values(mysql_real_escape_string($_POST['nom']), etc...)
plus rapide et moins de traitement php (même si il est infime)^^

ha et uniformise tes Minuscule/Majuscule pas genre :"SUIVANT précédent"

@++
karimmass
Messages postés
9
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
25 juin 2009
-
merci bien DJMMIX pour tes conseille
neo1602brice
Messages postés
78
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
10 juillet 2009
-
Bonjour,

Je ne trouve pas ta solution très intéressante pour une raison particulière:
1. A chaque changememt de page, tu refais une requête, ce qui au final pourrait entrainer une surchage au niveau de ton serveur mysql...

Une solution qui pourrait être plus pratique, serait que tu fasses une seule fois ta requête, que tu stockes le résultat par exemple en session(préfable) ou en global(déprécié). Ensuite tu paramètres une variable pour afficher le nombre de résultat par page et à chaque changement de pages, tu parcours uniquement ton tableau session ou globales en prenant en compte le paramètre pour le nombre de résultat..

Cordialement,

Néo1602Brice
karimmass
Messages postés
9
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
25 juin 2009
-
merci encore pour cette conseille
je vais essayer d'y appiliquer
karimmass
Messages postés
9
Date d'inscription
mardi 1 août 2006
Statut
Membre
Dernière intervention
25 juin 2009
-
en faites comment declaré une variable session comme étant tableau

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.