Seite 1 von 1

off topic - mysql/PHP

Verfasst: 12 Okt 2004 19:14
von weneu
Hallo,
mache gerade einige Experimente mit mysql bzw. PHP und habe hier ein Problem:
Das soll passieren: Ein User wählt ein Tagesdatum (z.B. 5.9.04) und dann werden aus der mysql-Datenbank alle Daten dieses Tages ausgegeben.
Was mache ich bis jetzt?
Mit Hilfe eines javascripts wird aus der Usereingabe das gewünschte Datum ermittelt. (der User wählt in 3 Dropdownmenüs Jahr, Monat und Tag). Dies klappt für sich allein schon.
Nun soll dieser Wert an die Abfrage übergeben werden, die folgendermaßen lautet:
$sql = 'SELECT * FROM `csvdat` where datum = '2004-09-05' order by datum';
Nur soll an Stelle von '2004-09-05' natürlich das vom script ermittelte Datum stehen. Und hier trete ich auf der Stelle (mangels Kenntnissen)
Wie transportiere ich das Datum aus dem script an die Stelle datum =
Dies müsste ja wohl über eine Variablenzuweisung geschehen, aber genau hier setzt es bei mir aus.
Frage:
a) ist mein Problem überhaupt verständlich geschildert? (will ja hier im Forum nicht einen ganzen Roman schreiben)
b) habe ich vielleicht einen völlig falschen Ansatz zur Lösung des Problems, sprich, geht es anders vielleicht viel einfacher?
Entschuldigung, wenn ich das Forum hier etwas missbrauche, aber ich erhalte hier vielleicht schneller (und vor allem freundlicher :) ) eine Antwort als in den einschlägigen PHP- bzw. mysql-Gruppen im usenet.

Verfasst: 12 Okt 2004 21:10
von rabit
Hallo Werner,

ist soweit alles in Ordnung. Nur der String muss ein weing aufgeteilt werden:

Anstelle von

Code: Alles auswählen

'2004-09-05'
schreibst Du:


Code: Alles auswählen

"'" .  $jahr . "-" .  $monat . "-" . $tag "'"  
Unter der Annahme das Du deine Formularfelder als jahr/monat/tag benannt hast.
Die Leerzeichen müssen nicht sein.

Verfasst: 12 Okt 2004 21:30
von rolsch
- wenn das Datum genau so in der DB steht, sollte es funktionieren

- wird das Datum aber als Timestamp geschrieben, klappt der Select meines Wissens nicht

- ich bastele gerade auch an einer Wetterhistorie, die DB wird von Othis phpscript 'wswindb' gefüllt (mit Timestamp...)

Verfasst: 12 Okt 2004 22:22
von weneu
@ Roland,
ja, das Datum steht in dieser Form in der Datenbank, also '2004-01-05'
@ Gerhard,
irgendwo scheint noch ein Knopf drin zu sein.
Zunächst: die Variablen jahr, monat und tag enthalten die gewünschten Werte, was ich mit alert geprüft habe.
Nun habe ich die sql-Zeile nach deinem Vorschlag so verändert:
$sql = 'SELECT * FROM `csvdat` where datum = "'" .$jahr. "-" .$monat. "-" .$tag "'" order by datum';
Aber nun geht gar nichts mehr, sondern es erscheint die Fehlermeldung
"Parse error: parse error, unexpected '"' in C:\........." on line XXX
Ich hatte auch schon gedacht, es fehlt der Punkt nach ".$tag", also ".$tag.", aber das wars auch nicht.
:?: :?:

Verfasst: 12 Okt 2004 23:07
von rabit
Ja, dieser Punkt fehlte und als ganzes vielleicht so:

Code: Alles auswählen

$sql = "SELECT * FROM csvdat where datum = " . "'" . $jahr . "-" . $monat . "-" . $tag . "'" . " order by datum";

Grüße
gerhard

Verfasst: 13 Okt 2004 09:04
von weneu
Hallo Gerhard,
danke, so komme ich weiter. Musste allerdings einige Zeichen verändern:
$sql = 'SELECT * FROM `csvdat` where datum = ".$jahr. "-" .$monat. "-" $.tag." order by datum';
- Der Tabellenname csvdat durfte nicht ohne Anführungszeichen stehen.
- Wenn ich beispielsweise vor dem SELECT und nach Datum ein " hatte, kam erneut eine Fehlermeldung, mit dem ' geht es.
Weiß der Kuckuck, warum. Ich habe immer gedacht, das Zeichen wäre egal, Hauptsache, man nimmt dieselben Zeichen und mischt nicht.

Verfasst: 15 Okt 2004 16:57
von weneu
Hallo Gerhard (oder???),
es ist zum Eierlegen. Ich hätte gedacht, das Problem wäre gelöst, zumal mir Othi noch einige Hinweise zum Formular der Datumswahl gegeben hat (ich habe hier ein Javascript verwendet, was Unsinn war und er hat mir die Lösung aufgezeigt - mache es jetzt mit method = "post"), aber mein Grundproblem ist nach wie vor:
Wenn ich die sql-Zeile so mache, wie von dir vorgeschlagen
$sql = 'SELECT * FROM csvdat where datum = " . "'" . $jahr . "-" . $monat . "-" . $tag . "'" . " order by datum';
kommt eine Fehlermeldung:
Parse error: parse error, unexpected '"' in C:\Programme........
Es gelingt also nicht, die Werte, die in $jahr, $monat und $tag vorhanden sind (habe ich mit "echo $tag" überprüft), einzubinden.
Habe nun schon die verrückesten Dinge ausprobiert.
Wollte in einer neuen Variablen $wert = $jahr.$monat.tag die Werte zusammenfassen und dann nur diese Variable einsetzen, also
$sql = 'SELECT * FROM csvdat where datum = $wert order by datum';
aber das scheitert ebenfalls.
Nur wenn ich, wie weiter oben schon gepostet, ein "Klartextdatum" einfüge
$sql = 'SELECT * FROM csvdat where datum = "2004-05-01" order by datum';
dann erfolgt eine Ausgabe, aber das hilft mir ja nichts, sondern zeeigt nur, dass der sql-Befehl prinzipiell funktioniert.
Hat irgendwer noch einen Einfall?

Verfasst: 15 Okt 2004 19:43
von rabit
Hallo Werner,

zusamenfassen ja, aber dann so:

Code: Alles auswählen

$wert = $jahr . '-' . $monat . '-' . $tag;
Und danach:

Code: Alles auswählen

$sql=  'SELECT * FROM csvdat where datum ='. "'".$wert. "'". ' order by datum';
Diese Variante muss funktionieren ;)

Grüße
gerhard

Verfasst: 15 Okt 2004 21:57
von weneu
Hallo Gerhard,
danke euch allen (auch Othi, der ja wahrscheinlich noch etwas Anderes zu tun hatte).
Deine Variante und auch die von Othi, die er mir per Mail zugesandt hat, funktionieren jetzt.
Nun können wir uns endlich wieder den WSWIN-Problemen zuwenden :) und da fühle ich mich etwas sattelfester als in PHP und MYSQL. Aber man muß ja alles mal anfangen.