Array Fehler abfangen A> Notice: Undefined offset:
Andreas Weni
- php
Überprüfen eines Datums. Wenn ich statt 12.12.2010 nun 1212.2010 übergebe, habe ich die Notice: Notice: Undefined offset:
Wie kann ich diese Warnung umgehen?
list ($d, $m, $y) = explode ( '.', $_GET['datum'] );
if ( ! checkdate ( $m, $d, $y ) )
{
print ( 'Datum ist ungültig!' );
}
else
{
print ( 'Datum ist gültig!' );
}
Andreas
Hallo,
Wie kann ich diese Warnung umgehen?
Du kannst durch eigenes Abfragen Warnungen verhindern:
$a=explode('.',$_GET['datum');
if(count($a)==3){
list($d,$m,$y)=$a;
}
Du kannst auch die Warnungen unterdrücken, was aber weniger empfehlenswert ist:
@list($d,$m,$y)=explode('.',$_GET['datum']);
Gruß aus Berlin!
eddi
Überprüfen eines Datums. Wenn ich statt 12.12.2010 nun 1212.2010 übergebe, habe ich die Notice: Notice: Undefined offset:
Das kommt nicht von explode, sondern von Deiner Funktion, der offensichtlich ein Übergabewert fehlt.
prüfe also in checkdate() zuerst, ob Du 3 Werte kriegst, wenn nicht, ist das Datum ohnehin ungültig.
Hotti
Das kommt nicht von explode, sondern von Deiner Funktion, der offensichtlich ein Übergabewert fehlt.
checkdate() ist eine PHP-interne Funktion.
Das kommt nicht von explode, sondern von Deiner Funktion, der offensichtlich ein Übergabewert fehlt.
checkdate() ist eine PHP-interne Funktion.
.. die offensichtlich sehr päpstlich mit dem Datum umgeht ;-)
Malso nebenbei, ich mache das nicht so zickig. Wenn ich ein Datum zu prüfen habe, mach ich ein split und rechne die 3 Werte in den julianischen Tag um. Die Funktion, die das zu tun kriegt, macht sofort ein return; wenn ein Wert fehlt. Was ich damit meine: Es geht darum, zu prüfen, ob ein Datum gültig ist und das ist es auf jeden Fall, wenn Monat, Tag oder Jahr fehlen oder als 0 angegeben wurden.
Viele Grüße aus der Waldstadt,
Horst Haselhuhn
Hi!
Überprüfen eines Datums. Wenn ich statt 12.12.2010 nun 1212.2010 übergebe, habe ich die Notice: Notice: Undefined offset:
Das kommt nicht von explode, sondern von Deiner Funktion, der offensichtlich ein Übergabewert fehlt.
Übergabewerte heißen nicht "offset". Da soll auf ein Array-Element zugegriffen werden, das nicht existiert. Konkret passiert das bei list(), das genau drei Werte zuweisen soll, aber nur ein Array mit zwei Werten vorgesetzt bekam.
Lo!
hi,
Übergabewerte heißen nicht "offset". Da soll auf ein Array-Element zugegriffen werden, das nicht existiert. Konkret passiert das bei list(), das genau drei Werte zuweisen soll, aber nur ein Array mit zwei Werten vorgesetzt bekam.
Mist, das hab ich beim Testn übersehen ;-)
Btw., checkdate(5,10,1582); liefert mir eine 1, wie ist denn das zu verstehen?
Bitte mal um weitere Hinweise,
Horst
Hi!
Btw., checkdate(5,10,1582); liefert mir eine 1, wie ist denn das zu verstehen?
Mit var_dump() statt echo ist das Ergebnis besser zu verstehen.
Eine Aussage für welche Kalendersysteme ihre Aussage gilt, ist im PHP-Handbuch nicht zu finden.
Lo!
h1,
Eine Aussage für welche Kalendersysteme ihre Aussage gilt, ist im PHP-Handbuch nicht zu finden.
Doch, da steht:
(PHP 4, PHP 5)
checkdate — Prüft ein Gregorianisches Datum auf Gültigkeit
und der 5.10.1582 wird von checkdate() als gültiges Datum bewertet. Das ist leider nicht richtig.
Hotti
Hi!
Eine Aussage für welche Kalendersysteme ihre Aussage gilt, ist im PHP-Handbuch nicht zu finden.
Doch, da steht:
checkdate — Prüft ein Gregorianisches Datum auf Gültigkeit
Ok.
und der 5.10.1582 wird von checkdate() als gültiges Datum bewertet. Das ist leider nicht richtig.
Mach einen Bug-Report auf.
Lo!
h1,
Mach einen Bug-Report auf.
Ok, Workaround hier ;-)
Ergänzung: Nach dem Umrechnen des Datums in einen fortlaufenden Tag (JulianDay) wird dieser Tag in ein Datum zurückgerechnet. Wenn dabei ein anderes Datum rauskommt, war die ursprüngliche Angabe nicht richtig.
Das hört sich zwar umständlich an, iat jedoch tatsächlich die einfachste Art, ein Datum auf Gültigkeit zu prüfen (sofern die Formel richtig rechnet).
Hotti
Btw., checkdate(5,10,1582); liefert mir eine 1, wie ist denn das zu verstehen?
Glaub ich nicht - checkdate() hat lt. Dokumentation einen Rückgabewert des Typs bool - da gibt's nur true und false.
Wie eine 1 (wie sie nur durch typecasting zustande kommen kann) zu verstehen ist, erklärt dir ebenfalls das Handbuch.
Hello,
Überprüfen eines Datums. Wenn ich statt 12.12.2010 nun 1212.2010 übergebe, [...]
verhindere doch einfach die geschlossene Eingabe und baue ein Dialogfeld (Input-Element) für jeden Teilwert des Datums auf, also je eines für Tag, Monat, Jahr.
Dann lässt sich auch leichter damit weiterarbeiten.
Könnteja auch sein, dass Du - - 1976 zulassen willst, wenn jemand nur das Jahr angeben mag.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg