Partage
  • Partager sur Facebook
  • Partager sur Twitter

Image aléatoire dans un DIV

Rien ne marche !

    30 janvier 2023 à 10:26:09

    Bonjour,

    Je suis le créateur du site FranceCurling.fr et de connaissances modestes en programmation.

    Je cherche depuis longtemps à mettre une image aléatoire dans la rubrique "humour", sans résultat.

    Visiblement, le PHP est en conflit avec les DIV.

    Voici le code inititial:

    <div class="bloc_interne_droit_ou_gauche">
              <h2>Humour:</h2>
              <div class="image_centrale"> <img src="images/humour_32.jpg"></div>
            </div>

    Le problème est de remplacer le chiffre 32 par une variable, mais rien ne marche.

    Une idée ?

    • Partager sur Facebook
    • Partager sur Twitter
      30 janvier 2023 à 10:42:20

      Bonjour,

      Déjà pour trouver un nombre aléatoire c'est par exemple : https://www.php.net/manual/en/function.rand.php

      Il te suffit donc de concaténer le nombre obtenu avec "images/humour_".$mavariable

      Il faut bien sûr que ton intervalle soit sans trou sinon c'est un peu plus complexe.

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        30 janvier 2023 à 10:51:44

        Bonjour,

        "rien ne marche" : si tu ne nous montres pas ton code (PHP), on ne saura pas t'aider ;) Poste-le via le bouton </>, pour le colorer, c'est important pour nous, ça aidera à notre compréhension.

        • Partager sur Facebook
        • Partager sur Twitter

        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          30 janvier 2023 à 14:07:06

          Parmie les nombreux exemples qui ne marchent pas:

          <div class="bloc_interne_droit_ou_gauche">
                    <h2>Humour:</h2>
                    <div class="image_centrale"> </div>
                    <?php     					
          					$numero = rand(1,32);
          					echo <img src="images/humour_§numero.jpg"> ?></div>



          • Partager sur Facebook
          • Partager sur Twitter
            30 janvier 2023 à 14:24:34

            Alors si tu avais bien lu ce que je t'ai écris tu verrais que tu n'as pas appliqué.

            Car ce n'est pas : 

            images/humour_§numero.jpg

            Mais 

            'images/humour_'.$numero.'jpg'

            La concaténation de chaîne en php c'est avec un point ... ensuite je ne sais quel signe tu as utilisé pour une variable en php mais une variable c'est avec $.

            A+



            • Partager sur Facebook
            • Partager sur Twitter
              30 janvier 2023 à 15:22:00

              De même si tu echo une balise ou quoi que ce soit, tu dois utiliser un `htmlspecialchars`qui est une fonction permettant d'éviter les injections.

              Soit, tu devrais avoir un code ressemblant à ça :

              <div class="bloc_interne_droit_ou_gauche">
                  <h2>Humour:</h2>
                  <div class="image_centrale">
                      <?php                     
                      $numero = rand(1,32);
                      echo htmlspecialchars("<img src='images/humour_".$numero.".jpg'>"); ?>
              ?>
              </div>

              D'ailleurs, dans le code que tu as donné, tu as oublié le point virgule, or en php, contrairement au python ou au R si je ne m'abuses, le ';' est OBLIGATOIRE, sinon, classique, une erreur...

              De même, tu semble avoir oublié de fermer ta balise php avec un '?>' et de même tu à fermer ta balise `image_centrale` avant d'y mettre ton php dedans, ce qui est contreproductif si j'ai bien compris ton problème...

              Si je peux me permettre un conseil, regarde la documentation de php à propos du `htmlspecialchars`, c'est essentiel en programmation pour convenablement comprendre ce qu'on code, c'est un peut comme connaître la définition d'un mot, son sens et surtout la façon dont il s'utilise et quand...

              Surtout ne t'inquiète pas, tu rira de ça un jour, c'est en forgeant qu'on devient forgeron...  :)

              Bonne journée,


              Maxence

              -
              Edité par Maxence ABRILE 30 janvier 2023 à 15:25:56

              • Partager sur Facebook
              • Partager sur Twitter
                30 janvier 2023 à 16:13:24

                Oui, je me suis trompé de caractère !

                Mais ceci ne fonctionne pas:

                <div class="bloc_interne_droit_ou_gauche">
                          <h2>Humour:</h2>
                          <div class="image_centrale"> 
                            <?php
                	    $num= rand(1, 32);
                	    echo "<'images/humour_'.$num.'jpg'>";
                	    ?>
                          </div>



                • Partager sur Facebook
                • Partager sur Twitter
                  30 janvier 2023 à 16:18:49

                  Que veut dire cela ne fonctionne pas ?

                  Message d'erreur ? zone image mais pas avec l'image prévue ? il y a t-il des messages à la console du navigateur ... 

                  Voir aussi remmarque de mon VDD.

                  A+

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 janvier 2023 à 16:33:20

                    Par exemple, le site web tourne avec le code suivant:

                    div class="bloc_interne_droit_ou_gauche">
                              <h2>Humour:</h2>
                              <div class="image_centrale"> <img src="images/humour_32.jpg"></div>
                              <div class="image_centrale"> <img src="images/humour_<?php echo rand(1,32); ?>.jpg"
                    
                                  alt=""></div>
                            </div>

                    Il devrait y avoir deux photos affichées. Seul la première est affichée.

                    Je me suis renseigné sur le CSS, mais on me dit que ça n'a aucun rapport.

                    Je pense qu'il faudrait pouvoir déclarer une variable globale que je puisse utiliser en dehors du code PHP pour que la classe "image_centrale" la prenne en compte

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 janvier 2023 à 17:21:06

                      Hehe, tu ne peux pas mettre ton php entre des guillemets... Tu peux le voir en ouvrant la console, il n'y aura pas un chiffre aléatoire mais le mot '<?php ... ?>.jpg'

                      Tu devrais à la place écrire ça :

                      <div class="image_centrale"> <img src=<?php echo "images/humour_".rand(1,32).".jpg"; ?>
                       
                                    alt=""></div>
                              </div>

                      La ça devrait marché, bien que je n'ai pas testé le code...

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 janvier 2023 à 20:21:54

                        Bonjour: 

                        Maxence ABRILE a écrit:

                        Hehe, tu ne peux pas mettre ton php entre des guillemets... Tu peux le voir en ouvrant la console, il n'y aura pas un chiffre aléatoire mais le mot '<?php ... ?>.jpg'

                        Tu devrais à la place écrire ça :

                        <div class="image_centrale"> <img src=<?php echo "images/humour_".rand(1,32).".jpg"; ?>
                         
                                      alt=""></div>
                                </div>

                        La ça devrait marché, bien que je n'ai pas testé le code...


                        La syntaxe me parait valide, on peut très bien ouvrir une balise PHP en plein milieu d'un attribut HTML il me semble (même si la plupart du temps on essaie d'éviter de mélanger le PHP et HTML).

                        Cette syntaxe-là:

                        <img src="images/humour_<?php echo rand(1,32); ?>.jpg" alt="humour aléatoire">

                        Le php devrait belle et bien être l'interpréter, non ?

                        Pour peu que l'on ouvres la page via: http(s)://  et pas sur C://

                        Si j'avais dut l'écrire je l'aurais fait comme ça je pense:

                        <img src="images/humour_<?= rand(1,32); ?>.jpg" alt="humour aléatoire">

                        Qui est une syntaxe équivalente.


                        Je pense plutôt que le chemin de l'image n'est pas trouvé (n'existe pas).

                        Et tu certain que tu as un dossiers /images qui contient les fichiers:

                        humour_1.jpg, humour_2.jpg, ... jusqu'à humour_32.jpg ?

                        Tu peux peut-être afficher le chemin pour manuellement vérifier, que le chemin est valide:

                            	<?php $imageId = rand(1,32); ?>
                            	
                                <img src="images/humour_<?= $imageId; ?>.jpg" alt="humour aléatoire">
                                
                                <p>
                                	chemin du fichier: <a href="images/humour_<?= $imageId; ?>.jpg">images/humour_<?= $imageId; ?>.jpg</a>
                                </p>
                        • Partager sur Facebook
                        • Partager sur Twitter

                        suggestion de présentation.

                          31 janvier 2023 à 10:08:23

                          Bonjour,

                          J'ai essayé les trois modifications d'écriture et, bien sûr, cela ne marche pas !

                          Les fichier images est bien présent. Je m'en sers tous les jours.

                          Je vais re-essayer une méthode que j'avais vu sur un autre site: écrire un tableau en php avec tous les noms d'images. Il semble que ce soit bien un pb de chemin introuvable.

                          J'ai essayé un ARRAY sans résultat non plus.

                           <div class="image_centrale"> <img src="images/humour_30.jpg"></div>
                                    <?php  
                          $humour=array();$humour[32]='humour_32.jpg';$humour[31]='images/humour_31.jpg';
                          $humour[30]='humour_30.jpg';$humour[29]='images/humour_29.jpg';$humour[28]='humour_28.jpg';$humour[27]='images/humour_27.jpg';
                          $humour[26]='humour_26.jpg';$humour[25]='images/humour_25.jpg';
                          $choix = array_rand($humour, 1);
                          echo $humour[$choix[].;
                          ?> </div>

                          Là, le site devrait au moins donner un bout de texte.

                          -
                          Edité par JeanPierreBauduin 31 janvier 2023 à 10:56:20

                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 janvier 2023 à 12:21:15

                            « J'ai essayé un ARRAY sans résultat non plus »

                            As-tu examiné le code source de la page HTML produite par le PHP ? Tu n'y fais jamais référence. Or la réponse à ton problème s'y trouvera sûrement.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              31 janvier 2023 à 13:13:33

                              Je répète :

                              Que veut dire cela ne fonctionne pas ?

                              Message d'erreur ? zone image mais pas avec l'image prévue ? il y a t-il des messages à la console du navigateur ... 

                              A+

                              • Partager sur Facebook
                              • Partager sur Twitter
                                31 janvier 2023 à 13:19:24

                                Re bonjour.

                                Dans le code que je t'ai présenter est-ce que tu as pu voir le lien générer avec le chemin du fichier dans le texte du lien ?

                                Est-ce que le chemin dans le texte du lien a l'air valide ?

                                Est-ce que le lien fonctionne, est pointe bien vers le fichier image ?

                                Dans le nouveau code que tu montres.

                                Je doute assez fortement que cette instructions passe:

                                $choix = array_rand($humour, 1);

                                Et en plus de pas passer elle devrait lever une  error:

                                PHP Fatal error:  Uncaught TypeError: rand(): Argument #1 ($min) must be of type int, array given ...

                                Que tu devrais pouvoir voir sur ta page, et que tu aurais du nous indiquer, pour que l'on puisse t'aider il faut que tu nous indiques les messages d'erreur que te renvois PHP.

                                Cette forme-là pourrait avoir du sens:

                                $choix = array_rand(1, count($humour));

                                En tout cas elle ne planterait pas.


                                Mais elle ne fonctionneras pas non plus, parce que le tableau $humour contient 8 éléments,

                                mais les index commencent de 25 et vont jusqu'à 32.

                                Et que $choix contient une valeur qui va de 1 jusqu'à 8.

                                Il faudra ajouter 24 à la variable $choix pour utiliser ce code-là.

                                $choix = array_rand(1, count($humour)) + 24;



                                Et aussi le echo na pas une forme correct et elle aurait du lever un ParseError:

                                echo $humour[$choix[].;

                                Pourrait s'écrire:

                                echo $humour[$choix];






                                -
                                Edité par SamuelGaborieau3 31 janvier 2023 à 13:23:30

                                • Partager sur Facebook
                                • Partager sur Twitter

                                suggestion de présentation.

                                Image aléatoire dans un DIV

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown