Machen Sie die Daten sichtbar.Im Prinzip nicht kompliziert, aber... Ein Browser lädt zuerst die Stammseite, wertet die darin enthaltenen Elemente aus und ruft diese einzeln ab. Eine Bildquelle muss nicht zwangsläufig eine Bilddatei sein, es kann durchaus ein PHP Script sein, in diesem Fall die Datei z_statistik.php5. Die Werte werden dem script in einem einzigen langen String übergeben, jeweils durch "-" getrennt. Dieser String wird aus dem Array $_GET[] gelesen, durch explode zerlegt und in einem Array $werte abgelegt. Das Bild erzeugenDas "Zauberwort" ist ImageCreate() und zum Schluss die Erzeugung des speziellen HTTP-Headers für den Typ des Inhaltes: header(...). Die Ausgabe des Bildes erfolgt durch ImagePng() und letztlich entfernt ImageDestroy() das Bild aus dem Speicher. Dazwischen liegt einfachste Arithmetik und ein wenig Fummelei. Es hilft nichts, Sie müssen sich mit den Bildfunktionen vertraut machen. Die Datei z_statistik.php5: /* werte[0..4] fuer Bewertung 1 bis 5, werte[5] = Gesamtsumme */ $werte = explode("-",$_GET['werte']); $hoch=200; $breit=150; $factor=($hoch-20)/100; $bild=ImageCreate($breit,$hoch); ImageColorAllocate($bild,255,255,255); $orange=ImageColorAllocate($bild,241,103,51); $farbe[0]=ImageColorAllocate($bild,255,0,0); $farbe[1]=ImageColorAllocate($bild,225,0,0); $farbe[2]=ImageColorAllocate($bild,200,0,0); $farbe[3]=ImageColorAllocate($bild,175,0,0); $farbe[4]=ImageColorAllocate($bild,125,0,0); // y-Achse ImageLine($bild,30,$hoch-10,$breit,$hoch-10,$orange); // x-Achse ImageLine($bild,30,10,30,$hoch-10,$orange); // Einteilung/Beschriftung der y-Achse for ($ye = 100 ; $ye >= 0 ; $ye -= 10 ){ if ($ye % 20){ // y-Einteilung fein ImageLine($bild,27,10+$ye*$factor,30,10+$ye*$factor,$orange); } else { // y-Einteilung grob ImageLine($bild,25,10+$ye*$factor,30,10+$ye*$factor,$orange); ImageString($bild,1,5,$ye*$factor,100-$ye.'%',$orange); } } $balken=0; for ($ii = 0 ; $ii < (count($werte)-1); $ii++){ //prozent $hoehe =100/$werte[5]*$werte[$ii]; //Balken ImageFilledRectangle($bild,$balken+40,$hoch-10-($hoehe*$factor), $balken+50,$hoch -11,$farbe[$ii]); // x Beschriftung ImageString($bild,1,$balken+43,192,$ii+1,$orange); $balken +=20; } header('Content-type: image/png'); ImagePng($bild); ImageDestroy(); |
Die Fehlersuche nicht ganz einfach.Wenn der Browser nichts darstellt hat PHP möglicherweise eine Fehlerausgabe erzeugt: damit kann der Browser bei einem Bild nichts anfangen und unterdrückt sie.Es kann hilfreich sein, das Script über die Adresszeile des Browsers direkt aufzurufen. Entfernen Sie für die Fehlersuche die Zeile header(...) damit der Browser die Daten nicht als Bild zu erkennen versucht. Wie versprochen, die Dateien zum download in einem tar Archiv.
Abstimmung in der Version vom 21.01.11 13:45
| |