IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacer texte par photo


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut Remplacer texte par photo
    Bonjour,

    Merci pour votre aide precieuse.

    Je cherche desesperement un script.
    J'ai même essayé de le faire - au debut et à la fin.

    Je m'explique

    Sur mon serveur j’ai un repertoire « USA » qui contient une page « usa.php » et un repertoire « photos ».

    Dans la page « usa.php » - Il affiche un texte qui se trouve dans une table sql. « tableusa » avec le champ « texteusa ».

    Ce texte est coupé par des [placephoto] comme dans l’éxemple ci-dessous.

    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    [placephoto]
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    [placephoto]
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla
    Blablablalbabla blabla bla blablabla

    Je veux que lorsqu’il lit et affiche le texte et qu’il trouve le terme [placephoto] il prenne et affiche une photo au hasard dans le répertoire « photos » - Il faut qu’il affiche la photo a la place du terme [placephoto] – Qu’il continus a afficher la suite du texte et si il retrouve d’autres termes [placephoto]
    Qu’il prenne et affiche une photo au hasard dans le répertoire « photos » et rebolote jusqu’à la fin du texte.


    Franchement merci pour votre aide.

    Vous êtes les

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut remplacer texte par photo
    Re,

    J'ai trouvé ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 
    function moulinette() 
    { 
     
    $contenu = str_replace('[placephoto]',"<imgsrc='photos/xxxx.jpg>",$contenu); 
    } 
    ?>
    merci de me dire si je suis dans la bonne voie.
    Par contre je n'arrive pas a faire le script pour qu'il change plusieurs fois dans le meme texte.

    Merci pour votre aide

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Le problème avec str_replace, c'est que tous les "[placephoto]" seront remplacés par la même photo.

    Pour avoir des photos différentes à chaque remplacement, tu peux t'en sortir en utilisant les fonctions strpos et substr_replace dans une fonction récursive ou encore en utilisant preg_replace_callback et une fonction de rappel qui choisisse au hasard une image dans ton répertoire.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse.
    Voilà mon exemple (de base pour comprendre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?
    $texte ="<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd";
    $texte = str_replace('[test]',"<br><br><imgsrc='photos/x.jpg><br><br>",$texte); 
    echo "<br><br><br>";
    echo $texte;
    ?>
    je n'arrive pas à me servir de la fonction preg_replace_callback (je dois être tout naze.

    qq1 peut me mettre en script la fonction preg_replace_callback avec mon exemple de script du dessus ou m'expliquer comment cela marche car j'ai regardé mais

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    L'utilisation de preg_replace_callback n'est pas des plus évidente, c'est pour ça que je te proposais en premier d'utiliser strpos et substr_replace (ça ferait un script plus simple à comprendre).

    Un exemple d'utilisation de preg_replace_callback (non testé, et sans intérêt, puisque sans image aléatoire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?
    $texte ='<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd';
     
    function relpace_test($matches)
    {
        return '<br><br><imgsrc="photos/x.jpg"><br><br>';
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
     
    echo $texte;
    ?>

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merci bcp Eusebe.

    Peut on rajouter dans la fonction replace-test dans le return une fonction RND en php pour choisir au hasard une photo dans mon repertoire.

    J'ai trois images 1.jpg 2.jpg et 3.jpg dans un repertoire 'photos'

    Puis je mettre a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return '<br><br><imgsrc="photos/x.jpg"><br><br>';
    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    return 
    {
    $numero = rand(1,3);
    '<br><br><imgsrc="photos/".$numero.".jpg"><br><br>';
    }
    Merci pour votre aide

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    J'ai presque trouvé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?
    $texte ='<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd';
     
    function replace_test($matches)
    {
        return '<br><br><IMG SRC="<?  echo rand(1,3); ?>.jpeg"  BORDER=0 ALT="USA"><br><br>';
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
     
    echo $texte;
    ?>
    Le seul problème c qu'il n'affiche pas les photos mais le echo :
    <IMG SRC="<? echo rand(1,3); ?>.jpeg"

    Je me suis trompé dans les ' " ou autre....

    Merci pour votre aide - j'avance doucement et je suis proche du but.

  8. #8
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Oui,

    Le mieux est probablement de mettre tes noms de fichiers image dans un tableau et d'en sélectionner un au hasard avec array_rand.

    Et si tu veux éviter d'avoir deux fois de suite la même image, tu peux même utiliser une variable statique dans ta fonction contenant le tableau des images disponibles. Et à chaque tirage, tu pourrais supprimer de ce tableau l'image sélectionnée (donc la rendre indisponible pour le prochain tirage)...

  9. #9
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par krapoulos2006 Voir le message
    J'ai presque trouvé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?
    $texte ='<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd';
     
    function replace_test($matches)
    {
        return '<br><br><IMG SRC="<?  echo rand(1,3); ?>.jpeg"  BORDER=0 ALT="USA"><br><br>';
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
     
    echo $texte;
    ?>
    Le seul problème c qu'il n'affiche pas les photos mais le echo :
    <IMG SRC="<? echo rand(1,3); ?>.jpeg"

    Je me suis trompé dans les ' " ou autre....
    Fais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return '<br><br><IMG SRC="'.rand(1,3).'.jpeg"  BORDER=0 ALT="USA"><br><br>';

  10. #10
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?
    $texte ='<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd';
     
    function replace_test($matches)
    {
        return '<br><br><IMG SRC=" ' . rand(1,3) . ' .jpeg"  BORDER=0 ALT="USA"><br><br>';
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
     
    echo $texte;
    ?>


    personellement, pour avoir plus de possibilité sur tes images, je ferais comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function replace_test($matches)
    {
    $photos = array('newyork.jpg','lasvegas.jpg','losangeles.jpg','sanfran.jpg');
    $end = count($photos);   
    $pos = rand(0,$end);
     return '<br><br><IMG SRC=" ' . $photos[$pos] . '"  BORDER=0 ALT="USA"><br><br>';
    }
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  11. #11
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Tant qu'à travailler sur un tableau, autant utiliser array_rand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function replace_test($matches)
    {
    $photos = array('newyork.jpg','lasvegas.jpg','losangeles.jpg','sanfran.jpg');
    $pos = array_rand($photos);
     return '<br><br><IMG SRC=" ' . $photos[$pos] . '"  BORDER=0 ALT="USA"><br><br>';
    }

  12. #12
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    Exact! il est vrai que ce code est perfectible en tout point! l'idéale serait même de scanner le repertoire et de supprimer du tableau toute photo déjà affiché
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merci pour toutes vos réponses.
    Je regarde pour l'integrer dans ma page.
    Et si c'est bon je mets le post en RESOLU
    Merci pour votre aide


  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Eh oui c'est encore moi - mais pour la dernière fois ....

    J'ai adapté le script a ma demande et a ma page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?
    $texte ='<br> gfdgdfgdfgd <br> [test]<br> fgdfgdfgdfgdgdgdfgdgdf <br> [test]<br> gdgdgdgdgdgdfgdgdgdfgdfgdfgdf <br> [test]<br> gdfgdgdfdfgdgdgdgdgdgdggdgffd';
    function replace_test($matches)
    {
    $ext = ".jpeg";
    $countdep ="1";
    $count ="0"; 
    $reper="photos/";
    $dir = opendir("photos" )or die("erreur ouverture du dossier" ); 
    while($file = readdir($dir)) 
    { 
     if(!is_dir($file)) 
     { 
      $count ++; 
     } 
    } 
     
    $pos = rand($countdep,$count);
    $total= $reper.$pos.$ext;	
    $alt = "Photo n° : ".$pos;
     return '<br><br><IMG SRC=" ' .$total . '"  BORDER=0 ALT="'.$alt.'"><br><br>';
    }
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
    echo $texte;
    ?>
    Mais je n'arrive pas à mettre en place tes conseils pour eviter les doublons de photos sur une même page.

    Merci pour l'ultime aide à mon script.

    Profil bas .

  15. #15
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?
     
    $reper="photos/";
    $images_disponibles = array();
    $dir = opendir("photos" )or die("erreur ouverture du dossier" ); 
     
    while($file = readdir($dir))  { 
      if(is_file($reper . $file)) { 
        $images_disponibles[] = $reper . $file; 
      } 
    } 
     
     
    function replace_test($matches) {
      global $images_disponibles;
      $image = array_rand($images_disponibles);
      return "<IMG SRC='" .$image . "' />";
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
    echo $texte;
    ?>
    Gillou

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse.

    Mais j'ai toujours le même problèmes à savoir des doublons dans mes photos.
    Cdt

  17. #17
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?
     
    $reper="photos/";
    $images_disponibles = array();
    $dir = opendir("photos" )or die("erreur ouverture du dossier" ); 
     
    while($file = readdir($dir))  { 
      if(is_file($reper . $file)) { 
        $images_disponibles[] = $reper . $file; 
      } 
    } 
     
     
    function replace_test($matches) {
      global $images_disponibles;
      $image = array_rand($images_disponibles);
      return "<IMG SRC='" .$images_disponibles[$image] . "' />";
    unset($images_disponibles[$images]);
    }
     
    $texte = preg_replace_callback('@\[test\]@', 'replace_test', $texte); 
    echo $texte;
    ?>
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  18. #18
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Désolé mais pareil.

    les photos 1.jpeg, 2.jpeg et 3.jpeg apparaissent en doublons.

    1-1-3
    2-1-1
    3-2-3

    etc...

    Désolé

  19. #19
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    peut tu copier/coller ici ton code à l'heure actuel, ne changes rien dessus s'il te plait
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  20. #20
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    une solution (à tester), est de passer par une variable statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function replace_test($matches)
    {
        static $images_disponibles = array();
        if (count($images_disponibles) == 0)
        {
            $reper='photos';
            $dir = opendir(reper); 
            while ($file = readdir($dir))
            { 
                if (is_file($reper . '/' . $file))
                {
                    $images_disponibles[] = $reper . '/' . $file;
                }
            }
        }
     
        $index = array_rand($images_disponibles);
        $image = $images_disponibles[$index];
        unset($images_disponibles[$index]);
     
        return '<IMG SRC="' . $image . '" />';
    }
    Edit : pour la solution de SphynXz, il ne faudrait pas faire le unset après le return

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [OpenOffice][Texte] [MACRO] Remplacer texte par une image
    Par Ry_Yo dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 24/10/2011, 10h59
  2. Remplacer texte par image
    Par zack1475 dans le forum Langage
    Réponses: 4
    Dernier message: 02/04/2011, 18h59
  3. Remplacer texte par une image
    Par einsteineuzzz dans le forum VBA Word
    Réponses: 7
    Dernier message: 26/04/2010, 17h41
  4. PDF - Remplacer texte par un autre
    Par chicorico dans le forum Documents
    Réponses: 10
    Dernier message: 07/07/2009, 17h40
  5. Remplacer texte par image
    Par clara78 dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2009, 08h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo