<?php

// ------------------------------------------------------------------------- //
// Sélection aléatoire sans doublon                                          //
// ------------------------------------------------------------------------- //
// Auteur: Denis                                                             //
// Email:  webmestre@moveincity.com                                          //
// Web:    http://www.passpartoo.net/                                        //
// ------------------------------------------------------------------------- //

/*
Pour effectuer une sélection aléatoire on utilise le code suivant par ex:

srand((double)microtime()*1000000);
$i = floor(rand(1,count($image)));

Ceci fonctionne très bien lorsque l'on n'a qu'une image à afficher par page et
à chaque renouvellement de cette page, l'image change.
Maintenant, là ou ça se corse, c'est lorsque l'on veut afficher plusieurs images
en mêlant les .gif aux .jpg dans une même page, mais sans qu'il n'y ait la même
2 fois.

Voici avec le script suivant comment afficher 9 images avec lien dans un tableau
de 3 par 3, prisent aléatoirement parmi une multitude d'images (bien entendu > 9
images).

Et pour que les liens fonctionnent, chaque image doit être associée à une url.

1/ Préalable :
--------------
Dans le dossier images, il faut que le nom des images aléatoires soient du sytle :

    image_no1.gif ou image_no1.jpg
    image_no2.jpg ou image_no2.gif
    etc...

Définir : soit dans un fichier à part, soit dans une table, soit avec le script
les liens associés aux images. Ce qui donne :

$lien1="http://www.passpartoo.net";
$lien2="pageaccueil.php?r=1";
$lien3="../top/index.htm";
etc...

2/ Script :
-----------
*/

$lien1="http://www.passpartoo.net";
$lien2="pageaccueil.php?r=1";
$lien3="../top/index.htm";
/*
.
.
.
*/
$lienX="http://...";


print
"<table border=\"0\" width=\"100%\" cellpadding=\"0\">";

// s'il y a plus de 9 images
// car si <9 images, il n'y a pas besoin de faire un affichage aléatoire
// la variable $i compte le nombre d'images dans le répertoire images
// ou peut-être donné par un mysql_numrows() si c'est une table qui est utilisé
if ($i > 9)
{
     
// tirage des 9 images
     
$tirage=0;
     while (
$tirage < 10)
     {
          
$ok=1;
          
$tirage++;
          
srand((double)microtime()*1000000);
          
$tirage_no = floor(rand(1,count($image)));
          
$t_no[$tirage] = $tirage_no;
          
// verif que 2 même nb ne soit pas tiré
          
for ($v=0; $v<$tirage; $v++)
          {
               if (
$t_no[$v] == $tirage_no)
               {
                    
$tirage--;
                    
$ok=0;
               }
          }
          if (
$ok == 1)
          {
               
$result[$tirage]=$image[$tirage_no];
          }
     }

     
// affichage du tableau 3x3
     
for ($n=1; $n<=9; $n=$n+3)
     {
          print
"<tr>";
          for (
$j=0; $j<3; $j++)
          {
               
$no=$n+$j;
               
$url="../images/image_no".$result[$no].".gif";
               if (!
file_exists($url)) // si l'image n'existe pas
               
{
                    
$url="../images/image_no".$result[$no].".jpg";
               }
               if (
file_exists($url))  // si l'image existe alors on l'affiche
               
{
                    print
"<td align=\"center\"><a href=\"$lien.$result[$no]\" ";
                    print
"target=\"_blank\"><img border=\"0\" src=\"$url\">";
                    print
"</a></td>";
               }
               else
               {
                   
// sinon on n'affiche rien
                    
print "<td align=\"center\">&nbsp;</td>";
               }
          }
          print
"</tr>";
     }
}
print
"</table>";

/* ----------------------------------------------------------------------------

Il y a moyen de compter le nombre d'affichage des images si l'on utilise une table :
id        int(11)         autoincrement
lien      varchar(70)
nb_aff    int(11)

la requête à mettre après la ligne :

print "<td align=\"center\"><a href=\"$lien.$result[$no]\" ";
print "target=\"_blank\"><img border=\"0\" src=\"$url\"></a></td>";

sera :

mysql_query("UPDATE $votretable SET nb_aff=nb_aff+1 WHERE id='$result[$no]'");

---------------------------------------------------------------------------- */

?>