php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.01.2012, 11:24  
Neuer Benutzer
 
Registriert seit: 22.12.2011
Beiträge: 24
PHP-Kenntnisse:
Anfänger
Timy befindet sich auf einem aufstrebenden Ast
Standard SQL Daten als Graph darstellen

Hallo!

Ich habe in einem älteren Beitrag meine Daten (Temperaturen aus einer SQL) über ein Formular mir Datumsweise anzeigen lassen.
Das hat soweit (nach hilfe) auch gut funktioniert.

Jetzt möchte ich mir die Daten, seperat noch als graph ausgeben lassen.
Ich habe mich mit jpgraph beschäftigt.

Ich bekomme auch einen graph (mit festen Werten) gezeichnet.
Jetzt müssen natürlich noch die Daten aus der sql rein (die ich über mein Eingabe Formular abfrage).

Dies ist mein script.

PHP-Code:
<?php

    
include ('../dbconnection.php');

$hasFormData = isset($_POST['formSender']);

if ( 
$hasFormData ) {
    
// form daten vorhanden

    
$dateFromWeb = isset($_POST['theDate']) ? $_POST['theDate'] : false;

    if ( 
$dateFromWeb ) {
        
// datum gesetzt

        
$validDate date_create($dateFromWeb);

        if ( 
$validDate ) {
            
// datum ist valide
             
            
$sqlDate $validDate->format('Y-m-d');
            
$result mysql_query("SELECT datum, zeit, wohnzimmer FROM $Table WHERE DATE(datum) = '$sqlDate' ORDER BY zeit"$DatabaseConnect);

            if ( 
$result ) {
                
$dataForWeb = array();
                while ( 
$current mysql_fetch_object($result) ) {
                    
$dataForWeb[] = array(
                  
'datetime' => date_create($current->datum.' '.$current->zeit)->format('d.m.Y H:i'),
                  
'temp' => $current->wohnzimmer
                    
);
                }

                if ( 
count($dataForWeb) == $searchResults 'Die Suche lieferte 0 Ergebnisse.';
                else {
                    
$html = array();
                    foreach ( 
$dataForWeb as $row ) {
                        
$html[] = '<p>'.$row['datetime'].' : '.$row['temp'].' &deg;</p>';
                    }

                    
$searchResults join($html);
                }

            }
            else {
                
$searchResults 'Die Datenbankabfrage lieferte Fehler.';
            }

        }
        else {
            
$searchResults 'Die Datumseingabe ist kein reelles Datum.';
        }

    }
    else {
        
$searchResults 'Sie muessen ein Datum eingeben.';
    }

}
?><!DOCTYPE html>
<html lang="de">
   <head>
      <title>Datumseingabe</title>
      <meta charset="utf-8" />
   </head>
   <body>
      <form target="" method="POST">
         <label for="theDate">Datum: </label>
         <input type="text" name="theDate" id="theDate" value="" />
         <input type="submit" name="formSender" value="senden" />
      </form>
      <div id="searchResult">

<?php 

if ( isset($searchResults) ) 
          
    include (
"/usr/share/jpgraph3/src/jpgraph.php");
    include (
"/usr/share/jpgraph3/src/jpgraph_line.php");

$graphfile "graphfile.png";

$ydata = array(17,14,19,21,15,16,21);  //hier habe ich die anderen Variablen reingeschrieben
$ydata2 = array(12,13,17,14,21,22,16);

$graph = new Graph(800,300,"auto");
$graph->SetScale("textlin");

$lineplot1=new LinePlot($ydata);
$lineplot2=new LinePlot($ydata2);

$graph->Add($lineplot1);
$graph->Add($lineplot2);

$graph->img->SetMargin(40,20,20,40);
$graph->title->Set("Januar");
$graph->xaxis->title->Set("Zeit");
$graph->yaxis->title->Set("Temperatur");

$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

$lineplot1->SetColor("blue");
$lineplot1->SetWeight(2);

$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);

$graph->yaxis->SetColor("black");
$graph->yaxis->SetWeight(2);
$graph->xaxis->SetColor("black");
$graph->xaxis->SetWeight(2);
$graph->SetShadow();

