Cette fonction permet d'afficher en PHP des données provenant d'une base de données MySQL avec un système de pagination dynamique.
l’accès à la base de données est réalisée grâce à l'extension PDO, il est donc à noter qu'il faut activer l'extension sur votre serveur Apache (dé-commenter la ligne extension=php_pdo_mysql.dll dans le fichier php.ini), ou procéder aux modifications nécessaires dans l’écriture des parties du codes relatives à la connexion à la base de données et aux préparations des requêtes.
La classe de connexion:
class Connexion extends PDO {
private static $_instance;
/* Constructeur : héritage public obligatoire par héritage de PDO */
public function __construct( ) {
}
// End of Connexion::__construct() */
/* Singleton */
public static function getInstance() {
if (!isset(self::$_instance)) {
try {
self::$_instance = new PDO("mysql:host=your-hostname;dbname=your-dbname" , "your-username" , "your-password");
} catch (PDOException $e) {
echo $e;
die ('SQL Error');
}
}
return self::$_instance;
}
// End of Connexion::getInstance() */
}
La Méthode de génération et d'affichage de la table de données avec le système de pagination:
class gui {
.
.
.
.
/**
* Méthode qui permet de dessiner à partir d une requête, le tableau de données correspondant avec un système de pagination.
* @param $query : chaine de cacaractère contenant la requête avec la partie statique de la clause where
* @param $number_of_rows_per_page : nombre de lignes à afficher par page
* @param $page_uri : uri de la page pour le rafraichissement selon le n° de page sélectionnée
* @param $paramsArray : tableu de paires clé=>caleur pour former la partie dynamique de la clause where
*/
public static function createTable($query , $number_of_rows_per_page , $page_uri , $paramsArray=null){
// Préparation de la requête selon le tableau de paramètres.
if(!empty($paramsArray)){
// la chaine ne contient pas déjà une clause where
if (!stripos($query , 'where'))
$query = $query.' where 1=1 ';
// Parcours du tableau des paramètres et construction de la requête complète
foreach($paramsArray as $paramsArray_key=>$paramsArray_value){
$query = $query.' and '.$paramsArray_key.' = :'.$paramsArray_key;
}
}
// Préparation à la création du système de pagination
// Compter le nombre de lignes à extraire
$query = strtolower($query);
$query_array = explode("from",$query);
$query_for_number_of_rows = 'select count(*) from '.$query_array[1];
$connexion = Connexion::getInstance();
$requete = $connexion->prepare($query_for_number_of_rows);
foreach($paramsArray as $paramsArray_key=>$paramsArray_value){
$requete->bindValue(':'.$paramsArray_key,$paramsArray_value);
}
if($requete->execute()){
$donnes_number_of_rows = $requete->fetch();
$total_number_of_rows = $donnes_number_of_rows[0];
}
// Nombre de pages
$number_of_pages = ceil($total_number_of_rows/$number_of_rows_per_page);
// On cherche dans quel page on est
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe on affiche la page correspondante
{
$actual_page=intval($_GET['page']);
if($actual_page > $number_of_pages) // Si la valeur de $actual_page (le numéro de la page) est plus grande que $numebr_of_pages on affiche la dernière page
{
$actual_page = $number_of_pages;
}
}
else // Sinon
{
$actual_page = 1; // La page actuelle est la n°1
}
// On calcul la première entrée à lire
$first_row_in_page = ($actual_page-1)*$number_of_rows_per_page;
// Récupération des enregistrements à afficher dans la page actuelle.
$query = $query.' LIMIT '.$first_row_in_page.' , '.$number_of_rows_per_page;
$connexion = Connexion::getInstance();
$requete = $connexion->prepare($query);
foreach($paramsArray as $paramsArray_key=>$paramsArray_value){
$requete->bindValue(':'.$paramsArray_key,$paramsArray_value);
}
if($requete->execute())
{
$donnees = $requete->fetchAll();
// Formation des clés du tableau à afficher : liste des champs sélectionnées dans la requete.
$first_row_donnees = $donnees[0];
foreach($first_row_donnees as $row_cle=>$row_valeur)
{
if(gettype($row_cle)!='integer')
{
$tab_keys[] = $row_cle;
}
}
foreach ($donnees as $row_donnees){
foreach ($tab_keys as $tab_keys_value){
//echo $tab_keys_value.'<br/>';
$tab_values_row[$tab_keys_value] = $row_donnees[$tab_keys_value];
}
$tab_values[] = $tab_values_row;
}
// Dessinser le tableau HTML
echo '<table>';
echo '<thead>';
echo '<tr>';
foreach ($tab_keys as $tab_keys_value){
echo '<th>'.$tab_keys_value.'</th>';
}
echo '</tr>';
echo '</thead>';
echo '<tbody>';
foreach ($tab_values as $tab_values_row){
echo '<tr>';
foreach ($tab_values_row as $tab_values_row_value){
echo '<td>'.$tab_values_row_value.'</td>';
}
echo '<tr>';
}
echo '</tbody>';
echo '</table>';
// Afficher la liste des pages.
echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
for($i=1; $i<=$number_of_pages; $i++) //On fait notre boucle
{
//On va faire notre condition
if($i==$actual_page) //Si il s'agit de la page actuelle...
{
echo ' [ '.$i.' ] ';
}
else //Sinon...
{
echo ' <a href="'.$page_uri.'?page='.$i.'">'.$i.'</a> ';
}
}
echo '</p>';
}
}
.
.
.
}
Exemple d'appel:
gui::createTable("
select cv.cv_id , cv.cv_date_creation , cv.cv_titre , langue.lang_lib
from cv cv , langue langue where langue.lang_id = cv.langue_lang_id
"
,
4
,
"/cv/afficher_cvs"
,
array(
'candidat_compte_cpt_id' => '2',
'cv_langue_maternelle' => '5'
)
);