Creer un jpg a partir d'une BDD

Mammouth du PHP | 686 Messages

18 oct. 2008, 19:19

Bonjour, j'ai ce code, la boucle pour recuperer le no mde la photo fonctionne je l'ai testée sur une autre page mais par contre dans ce code ca ne m'affiche pas l'image.
d'ou vient ke probkème ?
merci
<?php
//------------------------------------------------------------------------------------------
//     applcation d'un copyright  sur une photo
//------------------------------------------------------------------------------------------
// on spécifie le type de fichier créer (ici une image de type jpeg)  
header ("Content-type: image/jpeg");
$id = $_GET['id']; 
include("admin/connect.php");
@MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
@MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
$sql=mysql_query("SELECT nom FROM wallpaper WHERE id='$id'");
while($result=mysql_fetch_array($sql)){ 
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
$fichier_source = $result[nom];
} 
$fichier_copyright = "copyright.png";  
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);  
$im_copyright = ImageCreateFrompng ($fichier_copyright);  
 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);  
$haut_destination = imagesy ($im_source);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);  
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);  
 
// on calcule la position sur l'axe des abscisses de la vignette  
//$x_destination_copyright = $larg_destination - $larg_copyright;  
$x_destination_copyright = $haut_destination - $haut_copyright - 100; 
$y = $larg_destination - $larg_copyright; 
 
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
@imageCopyMerge ($im_source, $im_copyright, 
       $y, $x_destination_copyright, 0, 0, $larg_copyright, 
      $haut_copyright, 80);  
// on affiche notre image copyrightée  
Imagejpeg ($im_source);  
?>

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

18 oct. 2008, 20:53

Et en l'occurence, ça t'affiche quoi ? :)

L'operateur de silence "@" permet de ne pas afficher les messages d'erreur de php... c'est pas forcément judicieux de les utiliser quand on essaye de débuger. S'il y a un problème avec la fonction imageCopyMerge() jamais tu ne le sauras... commence peut être par les virer et voir ce que te dis php :)

Les chemins vers les images depuis ce script sont-ils corrects ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 686 Messages

19 oct. 2008, 02:19

Il ne me met rien, il m'affiche juste un carré avec une croix rouge comme quoi il ne trouve pas l'image.
Les chemins sont justes car si je fait le même script dans un php normal en ce qui concerne la recuperation du nom de la photos dans la base de donnée, il me renvoi bien le nom de la photo dans la base.
Je seche a fond sur ce coup là

ViPHP
ViPHP | 2287 Messages

19 oct. 2008, 05:46

Comment avoir des messages d'erreur en trois étapes :

1/ Enlève tous les @ devant les noms de fonction, comme Ryle te l'indique.
2/ Commente provisoirement la ligne header() en début de script. Tu devrais voir une horrible bouillie de caractères à la place de ton image (avec, si tu as de la chance, un message d'erreur bien lisible dedans)
3/ Si tout cela ne suffit pas, ajoute en tout début de script un
error_reporting(E_ALL);
pour afficher tout message d'erreur.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 686 Messages

19 oct. 2008, 10:37

j'avais ce message
Notice: Use of undefined constant nom - assumed 'nom' in /home/c/p/n/cpn-lours/www/wallpaper/fd_ecran_cpn.php on line 14
j'ai donc mis $nom = $result['nom'] et je n'ai plus le message d'erreur, juste les lignes de charabia. Lorsque je remet mon header cela ne fonctionne toujours pas
Voici le lien sans le header
http://cpn-lours.ovh.org/wallpaper/fd_e ... .php?id=59
et avec
http://cpn-lours.ovh.org/wallpaper/fd_e ... .php?id=59

ViPHP
ViPHP | 2287 Messages

19 oct. 2008, 13:26

Il y a des caractères parasites au début de ton image. Encore une victime du BOM ?

--------------------------

Edit : ah ben non :-) Tu as laissé traîner un retour à la ligne affiché quelquepart dans ce fichier (ou dans include/connect.php) qui empêche la validation du fichier jpeg et donc, son affichage.

Il suffit de supprimer ce retour chariot parasite.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 686 Messages

19 oct. 2008, 14:18

j'ai supprimé mes retours chariot et toujours le problème ... :shock: je desespere

ViPHP
ViPHP | 2287 Messages

19 oct. 2008, 14:24

j'ai supprimé mes retours chariot et toujours le problème ... :shock: je desespere
Faut pas, tu touches au but.

Le retour chariot que tu dois supprimer est soit :

- dans le code PHP, dans une instruction echo ou print (mais c'est peu probable)
- Hors du code PHP, soit avant une balise de début ( <?php ), soit après une balise de fin ( ?> ). Tu peux dans tous les cas supprimer les ?> situés en fin de fichier, comme dans le code que tu as posté ici, ils sont inutiles et peuvent engendrer le problème que tu rencontres. Et n'oublie pas de faire pareil pour admin/connect.php et tous les éventuels fichiers inclus.

Si ça peut te redonner de l'espoir j'ai réussi à voir les fleurs de ton fond d'écran, comme quoi la solution est vraiment à portée de main ;-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 686 Messages

24 oct. 2008, 19:41

Merci beaucoup !!!!!
Effectivement il s'agissait de supprimer mon ?> à la fin de mon fichier connect.php