Besoin d'aide en PHP

Olivier -  
 Olivier -
Bonjour,
je voudré utiliser le script PHP qui permet de effectuer une selection aléatoire d'images sans doublon que j'ai trouvé sur un site.
je ne comprend pas tres bien les explications. Pourriez vous m'aider?
Merci d'avance.

Mon souhait est de faire apparaitre 78 images aléatoirement mais masquées de dot de carte dans un tableau de 6 colonnes par 13 lignes afin que le joueur puisse en choisir 13 sans voire ce qu'il choisit.
Mes images sont bien nommées image_no1 et sont dans le bon dossier sur le serveur.

Voici ce que j'ai tapé sur ma page HTML où je souhaite faire apparaitre mes images:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title> Jeu</title>
</head>

<body>
<?php
$lien1="http://www.bigboss.fr/4_jeu/cartespetite/image_no1";
....
....
....
....

$lien78="http://www.bigboss.com/4_jeu/cartespetite/image_no78";

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

if ($i >9)
{
$tirage=0;
while ($tirage < 79)
{
$ok=1;
$tirage++;
srand((double)microtime()*1000000);
$tirage_no = floor(rand(1,count($image)));
$tage[$tirage] = $tirage_no;
for ($v=0; $v<$tirage; $v++)
{
if ($t_no[$v] == $tirage_no)
{
$tirage--;
$ok=0;
}
}
if ($ok == 1)
{
$result[$tirage]=$image[$tirage_no];
}
}
for ($n=1; $n<=78; $n=$n+13)
{
print "<tr>";
for ($j=0; $j<13; $j++)
{
$no=$n+$j;
$url="../cartespetite/image_no".$result[$no].".gif";
if (!file_exists($url))
{
$url="../cartespetite/image_no".$result[$no].".jpg";
}
if (file_exists($url)) {
print "<td align=\"center\"><a href=\"$lien.$result[$no]\" ";
print "target=\"_blank\"><img border=\"0\" src=\"$url\">";
print "</a></td>";
}
else
{
print "<td align=\"center\"> </td>";
}
}
print "</tr>";
}
}
print "</table>";
?>
</body>
</html>

