Affiché sur un tableau avec pagination et base de données

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 185 fois - Téléchargée 15 fois

Contenu du snippet

afficher les élément d'une base de donnée dans un tableau (genre galerie photo) avec une pagination de type google

Source / Exemple :


<? 
include('sql/connexion.php');
?>

<body>

<?php
// $NbreData : le nombre de données à afficher
// $NbrCol : le nombre de colonnes
// $NbrLigne : calcul automatique a la FIN
// -------------------------------------------------------
// (exemple)
$NbrCol = 2;
// requete
// Paramétrage de la requête (ne pas modifier le nom des variable)
$table = "music"; // Table à sélectionner dans la base
$champ = "id";
$sql = "SELECT * FROM $table ORDER BY date Desc";  // Requête initiale (à compléter si nécessaire) 
$parpage = 4; // Nombre d'enregistrements par page à afficher

//==============================================================================
// Déclaration et initialisation des variables (ici ne rien modifier)
//==============================================================================

// On définit le suffixe du lien url qui affichera les pages
// $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
$url = $_SERVER['PHP_SELF']."?limit=";
$total = mysql_query($sql); // Résultat total de la requête $sql
$nblignes = mysql_num_rows($total); // Nbre total d'enregistrements
// On calcule le nombre de pages à afficher en arrondissant
// le résultat au nombre supérieur grâce à la fonction ceil()

$nbpages = ceil($nblignes/$parpage);

//==============================================================================
// Exemple d'affichage HTML
//============================================================================== 
// On teste en affichant la valeur des variables (facultatif)
echo "<p>La table <b>".$table."</b> compte ".$nblignes." <b>".$champ."</b>.";
echo "<br />\n"."On affiche <b>".$parpage." enregistrements</b> par page, ";
echo "soit un total de <b>".$nbpages." pages</b>.</p>\n"; 

$result = validlimit($nblignes,$parpage,$sql);

$NbrLigne = 0;
if ($nblignes != 0) {
$j = 1;
echo '<table border="1">';
while ($val = mysql_fetch_array($result)) {
   if ($j%$NbrCol == 1) {
      $NbrLigne++;
      echo "<tr>";
      $fintr = 0;
   }
   echo '<td>'; 
    // ------------------------------------------
    // AFFICHAGE des DONNEES de la fiche
?>	   

	
   
 <?php echo $val['genre'];?>
   <br>
<a href="<?php echo $val['lien'];?>" target="_blank"><img src="<?php echo $val['img'];?>" alt="" /></a>
 
<?php 
    // ------------------------------------------
   echo '</td>';
   if ($j%$NbrCol == 0) {
      echo "</tr>"; 
      $fintr = 1;
   }
   $j++;

}
if ($fintr!=1) { echo '</tr>'; }
echo '</table>';
} else {
echo 'pas de données à afficher';
}
?>

