Php mysql creer une image GD avec les 10 premiers enregistrement de la table [Résolu]

- - Dernière réponse :  wspxenondesign - 21 août 2012 à 13:29
Bonjour a tous,
Je viens vers vous car je suis novice , je commence un peu a travailler sur la librairie GD.
après quelques essais que j'ai effectué.
voila ma question :
j'effectue un boucle while pour récupérer les 10 premiers enregistrement($donnees = $row['nom'];)si je fais un echo cela m'affiche bien les 10 premiers
mais quand je passe a l’opération de création d'image , j'ai bien une image mais avec un seul enregistrement inscrit.



//////////////////////////////////////////////////---MON CODE """"""""header ("Content-type: image/png");"""""""""
$affichage = mysql_query("SELECT id, nom, point, emission FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error());
while( $row = mysql_fetch_array( $affichage ) ){

$donnees = $row['nom'];

$image = imagecreate(250,300);
$orange = imagecolorallocate($image, 255, 128, 0);
$bleu = imagecolorallocate($image, 0, 0, 255);
$bleuclair = imagecolorallocate($image, 156, 227, 254);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);

imagestring($image, 4 , 35 , 15 , $donnees , $blanc);


imagepng($image);

}
merci pour votre aides
cordialement Thierry
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Dernière intervention
11 mars 2013
3
Merci
En fait il faut voir la création d'une image comme la suite de procédés suivante:

déclaration -> construction de l'image (i.e. dessin) -> production de l'image affichable -> fin.

C'est très linéaire comme fonctionnement. En gros, GD crée une image à la fois (en tout cas lorsque tu "affiches directement" (i.e. pas dans un fichier) ton image.

Du coup ta première image est créée puis l'appel à imagepng() indique la fin du processus de création.

Pour créer plusieurs images, tu peux faire un truc du genre

