passage de variable à

Petit nouveau ! | 4 Messages

12 août 2008, 15:33

Bonjour,

Je coince sur une fonction que je n'ai pas l'habitude de manipuler :

Code : Tout sélectionner

$image=$_GET['img']; $source = imagecreatefromjpeg($image); // source image
Me renvoit une image noire alors que si j'écris $source = imagecreatefromjpeg('toto.jpg') c'est tout bon !! Pourtant $_GET['img'] vaut "toto.jpg"

Grand merci

Mammouth du PHP | 804 Messages

12 août 2008, 18:40

dans ta variable les apostrophes ne sont pas ajoutés essai donc ca
$source = imagecreatefromjpeg('$image');
Modifié en dernier par dogmongo le 12 août 2008, 20:36, modifié 1 fois.

Mammouth du PHP | 1668 Messages

12 août 2008, 19:05

Mais non, essaye par $_POST, ou alors urlencode(), urldecode()...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 1996 Messages

12 août 2008, 20:31

Hmm si je comprend bien tu as dans une variable $_GET le line vers ton image jpeg ?
Si tu as $_GET['img'] = "photo3"; soit index.php?img=photo3 (on est daccord ?), tu devrais indiquer où ce situe la racine de ta photo, non ? Genre
<?php
$image="photo/".$_GET['img'];
if (file_exists($image)) $source = imagecreatefromjpeg($image);
else echo 'pas de fichier image';
?>
Au fait je te conseille de tester si c'est une image jpg avec pathinfo(); voir http://www.manuelphp.com/php/function.pathinfo.php
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Mammouth du PHP | 1668 Messages

13 août 2008, 11:38

tu as oublié l'extention...
c'est ça qui coince par GET
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 août 2008, 14:18

:evil: :evil: :evil:
dans ta variable les apostrophes ne sont pas ajoutés essai donc ca
$source = imagecreatefromjpeg('$image');
C'est archifaux :!:
Une variable contient une valeur, et il peut très bien s'agir d'une chaine, il n'est pas nécessaire d'ajouter des apostrophes ou des guillemets autour. De plus le fait d'utiliser des apostrophes aura pour effet de déclarer la chaine '$image' telle quelle et certainement pas faire appel à la valeur contenue par la variable $image (voir la différence d'interprétation entre apostrophes et guillemets)
Mais non, essaye par $_POST, ou alors urlencode(), urldecode()...
Aucun rapport. Il envoi une chaine de caractère correspondant au nom/chemin du fichier. Il pourrait l'envoyer en get, en post ou par pigeon voyageur que ca n'y changerait rien... et côté caractères spéciaux à encoder, "toto.jpg" ca me parait assez simple à transmettre...
tu as oublié l'extention...
c'est ça qui coince par GET
Une fois encore, je ne vois pas le rapport entre l'omission de l'extension dans la suggestion d'Aureusms et le bug de départ...


Bref, tout ça pour dire qu'on a pas assez d'élément pour t'aider.

Si $source = imagecreatefromjpeg('toto.jpg'); fonctionne, c'est qu'il y a bien une image nommée toto.jpg dans le dossier courrant et qu'elle est du bon type, sinon ca ne fonctionnerait pas. Ton code semblant donc correct, assures-toi que quand tu remplaces 'toto.jpg' par $_GET['img'], la valeur de cette dernière soit bien égale à 'toto.jpg' en l'affichant (genre y a pas d'espace avant ou après..), et en vérifiant que tu ais bien dans l'url de la page la chaine : ?img=toto.jpg ou &img=toto.jpg puisque la donnée est apparement envoyée en GET...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 804 Messages

13 août 2008, 14:28

je ne le savais pas 8-)

Mammouth du PHP | 1668 Messages

13 août 2008, 16:05

