zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

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 erzeugen

Das "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
Logo