Page 1 sur 2
plusieurs images aleatoires
Posté : 04 juin 2010, 12:00
par moiju
Bonjour,
je suis débutant en PHP, je n'y connais rien.
Je voudrais créer une page sur laquelle des images s'afficheraient aléatoirement depuis un dossier:
*une premiere ligne piocherait dans 1 dossier "c"
*une seconde ligne dans un dossier "h"
les 2 lignes auraient 4 images chacunes.
j'ai trouvé un code que j'ai un peu modifié afin d'obtenir juste ce que je veux mais le problème est que dans la deuxieme ligne il devrait aller que dans le dossier "h" alors qu'il va également chercher dans le dossier "c", les images trouver dans ce dossier "c" ne s'affiche pas, seulement leurs noms ...
voici le code :
<?php
//On indique le dossier images
$chem_img = "./c";
//On ouvre le dossier images
$handle = opendir($chem_img);
//On parcoure chaque élément du dossier
while ($file = readdir($handle))
{
//Si les fichiers sont des images
if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))
{
$listef[] = $file;
}
}
$random_img = rand(0, count($listef)-1); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouvées.
//On affiche l'image aléatoire
echo "<img src=\"".$chem_img."/".$listef[$random_img]."\" alt=\"".$listef[$random_img]."\">";
//On ferme le dossier
closedir($handle);
?>
j'applique ce code dans des <tr> et <td> pour avoir mes lignes et mes colonnes.( je le recopie donc 4 fois par ligne, une fois par image )
Quelqu'un pourrait il me donner des pistes, que me manque t-il ?
Et seconde question : comment faire pour que chaque images ne s'affiche qu'une fois ?
J'ai évident chercher un peu partout, trouvé des choses mais pas évident...
Merci à vous
Re: plusieurs images aleatoires
Posté : 04 juin 2010, 12:31
par moiju
J'ai trouver la solution a mon premier problème, j'ai rajouté :
unset($listef)
à la fin du code quand je changeais de dossier, du coup il oublie la liste et repart sur une nouvelle.
Par contre je cherche toujours comment éviter les doublons ...
Re: plusieurs images aleatoires
Posté : 30 mai 2012, 17:28
par louyoulou
Moi aussi je cherche la réponse à ta question de doublon, si quelqu'un pourrait nous aider, ce serait bien sympa.
Merci.
Re: plusieurs images aleatoires
Posté : 30 mai 2012, 19:41
par Ryle
Pour moiju, j'ai peur que ce soit un peu tard, mais en ce qui te concerne, le plus simple serait de supprimer l'élément du tableau lorsque tu l'affiches. Comme ça, lors de l'itération suivante, tu piocheras parmi les images restantes évitant ainsi les doublons