Mais non, essaye par $_POST, ou alors urlencode(), urldecode()...
Aucun rapport. Il envoi une chaine de caractère correspondant au nom/chemin du fichier. Il pourrait l'envoyer en get, en post ou par pigeon voyageur que ca n'y changerait rien... et côté caractères spéciaux à encoder, "toto.jpg" ca me parait assez simple à transmettre...
tu as oublié l'extention...
c'est ça qui coince par GET
Une fois encore, je ne vois pas le rapport entre l'omission de l'extension dans la suggestion d'Aureusms et le bug de départ...
Ce que je veux dire c'est que je suis pas catégorique sur le fait que le . passe bien lors des transmition par GET...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 1996 Messages

13 août 2008, 19:32

Tu n'as qu'à le rajouter après . C'est pourquoi j'avais préciser ?img=photo3 (et oublié l'extension on est d'accord LOL).

Un p'tit coup de pouce : pour enlever les espaces avant et après ta variable, utilises trim();
Ce qui te donnera :
<?php
$image="photo/".trim($_GET['img']).".jpg";
if (file_exists($image)) $source = imagecreatefromjpeg($image);
else echo 'pas de fichier image';
?>
Tiens une petite question pour Ryle (avant qu'il me dispute LOL) :
L'extension est-elle vraiment nécessaire ? Si oui, doit elle être .jpg, .jpeg, .JPG, ... Tu vois le genre ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 août 2008, 21:15

Ce que je veux dire c'est que je suis pas catégorique sur le fait que le . passe bien lors des transmition par GET...
Ben dis le alors ;)
Quant à moi je suis catégorique là dessus, et le meilleur exemple que tu en ais se trouve dans tous les noms de domaine : ".com", ".fr", ".nimportequoi" et il passe très bien :)
Tiens une petite question pour Ryle (avant qu'il me dispute LOL) :
L'extension est-elle vraiment nécessaire ? Si oui, doit elle être .jpg, .jpeg, .JPG, ... Tu vois le genre ?
Arf, bah pour l'instant tu t'en sors pas mal comparé aux 2 autres ;)

Et en effet, l'extension est importante, elle fait partie intégrante du nom du fichier (même si les dernières versions de windows le masque par défaut). Tu peux ainsi très bien avoir deux fichiers jpg ayant le même nom et pour extension jpg et jpeg (sous windows) voire des JPG, jPg JpEg (sous unix qui distingue la casse). Il est donc important de la spécifier :)

Ceci étant, il est vrai que l'extension ne sert qu'à dire au système quel logiciel utiliser pour ouvrir le fichier. On pourrait donc très bien avoir une image jpeg portant le nom "fichier.mp3" (le seul inconvénient serait que winamp se lance quand on double clique dessus ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

14 août 2008, 11:02

Oui mais dans ce cas là, PHP peut traiter la variable avec ou sans l'extension ?
I.e
$source = imagecreatefromjpeg("photo/photo3");
//ou
$source = imagecreatefromjpeg("photo/photo3.JpG");
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Petit nouveau ! | 4 Messages

14 août 2008, 17:44

Merci à tous pour vos suggestions !! J'ai vérifié tous les points suggérés et voici le code final qui marche très bien :

Code : Tout sélectionner

if(isset($_GET['img']) && $_GET['img']!="") { $image="contribution/upload/".$_GET['img']; $source = imagecreatefromjpeg($image); // source image $img_redim = imagecreatetruecolor(200, 150); //image miniature vide crée // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur de l'image source $largeur_source = imagesx($source); $hauteur_source = imagesy($source); $largeur_destination = imagesx($img_redim); $hauteur_destination = imagesy($img_redim); // On crée la miniature imagecopyresampled($img_redim, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); // On indique le chemin où positionner l'image redimensionnée $chemin = 'contribution/vignettes/'.$_GET['img'];; Imagejpeg($img_redim,"$chemin" ); //on affiche l'image redimensionnée echo '<div id="imageSoumise"><img src="'.$chemin.'"></div>'; }
encore merci !