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

wspxenondesign - 9 août 2012 à 14:31 - 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 

4 réponses

Répondre au sujet
JulSoft 354 Messages postés dimanche 3 juin 2001Date d'inscription 11 mars 2013 Dernière intervention - 14 août 2012 à 04:50
+3
Utile
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).
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de JulSoft
xranto 90 Messages postés mardi 6 octobre 2009Date d'inscription 31 mars 2014 Dernière intervention - 20 août 2012 à 10:35
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de xranto
wspxenondesign - 21 août 2012 à 13:20
0
Utile
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.