off topic - mysql/PHP

Fragen, Anregungen zur PC-Wetterstations-Software

Moderatoren: Werner, Tex, weneu

Antworten
Benutzeravatar
weneu
Site Admin
Beiträge: 11572
Registriert: 22 Feb 2002 01:00
Wohnort: Donauwörth
Danksagung erhalten: 18 mal
Kontaktdaten:

off topic - mysql/PHP

Beitrag 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.
rabit
Beiträge: 324
Registriert: 16 Dez 2001 01:00
Wohnort: Mannheim
Kontaktdaten:

Beitrag 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.
Viele Grüße aus Mannheim
gerhard

Bild
Davis VP2 > Weather Envoy > Weatherlink > WSWIN
Davis VP2 > Weather Envoy > Meteohub > Meteoplug
rolsch

Beitrag 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...)
Benutzeravatar
weneu
Site Admin
Beiträge: 11572
Registriert: 22 Feb 2002 01:00
Wohnort: Donauwörth
Danksagung erhalten: 18 mal
Kontaktdaten:

Beitrag 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.
:?: :?:
rabit
Beiträge: 324
Registriert: 16 Dez 2001 01:00
Wohnort: Mannheim
Kontaktdaten:

Beitrag 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
Benutzeravatar
weneu
Site Admin
Beiträge: 11572
Registriert: 22 Feb 2002 01:00
Wohnort: Donauwörth
Danksagung erhalten: 18 mal
Kontaktdaten:

Beitrag 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.
Benutzeravatar
weneu
Site Admin
Beiträge: 11572
Registriert: 22 Feb 2002 01:00
Wohnort: Donauwörth
Danksagung erhalten: 18 mal
Kontaktdaten:

Beitrag 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?
rabit
Beiträge: 324
Registriert: 16 Dez 2001 01:00
Wohnort: Mannheim
Kontaktdaten:

Beitrag 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
Benutzeravatar
weneu
Site Admin
Beiträge: 11572
Registriert: 22 Feb 2002 01:00
Wohnort: Donauwörth
Danksagung erhalten: 18 mal
Kontaktdaten:

Beitrag 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.
Antworten