Listage fichier par pagination

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Listage fichier par pagination

Re: Listage fichier par pagination

par Spols » 09 déc. 2015, 17:36

Donc utilise cette variable là plutot que opendir et et readdir
tu parcours ce tableau là de $debut à $debut + $nbimages (avec un for)
et tu affiche ces fichiers là.

Re: Listage fichier par pagination

par SamSam51 » 09 déc. 2015, 17:01

je l'ulise deja dans le script,

$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);

$combien_d_images_sur_le_serveur est count de $images_sur_le_serveur qui est lui le glob de uploads/audio/club/".$_GET["id"]."/*.mp3 ;-)

mais j'ai remarquer que le code est vraiment fiable a partir de 2 fichier dans le dossier surement du au ".." et "." qui son pris dans le count des fichiers

Re: Listage fichier par pagination

par Spols » 09 déc. 2015, 16:04

Pourquoi n'utilise tu pas le résultat de ta fonction glob $images_sur_le_serveur
D'après http://php.net/glob elle te retourne la liste des fichiers que tu désire non ?

Re: Listage fichier par pagination

par SamSam51 » 09 déc. 2015, 15:54

Merci pour ta réponce,

mais impossible il me liste bien mais fichier mais alors n'utilise plus la variable $nbimages


J'ai lu trop vite, mais je plussoie ton $j++ doit être inclus dans ta condition pour compter les images affichées et non pas les images parcourue par ta boucle et éventuellement omise par ta condition. Du coup le début ne pourra pas être calculé de cette manière.

Tout bien réfléchi, tu ferai mieux d'exclure tes lignes dans ta boucle précédente, celle qui rempli ton tableau $fichier

Re: Listage fichier par pagination

par Spols » 09 déc. 2015, 14:08

J'ai lu trop vite, mais je plussoie ton $j++ doit être inclus dans ta condition pour compter les images affichées et non pas les images parcourue par ta boucle et éventuellement omise par ta condition. Du coup le début ne pourra pas être calculé de cette manière.

Tout bien réfléchi, tu ferai mieux d'exclure tes lignes dans ta boucle précédente, celle qui rempli ton tableau $fichier

Re: Listage fichier par pagination

par SamSam51 » 09 déc. 2015, 13:41

Bonjour et merci pour ta réponse.

les variable $i++; & $j++; ne sont pas les même i et j ;-)

pour l'inclure dans la condition elle n'est pas pris en compte.

pour mettre en session je pense que d’abord je devrais régler se bug puis oui ;-)
<?php

// On indique au script ou se trouve les images a lister par rapport a l emplacement de ce script
$dir = opendir("uploads/audio/club/".$_GET["id"]."/");
// remplacer 10 par le nombre d'images par page souhaité
$nbimages = 5;  
// On donne le nom du dossier ou sont présente les images par rapport au script en précisant l extension des fichier à lister
$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
// On compte le nombre d image
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);  
// On déclare la pagination
$pagei = isset($_GET['pagei']) ? intval($_GET['pagei']) : 1;
if ($_GET['pagei'] == "") { $_GET['pagei'] = 1; }
$debut = ($_GET['pagei'] - 1)  * $nbimages;
$i = $debut;
$j = 1;
 
     while ($Fichier = readdir($dir))
     {
     $files[] = $Fichier;
 
     }
 
     while ($i >= $debut and $j <= $nbimages)
     {
         if ( $files[$i] != ".." && $files[$i] != "." && $files[$i] != "" && ereg("(.mp3)",$files[$i]) )
         {


      	  echo "<tr>";
           echo "<td><div style=\"text-align: left\"><a href='uploads/audio/club/".$_GET["id"]."/'.$files[$i].''>";
           echo $files[$i];           
           echo '</a></div></td>';
           echo "<tr>";   
     
}
   $i++;
   $j++;
 
     }
 
 echo ''; 
 
 
 
?>
																
</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
									</tr>
								</tfoot>
							</table>
<?
echo '<br><br><p align="center" >';
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////Pagination des résultats/////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    $derniere_page = ceil($combien_d_images_sur_le_serveur / $nbimages);
    if ($pagei > 1) {
        echo '<a  href="?page=club-sets&id='.$_GET["id"].'" ><span>Début</span></a>&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei - 1) . '" ><span>Précédent</span></a>';
    }
 
// MAX_NB_PAGE est égal au nombre de lien vers les pages a afficher au maximum (ex: pour 10 pages a afficher il y aura <<<< - 1 - 2 - 3 - 4 - 5 - 6 - >>>>)
define('MAX_NB_PAGES', 5); // Nombre maximal de pages apparaissant pour la navigation    
for ($i = max(1, min(max($pagei - MAX_NB_PAGES / 2, 1), $derniere_page - MAX_NB_PAGES)), $j = 0; $j <= MAX_NB_PAGES && $i <= $derniere_page; $i++, $j++) {
 
 if ($i == $pagei) {
        if ($pagei > 1) {echo '&nbsp;&nbsp;'; }
            echo '<span >&nbsp;&nbsp;' . $i . '&nbsp;&nbsp;</span>';
        } else {
            echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . $i . '"><span>' . $i . '</span></a>';
        }
    }
    if ($pagei < $derniere_page) {
        echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei + 1) . '" ><span>Suivant</span></a>&nbsp;&nbsp;<a  href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($derniere_page) . '" ><span >Fin</span></a>';
    }
 
 
    echo '</p>';
 
     closedir($dir);
?>

Re: Listage fichier par pagination

par Spols » 09 déc. 2015, 12:29

hello,

pourquoi 2 fois $j++; ?
Je pense que tu devrais le mettre dans ta condition et non pas après. car pour le moment il compte les ligne non affichée comme .. et .

Sinon je te propose de mettre en place un cache, à chaque affichage d'une page il y a une lecture de tout le dossier, donc une lourde charge pour ton serveur. Tu peux par exemple sauver ton tableaux $Fichier en session

Pourrais tu utiliser la balise
 pour ton code, celui-ci sera beaucoup plus lisible

Listage fichier par pagination

par SamSam51 » 09 déc. 2015, 12:12

je cherche a lister des fichier d'un répertoire avec une pagination.

le code suivant fonctionne au niveau pagination mais quand je dit par exemple 5 maximum par page et bien j'en n'ai 3 si je mets 4 et bien je n'ai pas 2 mais 5 enfin rien de normal ....


<?
// On indique au script ou se trouve les images a lister par rapport a l emplacement de ce script
$dir = opendir("uploads/audio/club/".$_GET["id"]."/");
// remplacer 10 par le nombre d'images par page souhaité
$nbimages = 6;  
// On donne le nom du dossier ou sont présente les images par rapport au script en précisant l extension des fichier à lister
$images_sur_le_serveur = glob("uploads/audio/club/".$_GET["id"]."/*.mp3");
// On compte le nombre d image
$combien_d_images_sur_le_serveur = count($images_sur_le_serveur);  
// On déclare la pagination
$pagei = isset($_GET['pagei']) ? intval($_GET['pagei']) : 1;
if ($_GET['pagei'] == "") { $_GET['pagei'] = 1; }
$debut = ($_GET['pagei'] - 1)  * $nbimages;
$i = $debut;
$j = 1;
 
     while ($Fichier = readdir($dir))
     {
     $files[] = $Fichier;
 
     }
 
     while ($i >= $debut and $j <= $nbimages)
     {
         if ( $files[$i] != ".." && $files[$i] != "." && $files[$i] != "" && ereg("(.mp3)",$files[$i]) )
         {
 

      	  echo "<tr>";
           echo "<td><div style=\"text-align: left\"><a href='uploads/audio/club/".$_GET["id"]."/'.$files[$i].''>";
           echo $files[$i];           
           echo '</a></div></td>';
           echo "<tr>"; 
}
     $i++;
     $j++;
 
     }
 $derniere_page = ceil($combien_d_images_sur_le_serveur / $nbimages);
    if ($pagei > 1) {
        echo '<a  href="?page=club-sets&id='.$_GET["id"].'" ><span>Début</span></a>&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei - 1) . '" ><span>Précédent</span></a>';
    }
 
// MAX_NB_PAGE est égal au nombre de lien vers les pages a afficher au maximum (ex: pour 10 pages a afficher il y aura <<<< - 1 - 2 - 3 - 4 - 5 - 6 - >>>>)
define('MAX_NB_PAGES', 5); // Nombre maximal de pages apparaissant pour la navigation    
for ($i = max(1, min(max($pagei - MAX_NB_PAGES / 2, 1), $derniere_page - MAX_NB_PAGES)), $j = 0; $j <= MAX_NB_PAGES && $i <= $derniere_page; $i++, $j++) {
 
 if ($i == $pagei) {
        if ($pagei > 1) {echo '&nbsp;&nbsp;'; }
            echo '<span >&nbsp;&nbsp;' . $i . '&nbsp;&nbsp;</span>';
        } else {
            echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . $i . '"><span>' . $i . '</span></a>';
        }
    }
    if ($pagei < $derniere_page) {
        echo '&nbsp;&nbsp;<a href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($pagei + 1) . '" ><span>Suivant</span></a>&nbsp;&nbsp;<a  href="?page=club-sets&id='.$_GET["id"].'&pagei=' . ($derniere_page) . '" ><span >Fin</span></a>';
    }
 
 
    echo '</p>';
 
     closedir($dir);
?>



Merci d'avance pour votre aide Smiley cligne