Mehrere Variablen in Array speichern
Thomas
- php
Hallo,
ich habe ein Problem, bei dem ich einfach nicht weiterkomme. Mit JPGraph möchte ich ein Diagramm erstellen, daß mir die Anzahl bestimmter Ereignisse pro Monat übers Jahr gesehen grafisch aufbereitet.
Das funktioniert auch alles, so lange in dem Array mit den Daten nur Werte aber keine Variablen drinstehen.
Mein Problem ist aber, daß jeder einzelne Wert per DB-Abfrage aus der DB eingelesen wird, bevor er angezeigt wird. -> Ich bin irgendwie zu blöd, die einzelnen Queries gesammelt in das neue Array zu speichern. Leider habe ich auch das Manual mit den Funktionen schon angeschaut und bin dort nicht schlau geworden.
Mein Code sieht folgendermaßen aus:
<?php
...
$ydata = array($jan03tech, $feb03tech, $mar03tech, $apr03tech,
$may03tech, $jun03tech, $jul03tech, $aug03tech,
$sep03tech, $oct03tech, $nov03tech, $dec03tech);
$ydata2 = array($jan03techrd, $feb03techrd, $mar03techrd, $apr03techrd,
$may03techrd, $jun03techrd, $jul03techrd, $aug03techrd,
$sep03techrd, $oct03techrd, $nov03techrd, $dec03techrd);
$ydata3 = array($jan03rd, $feb03rd, $mar03rd, $apr03rd,
$may03rd, $jun03rd, $jul03rd, $aug03rd,
$sep03rd, $oct03rd, $nov03rd, $dec03rd);
... // hier wird die Grafik generiert
// jede Abfrage wird wie nachfolgend in eine Variable gespeichert
$rddec03 = "SELECT COUNT(*)
FROM newtest
WHERE ( Bsp1 = 93 OR Bsp2 = 93 OR Bsp3 = 93 )
AND Zeitraum BETWEEN '2003-12-01' AND '2003-12-31'";
// jede Abfrage wird wie nachfolgend durchgeführt
// Abfrage (Dec03RD) schicken
if (!($dec03rd = @ mysql_query ($rddec03, $connection)))
showerror();
?>
Da es insgesamt drei Linien gibt, habe ich insgesamt 3 Arrays mit je 12 Variablen, die ich speichern muß.
Wie gesagt: es wäre prima, wenn jemand mit einem konkreten Beispiel weiterhelfen könnte, weil ich das Manual nicht richtig verstanden habe...
Vielen Dank schon mal,
Thomas
$ydata = array($jan03tech, $feb03tech, $mar03tech, $apr03tech,
$may03tech, $jun03tech, $jul03tech, $aug03tech,
Also hiermit willst Du was in ein Array schreiben?
Ich vermisse so ein Paar Ausgaben?
Schicke mal ein Array damit ich verstehe was Du meinst!
TomIRL
Hallo,
schon mal danke für die Antwort!
Also folgendes zur Erklärung: Ich habe die verschiedenen SQL-Queries (eine für jeden Monat), die jeweils in eine Variable gespeichert werden.
Diese Variablen möchte ich entsprechend hintereinander in ein Array speichern, damit die Werte dann mit JPGraph als Diagramm ausgegeben werden können.
Zu Deinem Beispiel: $ydata enthält ein Array mit den Ergebnissen der einzelnen Monate
Was für eine Ausgabe vermisst Du?
Danke + Gruß
Thomas
Hallo,
schon mal danke für die Antwort!
Also folgendes zur Erklärung: Ich habe die verschiedenen SQL-Queries (eine für jeden Monat), die jeweils in eine Variable gespeichert werden.
Moment mal nix kapisch Du willst das SQL Statemant in ein Array speichern?
Diese Variablen möchte ich entsprechend hintereinander in ein Array speichern, damit die Werte dann mit JPGraph als Diagramm ausgegeben werden können.
Warum nicht die ergebnissse des SQL Statememnts ausgeben?
Zu Deinem Beispiel: $ydata enthält ein Array mit den Ergebnissen der einzelnen Monate
Ja Die willst Du doch mittel JPGraph ausgeben oder nicht?
print ("<pre>");
print_r ($array);
Vielleicht um mal zu gucken wie das Array aussieht?
Hallo,
schon mal danke für die Antwort!
Moment mal nix kapisch Du willst das SQL Statemant in ein Array speichern?
Ja so ist es. Jede Variable (= ein Wert) soll hintereinander in das Array gespeichert werden
Warum nicht die ergebnissse des SQL Statememnts ausgeben?
Möchte ich eigentlich...ich wollte diese Werte nur hintereinander gespeichert haben -> und dafür erschien mir ein Array als gute Wahl
Ja Die willst Du doch mittel JPGraph ausgeben oder nicht?
richtig
print ("<pre>");
print_r ($array);
Vielleicht um mal zu gucken wie das Array aussieht?
keine Werte....warum auch immer...
Das ist der aktuelle Quelltext:
<?php
include ("jpgraph.php");
include ("jpgraph_line.php");
include ("error.inc");
include ("db.inc");
$tech03sql = "SELECT COUNT(*)
FROM newtest
WHERE Delay1 BETWEEN 41 AND 49";
var_dump($tech03sql);
// Verbindung mit DB aufbauen
if (!($connection = mysql_connect($hostname,
$username,
$password)))
die("Cannot connect");
if (!(mysql_select_db("testdata", $connection)))
showerror();
if (!($zeilen = mysql_query ($tech03sql, $connection)))
showerror();
// Schließen der Verbindung
if (!(mysql_close($connection)))
showerror();
?>
<?php
/* Verbindung aufbauen, auswählen einer Datenbank */
$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
or die("Keine Verbindung möglich: " . mysql_error());
print "Verbindung zum Datenbankserver erfolgreich";
mysql_select_db("Meine_Datenbank") or die("Auswahl der Datenbank fehlgeschlagen");
// ausführen einer SQL Anfrage
$query = "SELECT COUNT(*)
FROM newtest
WHERE Delay1 BETWEEN 41 AND 49";
$result = mysql_query($query)
or die("Anfrage fehlgeschlagen: " . mysql_error());
// Ausgabe der Ergebnisse in HTML
print "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($line as $col_value) {
print "\t\t<td>$col_value</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";
// Freigeben des Resultsets
mysql_free_result($result);
// schliessen der Verbinung
mysql_close($link);
?>
Hello,
Das ist der aktuelle Quelltext:
<?php
include ("jpgraph.php");
include ("jpgraph_line.php");
include ("error.inc");
include ("db.inc");$tech03sql = "SELECT COUNT(*)
FROM newtest
WHERE Delay1 BETWEEN 41 AND 49";
var_dump($tech03sql);// Verbindung mit DB aufbauen
if (!($connection = mysql_connect($hostname,
$username,
$password)))
die("Cannot connect");if (!(mysql_select_db("testdata", $connection)))
showerror();if (!($zeilen = mysql_query ($tech03sql, $connection)))
showerror();
hierzwischen sollte man vielleicht die geschaffene Ressource ( $zeilen) auch nutzen, bevor man die Verbindung zur DB schließt.
Man könnte z.B. erst einmal zählen, wieviele Ergebnisse es gegeben hat:
if($zeilen)
{
echo "Anzahl Treffer: ".mysql_num_rows($zeilen)."<br />";
verarbeitung($zeilen);
}
else
{
echo "Die Abfrage hat keine Ergebnisse gebracht<br />\n".
"Die MySQL-Datenbank meldet ".mysql_error()."<br />";
}
// Schließen der Verbindung
if (!(mysql_close($connection)))
showerror();
?>
Wie man Werte in ein Array hineinbekommt, habe ich ja schon beschrieben. Mit
$datensatz = mysql_fetch_assoc($zeilen)
kann man jeweils den aktuellen Datensatz unter dem Handle ($zeilen) lesen. Der Zeiger im Handle wird dabei automatisch auf den Anfang des nächsten Satzes weitergerückt. Ist keine Satz mehr da, gibt die Funktion beim nächsten Aufruf false zurück.
Liebe Grüße aus http://www.braunschweig.de
Tom
//Damit das SQL Statement abschicken
$zeilen = mysql_query($sql,$db);
//Das liest ZEILENWEISE in ein Array:
while ($f = mysql_fetch_array($zeilen)){
$arr_new[]=$f[ersterzuspeichernderWertausderspalte]
}
Das müßte helfen!
Die Werte kannst Du dann zum beispiel mit foreach () verarbeiten!
Viele Grüße aus Berlin
TomIRL
Jo wenn Du mein Posting nicht verstanden hast dann komme mal in den Chat!
Dann reden wir vielleicht aneinander vorbei!
Viel
Hello,
als wichtigste Erkenntnis sollte man vielleicht wissen, dass "Arrays" in PHP in Wirklichkeit mehrdimensional und bidirektional verkettete Baumstrukturen sind. Das bedetutet für die Praxis, dass die Anzahl der Dimensionen sich in jedem Knoten ändern kann. mach Dich also frei von der Vorstellung von Tabellen und Kuben und zeitlich veränderten Kuben ... Ach, man will das ja soch immer "vor Augen" sehen.
Wenn Du bun die Datenbank ausliest, kannst Du also ausgehend von einem Wurzelpunkt (Amkeradresse des Baumes) beliebig viele Elemente und Verzweigungen dynamisch einhängen.
$_start = Array();
$_start["links"] = Array();
$_start["rechts"] = Array();
$_start["oben"] = Array();
$_start["unten"] = Array();
$_start["vorne"] = Array();
$_start["hinten"] = Array();
Das kann man sich sogar noch vorstellen, oder?
Nun gehts weiter:
$_start["links"]["rot"] = Array();
$_start["links"]["gelb"] = Array();
$_start["links"]["grün"] = Array();
$_start["links"]["blau"] = Array();
$_start["rechts"]["Paul"]= "doof";
$_start["rechts"]["rot"]= 1;
$_start["rechts"]["gelb][1]["daten"][22] = "keine";
Ich hoffe, Du kannst Dir vorstellen, wie das mit der Definition neuer Elemente funktioniert. Solange man eine direkte Zuweisung auf eine vorhande Unterebene macht, überschreibt diese Zuweisung die bisher vorhandene. Wenn man aber, wie im letzen Fall, über mehrere Ebenen hinweg eine Neuzuweisung durchführen will, muss man sicher sein, dass der Weg bisher unbenutzt war. Vorhanden Knoten über mehrere Ebenen werden nicht angetastet. Das dient der Sicherheit.
Versuch einfach mal, eine komplexe Datenbankabfrage auf diese Art und Wise in einem Baum zu verstauen. Es wird dir irgendwann anfangen, mächtig Spaß zu machen, mit PHP-Arrays zu arbeiten. Aber es dauert eine Weile.
Liebe Grüße aus http://www.braunschweig.de
Tom