Page 1 sur 1

passage de variable à

Posté : 12 août 2008, 15:33
par netp
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

Posté : 12 août 2008, 18:40
par dogmongo
dans ta variable les apostrophes ne sont pas ajoutés essai donc ca
$source = imagecreatefromjpeg('$image');

Posté : 12 août 2008, 19:05
par katagoto
Mais non, essaye par $_POST, ou alors urlencode(), urldecode()...

Posté : 12 août 2008, 20:31
par Aureusms
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

Posté : 13 août 2008, 11:38
par katagoto
tu as oublié l'extention...
c'est ça qui coince par GET

Posté : 13 août 2008, 14:18
par Ryle
: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...

Posté : 13 août 2008, 14:28
par dogmongo
je ne le savais pas 8-)

Posté : 13 août 2008, 16:05
par katagoto
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...

Posté : 13 août 2008, 19:32
par Aureusms
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 ?

Posté : 13 août 2008, 21:15
par Ryle
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 ;))

Posté : 14 août 2008, 11:02
par Aureusms
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");

Posté : 14 août 2008, 17:44
par netp
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 !