$graph->Stroke($graphfile); 

?>

      </div>
   </body>
</html>
Wenn Ich jetzt anstelle der "festen" daten in dem array eine Variable angebe, funktioniert der Graph leider nicht.

Kann mir jemand sagen was der Graph an dieser Stelle genau erwartet?
PHP-Code:
$ydata = array(17,14,19,21,15,16,21);
$ydata2 = array(12,13,17,14,21,22,16); 
Ich habe es mit der Variable $dataForWeb versucht, da er da doch das array meines datums generiert.

gruss
Tim

Geändert von Timy (08.01.2012 um 12:55 Uhr).
Timy ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.01.2012, 18:53  
Neuer Benutzer
 
Registriert seit: 22.12.2011
Beiträge: 24
PHP-Kenntnisse:
Anfänger
Timy befindet sich auf einem aufstrebenden Ast
Standard

Weiß denn niemand wie ich Variablen in den graph bekomme?

Danke....

lg
Tim
Timy ist offline   Mit Zitat antworten
Alt 09.01.2012, 05:57  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

In der Docu von jGraph im Chapter 4 ( Your first graph script ) ist doch alles wunderbar beschrieben..

Du erzeugst zuerst die Basis ( Graph ), setzt die Achsen ( Axes Titles ) und erzeugst danach Lineplots die die Daten repräsentieren, diese Lineplots fügst du dann mit add() dem Graph hinzu.. Schaut soweit auch bei dir so aus als hättest du das verstanden. Die Daten die Aus der SQL Datenbank kommen sollten als float / integer übergeben werden ( statisch ) oder via Database, dazu solltest du folgendes beachten:

Zitat:
Reading data from a database

Since there are so many databases and so many ways to organize data in tables it is impossible to give generic examples. Instead we point out some common pitfalls when gathering data from a database.

Make sure the data is valid numeric data. It is a common mistake to read NULL (or empty strings "") values and try to plot them. Beware that the PHP function empty() also will return true for 0 and "0" values so it is not enough to just test with empty() since this will also remove all values that happens to be valid 0 values. To avoid this use the following modified empty method.