19 réponses

  1. aralicia Messages postés 20 Statut Membre 1
     
    bon, je suis assez déconcertée par ton script. En effet, un grand nombre de variables ne sont pas initialisées avant d'être testées.
    analyse de ton script(mes messages sont sous forme de commentaires en gras

    <?php
    $lien1="http://www.bigboss.fr/4_jeu/cartespetite/image_no1";
    ....
    ....
    ....
    ....

    $lien78="http://www.bigboss.com/4_jeu/cartespetite/image_no78";
    //déclaration des variables contenant les adresses des images. RAS

    print "<table border=\"0\" width=\"100%\" cellpadding=\"0\">";
    // affichage de la balise table. !attention: balise print utilisé: existence en php par sûre, preferer echo

    if ($i >9)
    {
    // $i ? variable non définie précédement, utilité du test inconnue
    $tirage=0;
    while ($tirage < 79)
    {
    $ok=1;
    $tirage++;
    srand((double)microtime()*1000000);
    //réinistalisation du générateur aléatoir à chaque nouvelle boucle. mauvaise idée car inutile. une seule initalisation suffit en début de script
    $tirage_no = floor(rand(1,count($image)));
    $tage[$tirage] = $tirage_no;
    for ($v=0; $v<$tirage; $v++)
    {
    if ($t_no[$v] == $tirage_no)
    {
    // $t_no ? variable non définie précédement, utilité du test inconnue
    $tirage--;
    $ok=0;
    }
    }
    if ($ok == 1)
    {
    $result[$tirage]=$image[$tirage_no];
    }
    }
    //fin apparente du choix de l'ordre des images
    //début de l'affichage des images
    for ($n=1; $n<=78; $n=$n+13)
    {
    print "<tr>";
    for ($j=0; $j<13; $j++)
    {
    $no=$n+$j;
    $url="../cartespetite/image_no".$result[$no].".gif";
    if (!file_exists($url))
    {
    $url="../cartespetite/image_no".$result[$no].".jpg";
    }
    if (file_exists($url)) {
    print "<td align=\"center\"><a href=\"$lien.$result[$no]\" ";
    print "target=\"_blank\"><img border=\"0\" src=\"$url\">";
    // pourquoi utiliser une adresse ansolue pour le lien et une adresse relative pour l'image? la cible est pourtant la même
    print "</a></td>";
    }
    else
    {
    print "<td align=\"center\"> </td>";
    }
    }
    print "</tr>";
    }
    }
    print "</table>";
    ?>
    //fin de l'affichage des images. même remarque à propos de print

    Comme tu peux le voir, ton script possede quelques erreurs. une autre erreur que je n'ais pas encore mentionné est qu'il est programmé pour afficher 13 lignes et 6 colonnes, contrairement à ce que tu a mis.
    Si tu le souhaite, je peux te guider pour corriger toi-même ton script, ou t'en faire un moi-même.
    Si tu veux simplement que je te guide, si tu pouvais me donner ton niveau en php, pour que je ne me lance pas dans des trucs trop compliqués.
    0
    1. Olivier
       
      Avant tout, un grand merci à toi aralicia.
      Mon niveau en php est debutant.
      Je souhaite que tu m'aide a corriger mon script car c'est plus gratifiant . mais merci quand meme pour ta proposition qui est de le créer toi même. Eventuellement si je n'y arrive pas, alors oui peut etre que je te le demanderrai.
      Pour l'heure je vais etudier ce que tu m'as mis apres avoir dormis.lol
      puis je te renverrai ce que j'ai modifié en y integrant du commentaire.
      Encore merci a toi.
      0
      1. Pers_firewall > Olivier
         
        bonjour
        je cgherche des infos pour exporter ma base de donnees...si tu peux m'aider cela serait sympa..merci
        0
  2. Olivier
     
    Bonjours,
    J'ai donc fait quelques modifications suivant tes explications.
    Mais je t'avous n'avoir pas plus de resultats.
    Voici ce que j'ai fait:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>La roue de la vie - Jeu</title>

    </head>

    <body>
    <?php
    $lien1="http://www.bigboss.fr/4_jeu/cartespetite/image_no1";
    .
    .
    .

    $lien78="http://www.bigboss.fr/4_jeu/cartespetite/image_no78";

    echo "<table border=\"0\" width=\"100%\" cellpadding=\"0\">";
    //J'ai donc remplacé tous les print par echo

    $tirage=0;
    while ($tirage < 79)
    {
    $ok=1;
    $t_no=0;
    //initialisation de la variable $t_no a 0
    $tirage++;
    srand((double)microtime()*1000000);
    //Dois-je le mettre avant le while?
    $tirage_no = floor(rand(1,count($image)));
    $tage[$tirage] = $tirage_no;
    //permet apparement de ne pas tirer deux fois la meme //image
    for ($v=0; $v<$tirage; $v++)
    {
    if ($t_no[$v] == $tirage_no)

    {
    $tirage--;
    $ok=0;
    }
    }
    if ($ok == 1)
    {
    $result[$tirage]=$image[$tirage_no];
    }
    }
    //Je souhaite effectivement un tableau de 13 lignes et 6 colonnes
    for ($n=1; $n<=78; $n=$n+13)
    {
    echo "<tr>";
    for ($j=0; $j<13; $j++)
    {
    $no=$n+$j;
    $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".gif";
    if (!file_exists($url))
    {
    $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".jpg";
    }
    if (file_exists($url))
    {
    echo "<td align=\"center\"><a href=\"$lien.$result[$no]\" ";
    echo "target=\"_blank\"><img border=\"0\" src=\"$url\">";
    //je ne sais pas ce qu'est une adresse ansolue
    echo "</a></td>";
    }
    else
    {
    echo "<td align=\"center\"> </td>";
    }
    }

    echo "</tr>";
    }
    echo "</table>";
    ?>
    </body>
    </html>

    Voila le resultat sur mon navigateur:

    "; $tirage=0; while ($tirage < 79) { $ok=1; $t_no=0; $tirage++; srand((double)microtime()*1000000); $tirage_no = floor(rand(1,count($image))); $tage[$tirage] = $tirage_no; for ($v=0; $v<$tirage; $v++) { if ($t_no[$v] == $tirage_no) { $tirage--; $ok=0; } } if ($ok == 1) { $result[$tirage]=$image[$tirage_no]; } } for ($n=1; $n<=78; $n=$n+13) { echo ""; for ($j=0; $j<13; $j++) { $no=$n+$j; $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".gif"; if (!file_exists($url)) { $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".jpg"; } if (file_exists($url)) { echo ""; echo ""; } else { echo " "; } } echo ""; } echo ""; ?>
    0
  3. Olivier
     
    Voici le script original sur lequel je me suis appuié:

    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="https://www.lyad.fr";
    $lien2="pageaccueil.php?r=1";
    $lien3="../top/index.htm";
    etc...

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

    $lien1="https://www.lyad.fr";
    $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\"> </td>";
    }
    }
    print "</tr>";
    }
    }
    print "</table>";
    0
  4. aralicia Messages postés 20 Statut Membre 1
     
    Alors, j'ai fais des test, et je suis arrivé à une conclusion. Si la seconde partie du script, qui gère l'affichage des images fonctionne, la première non. Et pour cause, le tableau $result qu'elle renvoie est vide!

    Ma proposition est donc de garder la partie qui fonctionne et de refaire complètement la partie qui ne marche pas.

    Nous conserverions donc:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>La roue de la vie - Jeu</title>

    </head>

    <body>
    <?php

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

    //
    //
    //script a réécrire
    //
    //
    //
    //
    //

    for ($n=1; $n<=78; $n=$n+13)
    {
    echo "<tr>";
    for ($j=0; $j<13; $j++)
    {
    $no=$n+$j;
    $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".gif";
    if (!file_exists($url))
    {
    $url="http://www.bigboss.fr/4_jeu/cartespetite/image_no".$result[$no].".jpg";
    }
    if (file_exists($url))
    {
    echo "<td align=\"center\"><a href=\"$url\" ";
    echo "target=\"_blank\"><img border=\"0\" src=\"$url\">";
    echo "</a></td>";
    }
    else
    {
    echo "<td align=\"center\"> pas d'image à afficher </td>";
    }
    }

    echo "</tr>";
    }
    echo "</table>";
    ?>
    </body>
    </html>

    tu remarquera également que j'ai supprimé la liste de $lien1... et remplacé son utilisation par $url, qui vaut exactement la même chose dans le cas présent, puisque c'est l'adresse de l'image. La liste de liens n'est utile que si tu fait des liens vers des pages web.

    maintenant il va faloir refaire la partie de selection si tu est d'accord. si on peut encore repartir du script de base qu'ils on fournit.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Olivier
     
    Ca marche pour moi.
    en ce qui concerne les liens, je souhaite faire apparaitre les13 images que le joueur aurra choisi sur la page html suivante. Dois je donc les garder?
    pour la premiere partie j'ai essayé çà mais ça ne marche pas.Et là je suis bloqué.
    $tirage=0;
    $t_no=0;
    srand((double)microtime()*1000000);
    while ($tirage < 79)
    {
    $ok=1;
    $tirage++;
    $tirage_no = floor(rand(1,count($image)));
    $tage[$tirage] = $tirage_no;
    for ($v=0; $v<$tirage; $v++)
    {
    if ($t_no[$v] == $tirage_no)
    {
    $tirage--;
    $ok=0;
    }
    }
    if ($ok == 1)
    {
    $result[$tirage]=$image[$tirage_no];
    }
    }
    0
  7. aralicia Messages postés 20 Statut Membre 1
     
    dsl, j'ai pas eu le temps de répondre avant, mais voiçi un algorithme qui devrai fonctionner, tu n'aura plus qu'a l'ecrire en PHP:

    main(){ //code principal

    entier liste[78] := {1,2,3,4,5,6, ... ,78} // liste des images possibles
    entier taille_liste := 78 // taille de la liste ci-dessus
    entier resultat[78] // liste des résultats
    entier indice
    entier temp

    intialisation du générateur
    pour indice allant de 1 à 78 avec un pas de 1 // boucle for
    temp := nombre aléatoire entre 1 et taille_liste // tirage d'un numéro
    resultat[indice] := liste[temp] // choix de l'image correspondant au noméro tiré
    fonction décalage()
    fin pour
    }

    fonction décalage(){ //fonction décalant la liste des images encores possibles
    entier i
    pour i allant de temp à taille_liste avec un pas de 1
    liste[i] := liste[i+1]
    finpour
    taille_liste := taille_liste - 1
    }

    Cet algo est simple, bonne chance ^^
    0
  8. B@|-|@N Messages postés 386 Statut Membre 62
     
    Salut.
    Juste un petit truc, j'ai pas trop le temps pour l'instant, mais je reviendrai ce soir.

    Tu initialises ta variable $t_no à 0 puis tu fais appel à elle en tant que tableau. Utilise plutôt comme initialisation :
    $t_no = array();

    Pour info, la fonction print existe bien en php.

    Enfin, je me demande si le file_exists est bien utilisé. Ca marche pas comme les différentes fonctions relatives aux fichiers de php i.e. avec un id fichier ?

    A toute à l'heure.

    Bahan
    0
  9. Olivier
     
    Bin là je suis largué....
    désolé.
    0
  10. aralicia Messages postés 20 Statut Membre 1
     
    Aïe! Programmeur largué, Projet Arreté... c'est mauvais... bon... tu fais quels études et à quel niveau?
    Que je sache ce que je doive dire ou non...
    0
  11. Olivier
     
    je ne compte pas abandonner..
    je suis au chomage
    je developpe un peux mais c'est plus du sql ou java et je debute.
    0
  12. Olivier
     
    Bon voila ce que j'ai fait avec ce que tu m'as donné mais y encore le random et la fonction decalage que je ne comprend pas. quand a ce que j'ai fait je ne sais absoluement pas si c'est bon ou pas.

    main()
    {
    $liste[78] := {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78};
    $taille_liste := 78;
    $resultat[78];
    $indice;
    $temp;
    for($indice=0; $indice<79; $indice++)
    {
    $temp := //là je ne sais pas faire le random
    $resultat[$indice] :=$liste[$temp];
    fonction decalage()//là je ne connais pas cette fonction
    }
    fonction decalage()
    {
    $i;
    for($i=$temp; $i<$taille_liste; $i++)
    {
    $liste[$i]:=$liste[$i+1];
    }
    $taille_liste := $taille_liste - 1;
    }
    0
  13. Olivier
     
    apres quelques recherches voici ce que j'ai rajouté:

    function main()
    {
    $liste[78] = {1,2,3,4,.........,78};
    $taille_liste = 78;
    $resultat[78];
    $indice;
    $temp;
    for($indice=0; $indice<=78; $indice++)
    {
    $temp = rand(1,$taille_liste);
    $resultat[$indice] =$liste[$temp];
    function decalage();
    }
    function decalage()
    {

    for($i=$temp; $i<$taille_liste; $i++)
    {
    $liste[$i]=$liste[$i+1];
    }
    $taille_liste = $taille_liste - 1;
    }
    0
  14. B@|-|@N Messages postés 386 Statut Membre 62
     
    Yo.

    Pourrais-tu réexpliquer clairement ce que tu souhaites stp ? Ca m'aiderait à t'aider ^_^.

    En fait tu veux faire apparaître des images dans un tableau de façon aléatoire ?

    Bahan
    0
  15. olivier
     
    Je souhaite faire un tableau sur une page html où apparaitré 78 images de carte de jeu dans un ordre aléatoire sans doublons et masquées afin que le joueur en selectionne 13 sans savoir lequelles il choisit. Elles apparaitrées uniquement lors du clic sur celle-ci.
    Les 13 cartes choisies serront recuperées sur la page suivante avec leur explication en fonction du signe du zodiac choisi par le joueur auparavant , car il s'agit en fait d'un jeu de tarot divinatoire. Voila...
    Merci pour ton aide B@|-|@N.
    0
  16. B@|-|@N Messages postés 386 Statut Membre 62
     
    Bon je regarde ça. Mais je vais avoir besoin de mon Gros Bouquin Php ^_^. Je vais regarder quand je rentrerai chez moi ce soir (désolé de ne pas avoir avancé hier j'ai eu quelques soucis, mais bon là, je regarde c'est promis).

    Bahan
    0
  17. B@|-|@N Messages postés 386 Statut Membre 62
     
    Désolé, j'ai des merdes avec ma livebox, je n'arrive pas à accéder au net de chez moi.
    Donc je ne pourrais t'aider que dimanche soir, le temps que je trouve ce qui ne va pas.

    Bon week end quand même.

    Bahan
    0
  18. Olivier
     
    A bon toi aussi......lol
    je risque de ne pas etre là lundi mardi et mercredi donc ne t'inquiete pas si je ne repond pas ce n'est pas que j'ai laché l'affaire bien au contraire.
    0