Grafische Auswertung mit imageline

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Grafische Auswertung mit imageline

    Jetzt mal ein echtes Problem. Habe hier mal gestöbert, aber nichts gefunden.
    Ich möchte eine Linien-Grafik (Chart) erzeugen, die mir abhängig von Werten aus einer Datenbank diese dann darstellt.

    1. Kann man Grafiken nur über
    PHP-Code:
    Print "<img src='test2.php?userid=$userid&zeit=$zeit&anzahl=$anzahl&usercount=$usercount'>"
    einbinden?

    2. Im test2.php, wo ich die Grafik erzeuge, kann ich keine SQL Abfrage ausführen. Liegt das am
    PHP-Code:
    header ("Content-type: image/png"); 
    oder mache ich was anderes falsch?

    3. Die Gesamtgrafik wird dynamisch zusammengebaut. Höhe und Breite ist abhängig von den gefundenen Datensätzen. (klappt schon - freu) Wie kann kann ich die vorher berechneten Endwerte der Linien als Anfangswerte der neuen Linie weitergeben? (x und y Werte) Wird ja eine Menge an Daten, da jede Linie eine eigene Farbe bekommen soll.

    4. Vielleicht gibt es ja Beispiele? (zwar keine gefunden, aber man weiss ja nie)
    Gruss Sven

  • #2
    in der test2.php solltest du eigentlich alles machen können. Warum auch nicht. Vielleicht solltest du mal ein Auszug posten.

    Ansonsten gibts für sowas schon fertige Progs, die allerdings meist überladen sind. (solltes du bei deiner Suche im Forum bestimmt gelesen haben.)

    Kommentar


    • #3
      Danke für den Tip mit den fertigen Scripten. Habe da eines gefunden ykcee, welches mir ganz gut gefällt und nach Anpassung seinen Zweck erfüllt.

      Jetzt habe ich nur enorme Probleme das auf dynamisch umzustellen.
      Folgende Zeilen müssten angepasst werden.
      Original:
      PHP-Code:
      srand ((double) microtime() * 1000000);
          
      $a 25;
          
      $b 23;
          
      $c 18;
          
      $d 0;
          for (
      $i=0$i<25$i++) {
              
      $a += rand(-22);
              
      $b += rand(-55);
              
      $c += rand(-22);
              if (
      $a 0$a 0;
              if (
      $b 0$b 0;
              if (
      $c 0$c 0;

              
      $data[$i] = array("value $i"$a$b$c);     
          }

          
      $graph->SetDataValues($data); 
      Die Seite ghostwm ist für eine F1-Spiele WM-Tabelle. Teilnehmer senden Ihre gefahrenen Rundenzeiten / Strecke ein und wenn als gültig geprüft, erstelle ich einen Eintrag in die Tabelle "wm_minmaxghost" mit den Werten id (auto), zeit, userid, streckenid, datumabgabe (unixtimestamp).
      Jeder Fahrer kann erneut eine Zeit abgeben, womit die bisherige gelöscht wird. (natürlich bleiben die Einträge in "wm_minmaxghost" erhalten) Bei geprüft und gültig kommt dann ein weiterer Eintrag in die besagte Tabelle. Jetzt möchte ich eine Grafik erzeugen, wo man diese Tabelle auswertet. Also für jeden Fahrer eine Linie erzeugen, welchen Platz er zu welchem Zeitpunkt hatte. Die y-Achse (vertikal) sollte dabei den Platz anzeigen und die x-Achse (horizontal) das Datum des nächsten Eintrages. Somit kann jeder seine Veränderung der Platzierung über den Gesamtzeitraum erkennen.

      Ich komme jetzt aber mit den Multiarrays nicht weiter. Die x-Achse mit dem Datum des nächsten Eintrages funktioniert schon.
      Jetzt denke ich, muss die Schleife bei jedem Durchlauf alle Datensätze mit "datumabgabe" <= "datumabgabe" selektieren. Die Zeiten vergleichen und die Platzierung für jede "userid" festhalten. Nur wie geht das ganze dynamisch und wird pro userid in die Variablen geschrieben? (Mein Kopf zerplatzt bei den ganzen Multiarrays..)


      Ein kleiner erster Ansatz sieht wie folgt aus Testchart.

      PHP-Code:
      // Anzahl gültiger Zeiten (Datensätze) der Strecke (horizontal)
          
      $countresult mysql_query ("SELECT count(*) as anzahl FROM wm_minmaxghost WHERE streckenid = '30'",$db) or die ('<b>Fehler bei select: </b>'mysql_error());
          
      $datencount mysql_fetch_array($countresult);
          
      $anzahl $datencount[anzahl];
          
          
      // Schleife für jeden Eintrag    
          
      for ($i=0$i $anzahl$i++) 
          
          {
              
      $next $i 1;
              
      $result mysql_query ("SELECT streckenid, zeit, datumabgabe, userid FROM wm_minmaxghost WHERE streckenid = '30' Limit $i,$next",$db)     or die ('<b>Fehler bei select: </b>'mysql_error());
              
      $daten mysql_fetch_array($result);
              
              
      $result2 mysql_query ("SELECT streckenid, zeit, datumabgabe, userid FROM wm_minmaxghost WHERE streckenid = '30' order by zeit Limit 0,$next",$db) or die ('<b>Fehler bei select: </b>'mysql_error());
              
      $daten2 mysql_fetch_array($result2); //erneut alle Datensätze bis datumabgabe
              
              
      $date strftime('%d.%m.%y'$daten[datumabgabe]); //Datum für x Achse

              
      $a $daten[userid];
          
              if (
      $date 0$date 0;
              if (
      $a 0$a 0;
          
              
      $data[$i] = array($date$a);     
          }

          
      $graph->SetDataValues($data); 
      $a zeigt im Moment nur zu Testzwecken die Userid als Linie an! Soll natürlich später die Platzierung (1., 2., 3. , .....) der "userid" werden.
      Hoffentlich versteht mich einer
      Gruss Sven

      Kommentar


      • #4
        @TobiaZ
        Kannst Du bitte nochmal kurz einen Blick draufwerfen? Komme mit den Multiarrays einfach nicht klar.
        Vielen Dank, für die Mühe....
        Gruss Sven

        Kommentar

        Lädt...
        X