fichier affichage.php
<?php
//...
$affichage = mysql_query("SELECT id FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error()); 
while( $row = mysql_fetch_array( $affichage ) ){
    echo '';
}
//...
?>


image.php
header ("Content-type: image/png");""""""""" 
$affichage = mysql_query("SELECT nom, point, emission FROM vote WHERE id='".mysql_real_escape_string($_GET['id']."') or exit (mysql_error());
$row = mysql_fetch_assoc( $affichage )

$donnees = $row['nom']; 

$image = imagecreate(250,300); 
$orange = imagecolorallocate($image, 255, 128, 0); 
$bleu = imagecolorallocate($image, 0, 0, 255); 
$bleuclair = imagecolorallocate($image, 156, 227, 254); 
$noir = imagecolorallocate($image, 0, 0, 0); 
$blanc = imagecolorallocate($image, 255, 255, 255); 

imagestring($image, 4 , 35 , 15 , $donnees , $blanc); 
imagepng($image);


(code pas testé et pas spécialement propre, c'est juste pour te donner une piste de comment on peut faire).

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JulSoft
Messages postés
90
Date d'inscription
mardi 6 octobre 2009
Dernière intervention
31 mars 2014
23
3
Merci
Bonjour,

une autre solution est de séparer l'initialisation des données, de la création de l'image. tel que :

//////////////////////////////////////////////////---MON CODE """"""""header ("Content-type: image/png");""""""""" 
$affichage = mysql_query("SELECT id, nom, point, emission FROM vote WHERE emission !='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error()); 
$donnees="";

while( $row = mysql_fetch_array( $affichage ) ){ 
    $donnees .= $row['nom']; 
}

$image = imagecreate(250,300); 
$orange = imagecolorallocate($image, 255, 128, 0); 
$bleu = imagecolorallocate($image, 0, 0, 255); 
$bleuclair = imagecolorallocate($image, 156, 227, 254); 
$noir = imagecolorallocate($image, 0, 0, 0); 
$blanc = imagecolorallocate($image, 255, 255, 255); 

imagestring($image, 4 , 35 , 15 , $donnees , $blanc); 
imagepng($image); 


la différence est que le code de JulSoft va créer 10 images contenant un row pour chaque image.
par contre, ce code va créer 1 image contenant les 10 rows. Mais il te reste de rechercher comment mettre chaque row sur une ligne.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de xranto
0
Merci
bonjour à tous merci pour vos réponses
je prendrai le code de XRANTO : ce que je veux faire c'est bien une seule image avec les 10 $row

Mais j'ai encore une petite question : je voudrais mettre les résultats non pas derrière les autres mais en dessous de autres.

Entre deux, j'avais essayer un autre code.qui fonctionne aussi mais qui est beaucoup trop long
. le voici :

Je suis sur qui y a plus simple sans devoir passer par un fichier extérieur:


////////////////////
$affichage = mysql_query("SELECT id, nom, point FROM vote WHERE emission='".$obu."' ORDER BY point DESC limit 10 ") or exit (mysql_error());
$monfichier = fopen('aa.txt', 'w+');
$moi ="";

fputs($monfichier, $moi);

fclose($monfichier);
while( $row = mysql_fetch_array( $affichage ) ){

$donnees = $row['nom'];
$voting = $row['point'];
$donnees = Tronquer_Texte($donnees , 30);
$donnees = $donnees."-";
//$donnees = addslashes ($donnees);
//print $donnees;


$monfichier = fopen('aa.txt', 'a+');


fputs($monfichier, $donnees);

fclose($monfichier);



}



mysql_close();


$monfichier = fopen('aa.txt', 'r+');

// 2 : on lit la première ligne du fichier
$ligne = fgets($monfichier);

// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);

$image_path = "votedjs.jpg";
$lignes = explode("-",$ligne);
$font = 'LucidaSansDemiBold.ttf';
//header ("Content-type: image/png");
$image = imagecreate(303,453);
$image2 = imagecreate(333,433);
$orange = imagecolorallocate($image, 232, 232, 232);
$orange2 = imagecolorallocate($image2, 57, 232, 57);
$bleu = imagecolorallocate($image, 128, 128, 128);
$bleuclair = imagecolorallocate($image, 255, 0, 0);
$noir = imagecolorallocate($image, 0, 0, 0);
$blanc = imagecolorallocate($image, 255, 255, 255);
$source4 = imagecreatefromJPEG("logo.jpg");
$source1 = imagecreatefromJPEG("barre.jpg");
$source2 = imagecreatefromJPEG("topdj.jpg");
imagecopymerge($image2, $image, 0, 0, 0, 0, 313, 413, 100);
imagecopymerge($image, $source2, 80, 5, 0, 0, 170, 45, 100);
$a = "60";
imagecopymerge($image, $source1, 0, 10, 0, 0, 57, 375, 100);
imagecopymerge($image, $source4, 40, 200, 0, 0, 252, 255, 20);

//imagestring($image, 4 , 60 , 20 , $lignes[0] , $noir);
//imagettftext($image, 10, 0, 60, 20, $bleu, $font, $lignes[0]);
imagettftext($image, 10, 0, $a, 70, $bleuclair, $font, $lignes[0]);
imagettftext($image, 10, 0, $a, 100, $noir, $font, $lignes[1]);
imagettftext($image, 10, 0, $a, 132, $noir, $font, $lignes[2]);
imagettftext($image, 10, 0, $a, 165, $noir, $font, $lignes[3]);
imagettftext($image, 10, 0, $a, 198, $noir, $font, $lignes[4]);
imagettftext($image, 10, 0, $a, 231, $noir, $font, $lignes[5]);
imagettftext($image, 10, 0, $a, 264, $noir, $font, $lignes[6]);
imagettftext($image, 10, 0, $a, 293, $noir, $font, $lignes[7]);
imagettftext($image, 10, 0, $a, 325, $noir, $font, $lignes[8]);
imagettftext($image, 10, 0, $a, 355, $noir, $font, $lignes[9]);

imagepng($image);
imagepng ($image, $image_path);
imagedestroy($image);
//////////////////////////////////////////////////////
Commenter la réponse de wspxenondesign
Commenter la réponse de wspxenondesign

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.