<?php
// Menu de pagination que l'on place après la requête
echo "<div class='pagination'>";
echo pagination($url,$parpage,$nblignes,$nbpages);
echo "</div>";
mysql_free_result($result); // Libère le résultat de la mémoire
//==============================================================================
// Fonctions à copier de préférence dans un fichier 'include/fonctions.inc.php'
//==============================================================================
function pagination($url,$parpage,$nblignes,$nbpages)
{
// On crée le code html pour la pagination
$html = precedent($url,$parpage,$nblignes); // On crée le lien precedent
// On vérifie que l'on a plus d'une page à afficher
if ($nbpages > 1) {
// On boucle sur les numéros de pages à afficher
for ($i = 0 ; $i < $nbpages ; ++$i) {
$limit = $i * $parpage; // On calcule le début de la valeur 'limit'
$limit = $limit.",".$parpage; // On fait une concaténation avec $parpage
// On affiche les liens des numéros de pages
$html .= "<a href=".$url.$limit.">".($i + 1)."</a> | " ;
}
}
// Si l'on a qu'une page on affiche rien
else {
$html .= "";
}
$html .= suivant($url,$parpage,$nblignes); // On crée le lien suivant
// On retourne le code html
return $html;
}
function validlimit($nblignes,$parpage,$sql)
{
// On vérifie l'existence de la variable $_GET['limit']
// $limit correspond à la clause LIMIT que l'on ajoute à la requête $sql
if (isset($_GET['limit'])) {
$pointer = split('[,]', $_GET['limit']); // On scinde $_GET['limit'] en 2
$debut = $pointer[0];
$fin = $pointer[1];
// On vérifie la conformité de la variable $_GET['limit']
if (($debut >= 0) && ($debut < $nblignes) && ($fin == $parpage)) {
// Si $_GET['limit'] est valide on lance la requête pour afficher la page
$limit = $_GET['limit']; // On récupère la valeur 'limit' passée par url
$sql .= " LIMIT ".$limit.";"; // On ajoute $limit à la requête $sql
$result = mysql_query($sql); // Nouveau résultat de la requête
}
// Sinon on affiche la première page
else {
$sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
$result = mysql_query($sql); // Nouveau résultat de la requête
}
}
// Si la valeur 'limit' n'est pas connue, on affiche la première page
else {
$sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
$result = mysql_query($sql); // Nouveau résultat de la requête
}
// On retourne le résultat de la requête
return $result;
}
function precedent($url,$parpage,$nblignes)
{
// On vérifie qu'il y a au moins 2 pages à afficher
if ($nblignes > $parpage) {
// On vérifie l'existence de la variable $_GET['limit']
if (isset($_GET['limit'])) {
// On scinde la variable 'limit' en utilisant la virgule comme séparateur
$pointer = split('[,]', $_GET['limit']);
// On récupère le nombre avant la virgule et on soustrait la valeur $parpage
$pointer = $pointer[0]-$parpage;
// Si on atteint la première page, pas besoin de lien 'Précédent'
if ($pointer < 0) {
$precedent = "";
}
// Sinon on affiche le lien avec l'url de la page précédente
else {
$limit = "$pointer,$parpage";
$precedent = "<a href=".$url.$limit."><</a> | ";
}
}
else {
$precedent = ""; // On est à la première page, pas besoin de lien 'Précédent'
}
}
else {
$precedent = ""; // On a qu'une page, pas besoin de lien 'Précédent'
}
return $precedent;
}
function suivant($url,$parpage,$nblignes)
{
// On vérifie qu'il y a au moins 2 pages à afficher
if ($nblignes > $parpage) {
// On vérifie l'existence de la variable $_GET['limit']
if (isset($_GET['limit'])) {
// On scinde la variable 'limit' en utilisant la virgule comme séparateur
$pointer = split('[,]', $_GET['limit']);
// On récupère le nombre avant la virgule auquel on ajoute la valeur $parpage
$pointer = $pointer[0] + $parpage;
// Si on atteint la dernière page, pas besoin de lien 'Suivant'
if ($pointer >= $nblignes) {
$suivant = "";
}
// Sinon on affiche le lien avec l'url de la page suivante
else {
$limit = "$pointer,$parpage";
$suivant = "<a class='pagination' href=".$url.$limit.">></a>";
}
}
// Si pas de valeur 'limit' on affiche le lien de la deuxième page
if (@$_GET['limit']== false) {
$suivant = "<a href=".$url.$parpage.",".$parpage.">></a>";
}
}
else {
$suivant = ""; // On a qu'une page, pas besoin de lien 'Suivant'
}
return $suivant;
}
// Fin du script
?>

A voir également

Ajouter un commentaire

Commentaire

inwebo
Messages postés
381
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
23 octobre 2014

Bonjour,

Une remarque en survolant le code.

- Code spaghetti, n'est pas réutilisable, ou comment coder une fois pour plusieurs réutilisations. Pour l'instant nous sommes obligés de repasser sur le code à chaque fois.

- N'est pas configurable, si je ne veux pas des classes CSS, ou si je veux mettre des id pour chaque éléments ?

L'idéal est un passage à la P.O.O.

Une classe (ou plusieurs à voir lors de la conception), pourrait avoir une collection d'objets, un résultat de requêtes SQL, un tableau, JSON ou autre en paramètre. Pour un retour des objets (etc..) concernés par la page courante. Son métier en gros c'est de découper des collections en collections plus petites.

Vous avez déjà la plupart des attributs et méthodes dans ce code. Ne surtout pas se préoccuper de l'affichage dans la classe ! C'est ne clairement pas son travail.

Mes deux centimes.

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.