Passage de variable dans une image dynamique

Bonjour,

après installation de la librairie gd, je veux créer une image dynamique générée par un fichier php dans une page html, de cette manière :
print("<img src=‘image.php’>") ; (C'est le fichier .php qui crée l'image)

Cela fonctionne, mais le problème c'est que je veux passer une variable (en fait un tableau) au fichier image.php.

Le code marche quand j'ai aucune variable à passer dans le fichier image.php, (j’ai bien mon image généré) mais malheureusement le passage de variable ne passe pas lorsque je fait ceci:
print(<img src=‘image.php?tab=<? php echo $_SESSION[‘tab’];?> ’>”);
il s’affiche un carré vide.

Dans image.php, je récupère mon tableau comme ceci :
$tab=$_SESSION[‘tab’];

Peut-on m'aider svp
Configuration: Windows XP
Firefox 3.0.5

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Salut,

    Il est impossible de passer un tableau comme ça.

    Mais tu peux utiliser serialize pour le transformer afin de le transférer et unserialize pour le remettre sous forme de tableau sur l'autre page.
    1. Merci de ta réponse,

      je vais me documenter sur l'utilisation de serialize et unserialise.
      mais il est possible de passer un tableau d'une page à l'autre ce n'est pas possible dans ce cas çi car on le fait une image? C'est ça?
  2. Non, il est impossible de passer un tableau en paramètre d'une page à une autre.

    Après, là, je ne vois pas trop ce que tu veux faire avec
    print("<img src=‘image.php’>")
    1. Contributeur
      salut,

      tu ne nous dis pas tout !
      si tu veux récupérer ton tableau comme ça :
      $tab=$_SESSION[‘tab’]; 

      pas besoin de passer le tableau dans l'URL…

      tu stockes dans la variable de session et tu récupères dans la variable de session.

      au pire tu pourrai l'écrire dans un fichier texte et juste transmettre le nom du fichier par URL mais je ne trouve pas ça très propre.

      et pour serialize() regarde le manuel, il me semble qu'il ne faut pas l'utiliser dans une URL.
      1. Merci de ta réponse.

        Oui je vois bien comment passer un tableau d'une page à une autre via les sessions.

        Je veux je veux passer un tableau au fichier image.php. ce fichier étant celui qui crée l'image (car je veux créer une image dynamique générée par un fichier php dans une page html, de cette manière)

        Je met un bout de code pour me faire comprendre.

        Soit

        SCRIPT a.php
        <?php

        session_start();

        if(isset($_SESSION['user_login']))
        {
        $user_login=$_SESSION['user_login'] ;

        print("You are logged as <b>$user_login</b><br><br>");

        }
        else
        {
        header ("Location: form_identification.html");
        }
        ?>

        <?php
        //j'en viens à l'essentiel

        $tableau=array();
        for($i=0; $i<count($essai); $i++)
        {
        array_push($tableau,"".$essai[$i][0]."" "".$essai[$i][1]."" "".$essai[$i][2]."" "".$essai[$i][3]."")

        }
        $_SESSIONS['tableau']=$tableau;

        print("<img src='image.php?'>"); //ceci afin d'intégrer une image dans une page HTML
        ?>

        SCRIPT image.php
        //ce script permet de générer mon image. (des rectangles (içi 2) leur nombre correspond au nombre d'éléments dans mon tableau (içi $rectangle) et au dessus de chaque rectangle j'inscrit le nom de l'élément (içi element1 et element2)
        <?php

        session_start();

        if(isset($_SESSION['user_login']))
        {
        $user_login=$_SESSION['user_login'] ;

        print("You are logged as <b>$user_login</b><br><br>");

        }
        else
        {
        header ("Location: form_identification.html");
        }
        ?>

        <?php
        $x = 210;
        $y = 120;

        $im = imagecreatetruecolor ($x,$y) or die ("Impossible de crée un flux d'image GD");

        //CREATION DES VARIABLES COULEURS
        $vert = imagecolorallocate ($im, 0, 255, 0);
        $gris = imagecolorallocate ($im, 91,91 ,91 );

        $rectangle=array("element1","element2");

        $barreLargeur = (int)(($x-35)/(1.5*count($subunit)+0.5));

        for ($i=0; $i<count($element); $i++)
        {
        $x = 10+(int)($barreLargeur*(0.5+$i*1.5));
        $barreHauteur = 30;

        imagefilledrectangle($im,
        $x,
        $y-60-$barreHauteur,
        $x+$barreLargeur,
        $y-60,
        $vert);

        //permet d'écrire le nom des sous-unité juste au-dessus
        imagestring ($im, $titre_police, $x, $y-63-$barreHauteur-10, $element[$i], $gris);
        }

        imagepng ($im);

        ?>

        Dans cet example tout fonctionne,
        ce que je veux c'est récupérer le tableau $tableau (du script a.php) dans image.php de manière à faire un autre schéma. Comment récupérer le tableau?

        j'espère avoir tout dit etre clair...
      2. @pontaroseVu que tu utilises déjà les sessions, le plus simple est de continuer.

        Tu as juste à stocker ton tableau dans une variable de session comme ça tu pourras y accéder de n'importe quelle page.
    2. Contributeur
      salut,

      ce que je veux c'est récupérer le tableau $tableau (du script a.php) dans image.php de manière à faire un autre schéma. Comment récupérer le tableau?
      en début de "image.php" tu démarres la session puis tu récupères la valeur après avoir testé si elle existe.
      <?php
      	session_start(); // si ce n'est pas déjà fait par ailleurs
      
      	if(isset($_SESSION['tableau']))
      		$tableau = $_SESSION['tableau'];
      	else
      		// traitement d'erreur : pas de tableau
      ?>
      

      dis nous ce que ça donne !
      -;o)
      1. Je n'ai pas de message d'erreur.
        néanmoins quand je fais un print_r($tableau): mon tableau ne s'affiche pas et j'ai un carré vide pour mon schéma
      2. @pontaroseil semble que je ne peux pas mettre de print dans mon fichier image.php car celui-ci est dédié à la génération de mon schéma.
    3. Contributeur
      pour débuguer tu peux écrire dans un fichier texte.
      ob_start();
      print_r($tableau);
      file_put_contents('debug.log', ob_get_contents());
      ob_end_flush();
      

      c'est pas très académique mais ça me dépanne souvent…
      1. j'ai mis cela dans un fichier test.php et je le lance en ligne de commande php test.php mais je n'obtiens rien.
        Je l'ai mis dans mon fichier a.php mais j'obtiens le message suivant: warning: file_put_contents (debug.log): failed to open stream: Permission denied in ../../../ on line...
      2. Contributeur
        @pontarosesalut,

        tu le fais en local ?
        crée toi même le fichier, avec le CHMOD ad hoc, ça devrait bien finir par passer !