Re: plusieurs images aleatoires
Posté : 30 mai 2012, 21:41
par dix2
salut,
tu fais un shuffle() sur ton tableau et ensuite tu prends les 4 premiers éléments
@+
dix2
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 10:58
par louyoulou
Merci pour ces réponses mais je ne pense pas être assez bonne en PHP pour savoir exactement comment faire ce que tu me dit Ryle, je pense que ta solution correspondrait tout à fait à mon problème mais je ne sais pas comment faire.
Dix2, j'ai essayé avec shuffle() mais ça ne marche pas exactement comme il faudrait, à moins que je m'y prenne mal....
Est ce que vous pouvez m'aider encore...
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 12:22
par xTG
Dix2, j'ai essayé avec shuffle() mais ça ne marche pas exactement comme il faudrait, à moins que je m'y prenne mal....
Est ce que vous pouvez m'aider encore...
Montres nous ce que tu as essayé.
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 12:33
par louyoulou
Ok alors je suis repartie autre chose rand() et qui se rapproche au plus près de ce que j'aimerais faire, mais la je n'arrive pas à gérer les doublons, toujours le même problème en fait.
En fait je souhaite faire un module de publicité verticale, qui affiche donc trois images différentes à partir d'un même dossier, comme c'est trois images doivent être indépendante le soucis c'est qu'il y a des doublons avec la technique j'ai écris plus bas, comme je vous disais au départ.
Elles doivent vraiment se trouver dans les trois div que j'ai crée plus bas dans mon code parce que dessus ces images s'affiche un prix, et un badge de réduction.
Et ce prix doit afficher le prix de l'image qu'il montre.
Il me faudrait un tableau avec une boucle qui prend une image au hasard dans le fichier vérifie qu'elle n'est pas déjà affiché, si elle est déjà afficher il en prend une autre sinon il l'affiche. Tout ça c'est bien beau mais je ne sais pas comment faire, enfin peut être, je ne sais pas trop.
<div id="bandeau_banniere_flottante" style="display: block;">
<div class="container_pub_flottante">
<div id="pub_flottante_main_container_1">
<a href="" title "" alt "">
<img src="images/<?php echo rand(1,6);?>.jpg" alt="Random Image" /></a>
</div>
<div id="pub_flottante_entete_1"></div>
<div id="pub_flottante_prix_1">
<span class="prix_pub_flottante">
<?php echo _PRIX1; echo _MONNAIE;?></span></br>
<span class="convertisseur"><?php echo _CONVERTISSEUR; echo _MONNAIE2;?></span>
</div>
</div>
<div class="container_pub_flottante">
<div id="pub_flottante_main_container_2">
<a href="" title "" alt "">
<img src="images/<?php echo rand(1,6);?>.jpg" alt="Random Image" /></a>
</div>
<div id="pub_flottante_entete_2"></div>
<div id="pub_flottante_prix_2">
<span class="prix_pub_flottante"><?php echo _PRIX2; echo _MONNAIE;?></span></br>
<span class="convertisseur"><?php echo _CONVERTISSEUR2; echo _MONNAIE2;?></span>
</div>
</div>
<div class="container_pub_flottante">
<div id="pub_flottante_main_container_3">
<a href="" alt "">
<img src="images/<?php echo rand(1,6);?>.jpg" alt="Random Image" /></a>
</div>
<div id="pub_flottante_entete_3"></div>
<div id="pub_flottante_prix_3">
<span class="prix_pub_flottante"><?php echo _PRIX3; echo _MONNAIE;?></span></br>
<span class="convertisseur"><?php echo _CONVERTISSEUR3; echo _MONNAIE2;?></span>
</div>
</div>
<div id="pub_flottante_entete_4"></div>
</div>
J'espère que je suis assez clair, parce que je suis vraiment dépassée là dessus et ce serait vraiment cool si quelqu'un pouvait m'aider parce que moi j'ai pas la solution.
Merci bien
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 12:44
par xTG
Fais toi un tableau d'images et utilises shuffle() et array_shift().
La premier va trier aléatoirement tes éléments du tableau.
Le second va te retourner le premier élément du tableau et le supprimer de ce dernier en même temps, du coup pas de doublon possible.
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 14:15
par louyoulou
Oui mais si je fais cela il me semble que mes trois images ne seront plus indépendante, elles ne seront plus dans mes trois div différentes. Et ça me pose un problème cela. A moins que je n'ai pas bien compris ta réponse, si c'est le cas excuse moi je ne suis pas très doué en php. Veux tu bien m'éclairer s'il te plait..
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 14:33
par kny
Tel que je lis ton code, tes images sont choisies chacune leur tour par un rand().
Ainsi, tu pioches une première fois dans ton tableau parmi toutes les images et tu écris dans une div, puis tu recommences l'opération sur
le même nombre d'images...
Avec le shuffle et le shift, la démarche sera identique à une exception près:
Tu mélanges ton tableau, tu pioches une première images que tu supprimes de ton tableau et tu l'écris dans une div, mais quand tu vas repiocher la fois suivante, tu piocheras sur les
images restantes...
Autrement dis:
<?php
$myarray = array ( 'image1', 'image2', 'image3' );
shuffle ( $myarray );
$imageA = array_shift ( $myarray );
$imageB = array_shift ( $myarray );
$imageC = array_shift ( $myarray );
// puis tu écris tes div de cette manière ou d'une autre.
echo "<div class='container_pub_flottante'>" .
"<div id='pub_flottante_main_container_1'>" .
"<a href='' title='' alt=''>" .
"<img src='images/" . $imageA . ".jpg' alt='Random Image' />" .
"</a>" .
"</div>"
?>
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 14:51
par louyoulou
Génial, tu as tout compris, ton code marche bien merci.
Mais je vais cependant encore t’embêter kny ou un autre n'importe, mais j'ai un nombre de photo qui varie et leur nom aussi donc le array ( 'image1', 'image2', 'image3' ); c'est pas le top. Est ce qu'on peut faire un array sans donner le nom, ni le nombre d'élément, jusque là j'ai pas trouvé, est ce que quelqu'un saurait comment remplacer juste cela? Parce tout le reste c'est parfait.
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 15:14
par kny
Dans mon exemple j'ai précisé un array en dur de manière à pouvoir avoir un exemple concret fonctionnel.
Mais évidemment ton array peux être divers et varié!
Peu importe ce que contiendra ton array, et sa longueur.
<?php
$myArray = // ce que tu veux, un array sorti d'une BDD, un array composé manuellement, etc...
// Le reste du code ne change pas.
// Si toutefois tu désires piocher plus de photos que les trois en exemple, et selon des données variables
// exemple un coup 3, une autre fois, ce sera 5, utilises donc un tableau de résultat ^.^
shuffle ( $myArray );
$myResultArray = array();
$numberOfResult = 5; // ta donnée variable
for ( $i = 0; $i < $numberOfResult; $i++ ) {
$myResultArray[$i] = array_shift ( $myArray );
// ou
// array_push ( $myResultArray, array_shift ( $myArray ) );
}
// ensuite tu récupères la valeur dans ton tableau.
echo "<div class='container_pub_flottante'>" .
"<div id='pub_flottante_main_container_1'>" .
"<a href='' title='' alt=''>" .
"<img src='images/" . $myResultArray[0] . ".jpg' alt='Random Image' />" .
"</a>" .
"</div>"
?>
Ou plus simplement,selon tes besoins...
Mais personnellement je préfère stocker mes valeurs piochées dans un tableau et les appeler par la suite ( cf.: méthode ci-dessus ), quitte à reprendre une boucle, pour pouvoir ré-accéder à mes valeurs en cas de besoin.
<?php
$myArray = // ce que tu veux, un array sorti d'une BDD, un array composé manuellement, etc...
shuffle ( $myArray );
$numberOfResult = 5; // ta donnée variable
for ( $i = 0; $i < $numberOfResult; $i++ ) {
echo "<div class='container_pub_flottante'>" .
"<div id='pub_flottante_main_container_" . $i . "'>" .
"<a href='' title='' alt=''>" .
"<img src='images/" . array_shift ( $myArray ) . ".jpg' alt='Random Image' />" .
"</a>" .
"</div>"
}
?>
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 15:46
par louyoulou
Ok d'accord mais comment est ce que je le formule mon array avec un nombre de fichier indéfini? Parce que un jour je peux avoir 30 fichiers et le lendemain 20 fichiers dans mon dossier, et j'aimerais juste supprimer une image dans mon dossier pour qu'elle ne soit plus affichée, tu vois ce que je veux dire?
En gros il me faudrait un array(de image1 à image8000), parce que j'ai des photos avec des noms bien précis, et que les photos qui vont dans le dossier changent souvent. Si je fais un long array avec le nom de toutes mes images, ce sera la galère tous les jours pour modifier les photos qui ne sont plus d'actualité.
Désolée, je suis un peu casse-couille avec toutes mes questions, étant un débutant en PHP ça n'aide pas, mais tu m'es d'une grande aide et tu es un fin pédagogue kny.
Merci d'avance.
Re: plusieurs images aleatoires
Posté : 31 mai 2012, 15:53
par kny
Tu as plusieurs solutions:
- faire une lecture de ton dossier, et récupérer les noms de chaque fichier, et enfin les stocker dans ton tableau.
- écrire un fichier XML contenu dans ton dossier de photo qui va lister les fichiers, les urls, etc..., pour ensuite le parser avec php et stocker les données extraite dans ton tableau.
(comme l'avantage du XML n'est pas flagrant car cela présume que tu devras le modifier à chaque changements de ton dossier, cependant en voici un: tu pourras au travers du fichier XML préciser en plus des noms de fichiers (URI), des données complémentaires telles que le nom à afficher - différent donc du nom de fichier -, des descriptions, etc..., qui pourront éventuellement être utiliser dans la création de tes encarts publicitaires.)
Documentation:
- isdir() / scandir() de la documentation php
- références XML de la documentation php