le 15/11/2010 à 15:07
A propos de "Comment faire un affichage page par page en PHP"
bonjour, ce sujet concerne directement le Topic suivant :
http://www.lephpfacile.com/howto/6-comment-faire-un-affichage-page-par-page-en-php
Voila, j'ai souahité reprendre ce code, mais IE 6 me reprends la totalité de mon tableau, ne m'affiche aucune pages ( j'ai juste un chiffre 1) et IE 6 me lance les erreurs suivantes :
PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 37 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 101 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 101 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 102
je vous livre cidessou le code que j'ai essayé d'adapter librement.
les lignes 37,101 et 102 sont les suivantes :
37:
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
101 à 105 :
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
Voila, vu que je ne suis pas l'auteur de ce code, je n'arrive pas à en comprendre toute ses subtilitées, y compris les erreurs que me sort IE6.
Merci pour votre aide :)
http://www.lephpfacile.com/howto/6-comment-faire-un-affichage-page-par-page-en-php
Voila, j'ai souahité reprendre ce code, mais IE 6 me reprends la totalité de mon tableau, ne m'affiche aucune pages ( j'ai juste un chiffre 1) et IE 6 me lance les erreurs suivantes :
PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 37 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 101 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 101 PHP Notice: Object of class PDOStatement could not be converted to int in C:\www\Unmanage\connect.inc.php on line 102
je vous livre cidessou le code que j'ai essayé d'adapter librement.
<?php
// On trie les résultats pour les afficher par 50 dans des pages différentes.
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_dans_la_barre) {
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}
// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else {
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A> ';
}
else {
$lien='';
}
$barre .= $lien;
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= $cpt;
}
else {
$barre .= $cpt.' - ';
}
}
else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;
return $barre;
}
// fonction de préprod ?
//localhost-préproduction : serveur sur lequel on est
//$serverLchost= "*****";
//$bdLchost="******";
//$userIDLchost ="****";
//$passwordLchost="*****";
//NSM test DB : serveur sur lequel se situe la base de donnée NSM R11 préprod
if(!isset($bdd)){
$bdd=NULL;
}
if(!isset($attribute)){
$attribute=NULL;
}
//$serverNSM="******";
//$bdNSM="NSMADMIN"; // user admin NSM base de donnée compte admin de l'enveloppe/instance
//$userIDNSM ="*****"; // User admin NSM compte admin de la base de donnée
//$passwordNSM="******"; // Mdp
// On se connecte à SQLServer, et l'on trie les résultats par 50 suivant la page demandée
//if(page==1){
$req = "SELECT * FROM Unmanage_Table ";
// }elseif (page==2){
// $req = "SELECT * FROM Unmanage_Table LIMIT 50,100";
// }elseif (page==3){
// $req = "SELECT * FROM Unmanage_Table LIMIT 100, 150";
// }elseif (page==4){
// $req = "SELECT * FROM Unmanage_Table LIMIT 150, 200";
// }elseif (page==5){
// $req = "SELECT * FROM Unmanage_Table LIMIT 200, 250";
// }elseif (page==6){
// $req = "SELECT * FROM Unmanage_Table LIMIT 250, 300";
// }elseif (page==7){
// $req = "SELECT * FROM Unmanage_Table LIMIT 300, 350";
// }elseif (page==8){
// $req = "SELECT * FROM Unmanage_Table LIMIT 350, 400";
// }elseif (page==9){
// $req = "SELECT * FROM Unmanage_Table LIMIT 400, 450";
// }elseif (page==10){
// $req = "SELECT * FROM Unmanage_Table LIMIT 450, 500";
// }elseif (page==11){
// $req = "SELECT * FROM Unmanage_Table LIMIT 500, 550";
// }elseif (page==12){
// $req = "SELECT * FROM Unmanage_Table LIMIT 550, 600";
// }elseif (page==13){
// $req = "SELECT * FROM Unmanage_Table LIMIT 600, 650";
// }elseif (page==14){
// $req = "SELECT * FROM Unmanage_Table LIMIT 650, 700";
// }elseif (page==15){
// $req = "SELECT * FROM Unmanage_Table LIMIT 700, 750";
// }
// On se connecte à SQLServer
try {
$bdd = new PDO('mssql:host=DVATFSUP01\SDVSUP1;dbname=Unmanage', 'sa', 'catherin1');
$bdd-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// on exécute la requête
$reponse = $bdd->query($req);
// on récupère le nombre d'éléments à afficher
$nb_total = $bdd->query("SELECT O.name AS Table_Name, I.rows AS Rows_Count FROM sys.sysobjects AS O INNER JOIN sys.sysindexes AS I ON O.id = I.id WHERE (O.xtype = 'U')");
} catch(PDOException $pdoE) {
echo '<br>ERREUR PDO:<br>'.$pdoE -> getMessage();
} catch(Exception $e) {
echo '<br>AUTRE ERREUR:<br>'.$e -> getMessage();
}
// on teste si ce nombre de vaut pas 0
?>
<div id="body" >
<table id="myTable" class="tablesorter" >
<thead>
<tr>
<th><strong>Nom du serveur</strong></th>
<th>Categorie de l\'incident</th>
<th>Duree de l'incident</th>
<th>Numéro d'incident</th>
<th>Commentaire</th>
<th>Utilisateur</th>
<th>Effectué le</th>
<th>Statut</th>
</tr>
</thead>
<?php
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 1;
// Préparation de la requête avec le LIMIT
$sql = "SELECT * FROM (
SELECT TOP ".$_GET['debut']."-- actually bottom five of the top fifteen (seek 10)
*
FROM
(
SELECT TOP ".$nb_affichage_par_page."
*
FROM
Unmanage_Table
ORDER BY
date
) AS T -- why is this necessary?
ORDER BY
T.date DESC
) AS T -- why is this necessary?
ORDER BY T.date -- fix order;";
// on exécute la requête
try {
$req = $bdd->query($sql);
} catch(PDOException $pdoE) {
echo '<br>ERREUR PDO:<br>'.$pdoE -> getMessage();
} catch(Exception $e) {
echo '<br>AUTRE ERREUR:<br>'.$e -> getMessage();
}
// on va scanner tous les tuples un par un
while ($donnees = $reponse->fetch()) {
// on affiches les résultats dans la <table>
echo "<tr>";
echo "<tr>".PHP_EOL;
echo '<th>'.$donnees['server_id'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['cat'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['duree'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['incident_id'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['motif'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['utilisateur_id'].'</th>'.PHP_EOL;
echo '<th>'.$donnees['date'].' à telle heure </th>'.PHP_EOL;
echo '<th>'.$donnees['statut'].'</th>'.PHP_EOL;
echo "</tr>".PHP_EOL; //pour la lisibilite du source généré ;-)
}
// on libère l'espace mémoire alloué pour cette requête
$reponse->closeCursor();
// on libère l'espace mémoire alloué pour cette requête
// mysql_free_result ($req);
echo '</table><br />';
// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
// on libère l'espace mémoire alloué pour cette requête
//mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
//mysql_close ();
echo '</table><br />'; ?>
les lignes 37,101 et 102 sont les suivantes :
37:
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
101 à 105 :
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
Voila, vu que je ne suis pas l'auteur de ce code, je n'arrive pas à en comprendre toute ses subtilitées, y compris les erreurs que me sort IE6.
Merci pour votre aide :)