Page 1 sur 4

faire une boucle

Posté : 28 nov. 2012, 21:22
par baddevil
bonsoir,

je souhaiterai afficher le resultat de fichiers a partir d une boucle qui compte les fichiers et les affiche si ils existent

j ai en parcourant le net trouvé 2 choses mais je souhaiterai compilé les deux

j ai dabord
$nb_fichier = 0;
if($dossier = opendir('photos'));
  {
   while(false !== ($fichier = readdir($dossier)))
    {
      if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
      {
        $nb_fichier++; // On incrémente le compteur de 1
        echo '<li><img width="100" src="photos/' . $fichier . '"></li>';
      } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
 
    } // On termine la boucle
      echo '</ul><br />';
      echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
 
closedir($dossier);
 
  }
hors la cela m affiche le dossier complet mais je souhaite afficher seulement ceux qui sont dans ma variable comme ceci
$i = 1; //on définit la variable $i qui sera notre nombre que l'on incrémentera. Ici $i va commencer à 0     
      while($i < 11) 
     {  $photo='CARDIFF_BBDZ_'.$IdVO.'_'.$i.'.jpg';
           
            echo $photo.'<br />';
           $i++; 
     }
en faite ce sont des images
le $idVO c est un identifiant et le $i le numero de l image qui portera 1,2,3 ect.... selon le nombre d image par rapport a l identifiant
j espere que j ai été clair dans mon explication

Re: faire une boucle

Posté : 28 nov. 2012, 22:09
par two3d
Bonsoir,

tu aimerais récupérer seulement les photos avec un nom bien défini en fait ?

Re: faire une boucle

Posté : 28 nov. 2012, 22:34
par baddevil
oui c est bien ca

Re: faire une boucle

Posté : 28 nov. 2012, 23:56
par two3d
fait un preg_match dans ce cas
if(preg_match("#^nom_de_la_photo_([0-9]+).(jpg|png|gif)$#i",$fichier)) {
	echo '<img src="'.$fichier.'" alt="chemin incorrect" />';
} else {
	echo "Fichier non trouvé";
}
le "i" à la fin du preg_match sert à dire que même si le nom du fichier est en majuscule, c'est bon quand même:

exemple:

Nom_de_la_photo... ou nom_de_la_photo... fonctionne quand même (idem pour l'extension, Gif, gif, giF fonctionnera et te dira que cette photo existe dans le dossier)

Re: faire une boucle

Posté : 29 nov. 2012, 00:13
par baddevil
merci pour ton aide mais j ai pas bien saisi comment utlisé ton code

en faite me faudrai ce code
$i = 1; //on définit la variable $i qui sera notre nombre que l'on incrémentera. Ici $i va commencer à 0     
      while($i < 11) 
     {  $photo='CARDIFF_BBDZ_'.$IdVO.'_'.$i.'.jpg';
           
            echo $photo.'<br />';
           $i++; 
     }
mais dans le while c est pas <11 mais tant qu il en trouve dans mon dossier car $photo='CARDIFF_BBDZ_'.$IdVO.'_'.$i.'.jpg' me retourne bien les nom mais jusqu a 10 alors que y a peut etre que 3 ou 4 images

Re: faire une boucle

Posté : 29 nov. 2012, 02:08
par two3d
voila le code qui permet d'ouvrir correctement un dossier:
$nb_fichier = 0;
echo '<ul>';
if($dossier = opendir('./mondossier')) {
	while(false !== ($fichier = readdir($dossier))) {
		if(preg_match("#^nom_de_la_photo_([0-9]+).(jpg|png|gif)$#i",$fichier)) {
			$nb_fichier++; // On incrémente le compteur de 1
			echo '<li><a href="./mondossier/' . $fichier . '">' . $fichier . '</a></li>';
		} // On ferme le if (qui permet de ne pas afficher index.php, etc.)
	} // On termine la boucle
	echo '</ul><br />';
	echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
	closedir($dossier);
} else {
	echo 'Le dossier n\' a pas pu être ouvert';
}

Re: faire une boucle

Posté : 29 nov. 2012, 10:09
par baddevil
alors j ai fais ceci
$nb_fichier = 0;
 echo '<ul>';
 if($dossier = opendir('./photos')) {
         while(false !== ($fichier = readdir($dossier))) {
                 if(preg_match("#CARDIFF_BBDZ_'.$IdVO.'_([0-9]+).(jpg|png|gif)$#i",$fichier)) {
                         $nb_fichier++; // On incrémente le compteur de 1
                         echo '<li><a href="photos/' . $fichier . '">' . $fichier . '</a></li>';
                 } // On ferme le if (qui permet de ne pas afficher index.php, etc.)
         } // On termine la boucle
         echo '</ul><br />';
         echo 'Il y a <strong>' . $nb_fichier .'</strong> fichier(s) dans le dossier';
         closedir($dossier);
 } else {
         echo 'Le dossier n\' a pas pu être ouvert';
         
         
closedir($dossier);         
   }

seulement il me dit qu il y a 0 fichier dans le dossier

Re: faire une boucle

Posté : 29 nov. 2012, 14:26
par two3d
$IdVO est bien déclarée ?

Re: faire une boucle

Posté : 29 nov. 2012, 19:36
par baddevil
ben si je fais echo $IdVO ca me retourne bien le bon numero donc oui

Re: faire une boucle

Posté : 29 nov. 2012, 22:48
par two3d
Faut essayer de trouver la faille.

en dessous du commentaire: " // On ferme le if (qui permet de ne pas afficher index.php, etc.)" met:

echo $fichier."<br />";

sinon, regarde si les extensions de tes photo sont bien toutes en jpg, png ou gif (d'où le preg_match (jpg|png|gif), ce qui veut dire, soit ça |(la barre veut "ou") soit ça | soit ça etc...

Re: faire une boucle

Posté : 29 nov. 2012, 22:52
par AB
On peut faire ça en peu de lignes avec php >= 5.2
$dossier = 'photos';
$IdVO = '5';
$match = '#CARDIFF_BBDZ_'.$IdVO.'_([0-9]+).(jpg|png|gif)$#i';

$files = new RegexIterator(new DirectoryIterator($dossier),$match);
$nb_fichiers = iterator_count($files);

echo $nb_fichiers.' fichiers<br>';
foreach ($files as $value)
{
	echo '<img src="'.$dossier.'/'.$value.'"/><br>'; 
	echo $value.'<br>';
}
(code testé fonctionnel)

Re: faire une boucle

Posté : 29 nov. 2012, 23:30
par baddevil
On peut faire ça en peu de lignes avec php >= 5.2
$dossier = 'photos';
$IdVO = '5';
$match = '#CARDIFF_BBDZ_'.$IdVO.'_([0-9]+).(jpg|png|gif)$#i';

$files = new RegexIterator(new DirectoryIterator($dossier),$match);
$nb_fichiers = iterator_count($files);

echo $nb_fichiers.' fichiers<br>';
foreach ($files as $value)
{
	echo '<img src="'.$dossier.'/'.$value.'"/><br>'; 
	echo $value.'<br>';
}
(code testé fonctionnel)

merci a vous deux , AB ton code fonstionne tres bien merci beaucoup

Re: [RESOLU] faire une boucle

Posté : 30 nov. 2012, 00:17
par two3d
On peut faire ça en peu de lignes avec php >= 5.2
en effet mais je préfère la simplicité, les genre de boucle avec foreach ne sont pas mon truc, j'ai toujours réussi à coder sans à vrai dire

c'était quoi le problème alors ?

Re: [RESOLU] faire une boucle

Posté : 30 nov. 2012, 00:26
par baddevil
ben franchement je ne sais pas j ai pris de le code de AB j ai testé et ca ma retourné exactement les images selectionnées

edit; pour en revenir a ton code j ai mis le echo de $fichier et ca me retourne le dossier complet

Re: [RESOLU] faire une boucle

Posté : 30 nov. 2012, 00:45
par two3d
donc c'est le preg match qui en cause...