Datum löschen
am 25.07.2006 17:05:09 von Herbert Fidesser
Hallo,
mein Problem ist eigentlich trivial, aber ich komm' nicht dahinter:
1) Ein input-Feld enthält ein Datum (=3DVorbelegung aus mysql-DB,
Datentyp Date).
2) Dieses Datum wird im Input-Feld gelöscht (Feld markieren, Entf).
3) Beim Aktualisiseren des Datensatzes (UPDATE ....) kommt die
Fehlermeldung "Incorrect date value". Alle anderen Felder werden
korrekt aktualisiert. Wenn das Datumsfeld tatsächlich ein Datum
enthält, passt auch alles, aber
wie kann ich ein Datum wieder los werden?
Danke für Tipps
Gruß aus Wien
Herbert
Re: Datum löschen
am 25.07.2006 17:15:15 von Carsten Wiedmann
Herbert Fidesser schrieb:
> 3) Beim Aktualisiseren des Datensatzes (UPDATE ....) kommt die
> Fehlermeldung "Incorrect date value". Alle anderen Felder werden
> korrekt aktualisiert. Wenn das Datumsfeld tatsächlich ein Datum
> enthält, passt auch alles, aber
Da stellt sich natürlich die Frage, welchen Wert willst du denn beim
"Löschen" dann genau in die Spalte abspeichern?
Im Allgemeinen würde ich sagen:
Lass NULL in dieser Spalte zu, und speichere dann eben NULL ab, wenn du das
Datum "löschen" willst.
Speziell kann man nicht viel sagen, da hier keiner dein DBMS kennt und wie
dieses eingestellt ist.
Gruß
Carsten
Re: Datum löschen
am 25.07.2006 17:31:48 von Peter Marbaise
Herbert Fidesser schrieb:
> Hallo,
> mein Problem ist eigentlich trivial, aber ich komm' nicht dahinter:
>
> 1) Ein input-Feld enthält ein Datum (=Vorbelegung aus mysql-DB,
> Datentyp Date).
> 2) Dieses Datum wird im Input-Feld gelöscht (Feld markieren, Entf).
> 3) Beim Aktualisiseren des Datensatzes (UPDATE ....) kommt die
> Fehlermeldung "Incorrect date value". Alle anderen Felder werden
> korrekt aktualisiert. Wenn das Datumsfeld tatsächlich ein Datum
> enthält, passt auch alles, aber
>
> wie kann ich ein Datum wieder los werden?
die entsprechende Spalte aus der Tabelle wieder löschen, da du
offensichtlich kein Datum eingeben willst. Bei 5'er Version der MySQL
könnte man vielleicht auch mit einem Trigger das Datum setzen.
ciao Peter
--
WWW: http://www.marbaise.de Uptime: 20 Days 18 Hours
Re: Datum löschen
am 26.07.2006 15:14:57 von Andreas Froede
Herbert Fidesser wrote:
> Hallo,
> mein Problem ist eigentlich trivial, aber ich komm' nicht dahinter:
>
> 1) Ein input-Feld enthält ein Datum (=Vorbelegung aus mysql-DB,
> Datentyp Date).
> 2) Dieses Datum wird im Input-Feld gelöscht (Feld markieren, Entf).
> 3) Beim Aktualisiseren des Datensatzes (UPDATE ....) kommt die
> Fehlermeldung "Incorrect date value".
Meine Glaskugel spricht:
Du versuchst ein:$SQL="UPDATE tabelle datum = ''";
wobei die Spalte datum vom Typ date ist.
Dies ist offensichtlich ein Syntaxfehler, da '' kein Wert vom Typ date
ist.
Was Du willst ist ein:
....
$SQL=sprintf("UPDATE tabelle SET datum = %s",
($datum == "")?"NULL":"'$datum'");
....
(Dies ist *keine* saubere Lösung, aber das Prinzip sollte Dir klar werden)
CIAO
andreas
--
.... oben geht es um den Thron - unten geht es um Deinen Hintern ...
[Keimzeit]
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de
Re: Datum löschen
am 28.07.2006 16:40:33 von Herbert Fidesser
Eure Tipps haben mich auf die richtige Fährte geführt.
Die Lösung:
Abfragen, ob das Input-Feld leer ist:
if (empty($datum)) {
$datum=3D "NULL";
} else {
$datum =3D "'$datum'";
}
Man beachte die einfachen und doppelten Anführungszeichen!
Das Upload:
$eingabe =3D mysql_query("UPDATE meinetabelle SET Umsetzungbis =3D
$datum");
Es funktioniert natürlich nur, wenn das Datum als String (in einfachen
Anführungszeichen) und der NULL-Wert ohne Anführungszeichen
übergeben wird.
Für Profis ... eh klar,
aber vielleicht hift's anderen weniger Bedarften, wie ich einer bin.
mfg
Herbert
Re: Datum löschen
am 28.07.2006 20:41:06 von Thomas Rachel
Herbert Fidesser wrote:
> Eure Tipps haben mich auf die richtige Fährte geführt.
Noch nicht ganz.
> Abfragen, ob das Input-Feld leer ist:
> if (empty($datum)) {
> $datum= "NULL";
> } else {
> $datum = "'$datum'";
Hier gehört dringend ein mysql_real_escape_string(...) hin, der sich um
$datum kümmert.
Denn was machst Du, wenn ein böswilliger Angreifer $datum auf "20060101',
available_to='everyone" setzt? Beispielsweise? Ok, ist natürlich nicht
ganz trivial, hier herauszufinden, was da passen könnte - aber auch
nicht unmöglich.
> Es funktioniert natürlich nur, wenn das Datum als String (in einfachen
> Anführungszeichen) und der NULL-Wert ohne Anführungszeichen
> übergeben wird.
Und alle einfachen Anführungszeichen in $datum entsprechend gequotet
sind.
Thomas
--
[X] <-- nail here for new monitor
Re: Datum löschen
am 29.07.2006 08:34:58 von Herbert Fidesser
Thomas Rachel schrieb:
> Hier gehört dringend ein mysql_real_escape_string(...) hin, der sich um
> $datum kümmert.
> Denn was machst Du, wenn ein böswilliger Angreifer $datum auf "20060101=
',
> available_to=3D'everyone" setzt?
Danke für den Hinweis.
Hab's gleich versucht:
In meinem UPDATE-String steht jetzt: "..." .
mysql_real_escape_string($umsdat2) . "...". Als DAtum übergebe ich :
""2006-01-15".
Es kommt folgende Meldung: "You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near '\'2006-01-15\'".
Was mache ich falsch?
mfg
Herbert
Re: Datum löschen
am 29.07.2006 08:35:10 von Herbert Fidesser
Thomas Rachel schrieb:
> Hier gehört dringend ein mysql_real_escape_string(...) hin, der sich um
> $datum kümmert.
> Denn was machst Du, wenn ein böswilliger Angreifer $datum auf "20060101=
',
> available_to=3D'everyone" setzt?
Danke für den Hinweis.
Hab's gleich versucht:
In meinem UPDATE-String steht jetzt: "..." .
mysql_real_escape_string($umsdat2) . "...". Als Datum übergebe ich :
""2006-01-15".
Es kommt folgende Meldung: "You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near '\'2006-01-15\'".
Was mache ich falsch?
mfg
Herbert
Re: Datum löschen
am 30.07.2006 02:38:47 von Thomas Rachel
Herbert Fidesser wrote:
> [mysql_real_escape_string]
> Danke für den Hinweis.
> Hab's gleich versucht:
> In meinem UPDATE-String steht jetzt: "..." .
> mysql_real_escape_string($umsdat2) . "...". Als DAtum übergebe ich :
> ""2006-01-15".
> Es kommt folgende Meldung: "You have an error in your SQL syntax; check
> the manual that corresponds to your MySQL server version for the right
> syntax to use near '\'2006-01-15\'".
> Was mache ich falsch?
Vermutlich plazierst Du die Funktion an der falschen Stelle.
Das "..." oben mit dem vermutlichen Tippfehler am Anfang vom Datum ("")
gibt mir nicht viel Information darüber, wie Dein Query wirklich
aussieht.
Aber die Tatsache, daà der Query-Teilstring, an dem er sich stört, mit
"\'" beginnt, vermute ich, daà Du die Funktion falsch anwendest.
Basierend auf dem Programmausschnitt aus Deinem Posting
<1154097633.689927.286090@h48g2000cwc.googlegroups.com>
bastele ichs mal um:
if (empty($datum)) {
$datum= "NULL";
} else {
$datum = "'".mysql_real_escape_string($datum)."'";
}
Denn: ein eventuell in $datum befindliches "'" soll eine Fehlermeldung
wegen ungültigem Datum, jedoch unter keinen Umständen ein fehlerhaftes
Query (Syntaxfehler oder - schlimmer- Fehlverhalten) hervorrufen.
Das heiÃt, ein in $datum befindliches "'" soll zu "'\" werden, die "'"
drumrum sollen jedoch bleiben.
Die Zeile untendrunter
$eingabe = mysql_query("UPDATE meinetabelle SET Umsetzungbis =
$datum");
bleibt dann.
Somit würde
- aus einem $datum="" ein "... SET Umsetzungbis = NULL"
- aus einem $datum="2006-05-12" ein "... SET Umsetzungbis = '2006-05-12"
- aus einem $datum="'dfg'" ein "... SET Umsetzungbis = '\'dfg\''"
HTH,
Thomas
--
Vor Ihnen steht ein Mann, der es gewöhnt ist, drei Zentner
schwere Weiber in SchuhgröÃe 6 zu wuchten! (Al Bundy)
Re: Datum löschen
am 30.07.2006 07:29:07 von Herbert Fidesser
Hallo Thomas,
Genau das war's:
> Vermutlich plazierst Du die Funktion an der falschen Stelle.>
> bastele ichs mal um:
> if (empty($datum)) {
> $datum= "NULL";
> } else {
> $datum = "'".mysql_real_escape_string($datum)."'";
> }
> $eingabe = mysql_query("UPDATE meinetabelle SET Umsetzungbis =
> $datum");
So funktioniert es. Ich hatte die Funktion mysql_real_escape_string
direkt im Update-String stehen, das geht nicht.
Nchmals Danke!
Herbert