PHP-Code:
function empty0($aValue){
    if ( !
is_numeric(trim($aValue)) ) 
        return empty(
$aValue);
    return 
false;

Some databases (e.g. MySQL) returns a column with decimal type values as string in a SELECT statement which normally is handled by automatic conversion in PHP but since PHP has different interpretation of "0.00" and 0.00 in respect to what is interpreted as empty or not this needs to be carefully handled.
Soll meinen das du in aller größter sorgfalt über die Eigenschaft deiner Daten aus der Datenbank dir im klaren sein solltest, und diese gegebenenfalls zu Floats oder Integer ( Fließkommazahlen oder Ganzzahlen ) "castest" ( nenn es konvertieren ). Wie das geht bewertet man allgemein als trivial und sollte dir bekannt sein, hier aber noch mal zur Auffrischung: Es gibt Methoden die das können sowie type casting ( siehe type juggeling im Handbuch ). Auch wenn du nicht mit floats Berechnungen anstellst, sei gewarnt das die globale präzision innerhalb von PHP im Umgang mit Fließkommazahlen nicht allzu verlässlich ist, du also mit den Kommastellen nicht allzu übertreiben solltest.

Das sollte auf jeden Fall genügen um dein Problem zu lösen ohne es dir vorzukauen.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (09.01.2012 um 06:00 Uhr).
tr0y ist offline   Mit Zitat antworten
Alt 09.01.2012, 20:24  
Neuer Benutzer
 
Registriert seit: 22.12.2011
Beiträge: 24
PHP-Kenntnisse:
Anfänger
Timy befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Ich habe jetzt mal folgendermaßen ein array aus meiner sql erstellt.

PHP-Code:
$result mysql_query("SELECT id, wohnzimmer FROM $Table ORDER BY id DESC LIMIT 10");

// Die Werte der Linie in ein Array speichern
    
    
$list = array();
    while(
$row mysql_fetch_array($result)) {
    
    
$list[] = $row;
    }
    foreach (
$list as $i => $record) {
    
    echo 
$record['wohnzimmer'], ",";
    } 
Ich bekomme die Werte jetzt per echo auch genau so angezeigt, wie ich sie benötige.
Leider bekomme ich sie nur als echo und kann keine Variable davon machen.

lg
Tim
Timy ist offline   Mit Zitat antworten
Alt 10.01.2012, 08:48  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

wieso kannst du an Stelle von echo $record['hab ich nicht gelesen'] DIESES Array-Element einfach als deine Daten benutzen. Wenn Jgraph zickt, musst du eventuell explizit mittels intval / floatval in Zahlen konvertieren .. Schau dabei bitte drauf, dass aus der Datenbank immer der Dezimalpunkt geliefert wird, sonst werden deine "Kommazahlen" beim Konvertieren abgeschnitten
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 11.01.2012, 17:54  
Neuer Benutzer
 
Registriert seit: 22.12.2011
Beiträge: 24
PHP-Kenntnisse:
Anfänger
Timy befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Leider bekommen ich immer folgende Meldung:





So sieht mein Script aus

PHP-Code:
<?php

    
include ('../dbconnection.php');
    include (
"/usr/share/jpgraph3/src/jpgraph.php");
    include (
"/usr/share/jpgraph3/src/jpgraph_line.php");
    
    
$result mysql_query("SELECT id, wohnzimmer, bad FROM $Table ORDER BY id DESC LIMIT 10");
    
    
// Die Werte der Linie in ein Array speichern
    
    
$list = array();
    while(
$row mysql_fetch_array($result)) {
    
    
$list[] = $row;
    }
    foreach (
$list as $i => $record) {
    
    
$ydata1 = array($record['wohnzimmer'], ",");
    
$ydata2 = array($record['bad'], ",");

    
// Grafik generieren und Grafiktyp festlegen
    
$graph = new Graph(870,479,"auto");
    
$graph->SetScale("textlin");
    
    
// Die Zwei Linien generieren
    
$lineplot1=new LinePlot($ydata1);
    
$lineplot2=new LinePlot($ydata2);
    
    
// Die Linien zu der Grafik hinzufügen
    
$graph->Add($lineplot1);
    
$graph->Add($lineplot2);
    
    
// Grafik Formatieren
    
$graph->img->SetMargin(40,20,20,40);
    
$graph->title->Set("Januar");
    
$graph->xaxis->title->Set("Zeit");
    
$graph->yaxis->title->Set("Temperatur");
    
    
$graph->title->SetFont(FF_FONT1,FS_BOLD);
    
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
    
    
$lineplot1->SetColor("blue");
    
$lineplot1->SetWeight(2);
    
    
$lineplot2->SetColor("orange");
    
$lineplot2->SetWeight(2);
    
    
$graph->yaxis->SetColor("black");
    
$graph->yaxis->SetWeight(2);
    
$graph->xaxis->SetColor("black");
    
$graph->xaxis->SetWeight(2);
    
$graph->SetShadow();
    
    
// Grafik anzeigen
    
$graph->Stroke();
    }
?>

Geändert von Timy (11.01.2012 um 17:57 Uhr).
Timy ist offline   Mit Zitat antworten
Alt 12.01.2012, 11:45  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Du erzeugst Anzahl-Datensätze-fach Graphs und pappst die für jeden Datensatz untereinander, das wär wohl falsch.

Außerdem erzeugst du ein Datenarray aus Wert + komma, auch falsch.

PHP-Code:
foreach ( ... ) { $yData[] = (float)$row['irgendwo']; } 
bzw. bei ganzzahlen
PHP-Code:
foreach ( ... ) { $yData[] = (int)$row['irgendwo']; } 
Aber ich fürchte das geht über deinen aktuellen Grundlagenstand hinaus.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 12.01.2012, 12:07  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

er hat ja da sein foreach schon . aber erstens ist dein Code gottsjämmerlich schlecht eingerückt - und 2tens musst du das foreach auch mal beenden

PHP-Code:
foreach ($list as $i => $record) {
 
    
$ydata1[] = $record['wohnzimmer'];
    
$ydata2[] = $record['bad'];

.. tut doch wirklich nicht weh - und wenn er dann immer noch nörgelt, dann wie von tr0y vorgeschlagen die Typkonvertierung erzwingen - wobei ich wohl statt seiner (int) (float) eher intval ( ) floatval( ) benutzt hätte
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 19.01.2012, 12:01  
Neuer Benutzer
 
Registriert seit: 22.12.2011
Beiträge: 24
PHP-Kenntnisse:
Anfänger
Timy befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Ich habe jetzt alles so hinbekommen, wie ich es wollte.

Bei mir lag das Problem nicht in der Variable der Daten sondern an der Zeit.
Ich hatte die Ausgabe der Zeit nicht als Unix Timstamp sondern als "richtige" Zeit.

Jetzt wandele ich die Zeit vorher in Unixtime und es geht.

Das einzige Problem was ich noch habe ist das die Beschriftung der X-Achse nicht richtig funktioniert.

So wandele ich die Zeit um.
PHP-Code:
$unixtime strtotime("$date"); 
Dann wird die Zeit so weiterbearbeitet. (wobei ich nicht verstehe wo die Variable $aVal herkommt.
PHP-Code:
function TimeCallback($aVal) {

        return 
Date ('H:i  ',$aVal);
     } 
Und so formatiere ich die x-achse.
PHP-Code:
 //X-Achse
    
$graph->xaxis->SetColor("#000000");
    
$graph->xaxis->title->Set("Zeit");
    
$graph->xaxis->SetLabelFormatCallback('TimeCallback');
    
$graph->xaxis->title->SetColor("#000000");
    
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); 
Leider zeigt mir die x-achse immer nur die gleichen werte (01:00) und beim wechsel zum nächsten Tag macht er mit (01:01) und am nächsten Tag (01:02) usw.

Hat Vllt jemand eine idee?

edit: hab das Bild des Graphen nochmal hinzugefügt.




Gruß
Tim

Geändert von Timy (19.01.2012 um 12:43 Uhr).
Timy ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Vie Formular empfangene Daten berarbeiten und an remote PHP Skript senden fr3sh PHP Einsteiger 4 27.01.2011 10:20
[Erledigt] geänderte Daten übergeben ? danyh Datenbanken 3 17.03.2010 12:00
MySQL Daten als RSS darstellen Lyus Datenbanken 1 20.09.2009 23:19
Per IP mit fsockopen einen Port abfragen und Daten einlesen !? mikeobelo PHP Tipps 2009 5 01.07.2009 14:44
Website in XML-Format öffnen und Daten in DB schreiben...aber nur wie ? Oli Krause PHP Tipps 2009 11 22.03.2009 12:36
Registrierte User sollen ihre Daten ändern können 54ch4 PHP Tipps 2009 17 14.03.2009 14:29
Daten aus DB in Element darstellen maximus JavaScript, Ajax und mehr 3 07.03.2009 17:14
Scriptsuche Suche Script zum einpflegen von daten... derTorsten1909 Scriptbörse 17 10.01.2009 18:22
Daten aus Tabelle in Html darstellen escdomme PHP Tipps 2009 4 05.01.2009 10:43
[Erledigt] Daten aus mehreren Tabellen holen Datenbanken 0 19.09.2005 17:14
Daten auslesen und ändern Datenbanken 2 17.09.2005 19:28
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
Daten aus der Datenbank in 3 Spalten pro Zeile darstellen? ThaRider PHP Tipps 2005-2 7 14.07.2005 23:00
[unserialize] Wie die Daten aus der DB richtig darstellen?! PHP Tipps 2005-2 6 27.06.2005 11:56
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php tabelle in graph darstellen, jpgraph setlabelformatcallback, jgraph kommazahlen, graph php, html werte in js array speichern und als graph darstellen, php graph darstellen, php graph, setlabelformatcallback, php graph zeit, graphen sql, sql werte in graf anzeigen, berechnung eines zeit graphen mit sql, while ($data=$db->_sql_daten()){, php graphen aus daten ausgeben, relationale datenbank schema, graph php darstellen, jpgraph explizite values date, sql abfrage einfach darstellen, graphen darstellen, php graph datum

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:42 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum