Seite 1 von 1

hänge bei einem php-problem

Verfasst: 01.06.2004 17:55
von exweised
hallo, ich habe ein kleinen blackout, ich weis einfach nicht, wie ich das lösen könnte.

also, ich habe ein feld wo man ein datum eingeben soll. entweder:

xx.xx.xxxx oder xx.xx.xx oder x.x.xxxx oder x.x.xx oder x.xx.xxxx oder x.xx.xx oder xx.x.xxxx oder xx.x.xx

anstelle der punkte, dürfen auch mittestriche (-) genommen werden.

mein problem ist jetzt, wie mache ich dem script das klar, welche variante genommen wurde? oder ob punkte oder striche genommen wurden? das, wenn gar keine punkte oder striche verwendet wurden, eine fehlermeldung kommt. oder buchstaben eingegeben wurden? ich seh bald selber nicht mehr durch. :roll:

gibt mir mal einen tipp, wie ich das lösen könnte. am besten ohne funktionen, weil das klappt noch nicht so gut.

Verfasst: 01.06.2004 19:03
von QCO
Also du überprüfst jetzt mit PHP-Mittel, ob der String bestimmte Bedingungen erfüllt, die du dir mal noch genau überlegen solltest (das kannst du übrigens ohne Funktionen nicht lösen; warum hat PHP wohl so viele eingebaute Funktionen?)

Allgemein könntest du dich mal hier umschauen: PHP-Manual: CVI. String-Funktionen

Code: Alles auswählen

// der String genau zwei Punkte oder Striche enthält und das entsprechend andere Zeichen gar nicht
if ( count(explode('.', $string)) == 3 && count(explode('-', $string)) == 1 )
{
 // string ist richtig und . ist Trennzeichen
 $delimiter = '.';
}
elseif ( count(explode('.', $string)) == 1 && count(explode('-', $string)) == 3 )
{
 // string ist richtig und , ist Trennzeichen
 $delimiter = '-';
}
else
{
// string ist falsch --> Fehlermeldung
}

$fields = explode($delimiter, $string);

$day = intval($fields[0]);
$month = intval($fields[1]);
$year = intval($fields[2]);

if ( !($day >= 1 && $day <= 31) )
{
// string ist falsch --> Fehlermeldung
}

if ( !($month >= 1 && $day <= 12) )
{
// string ist falsch --> Fehlermeldung
}

// für die Überprüfung xx oder xxxx fällt mir grad nichts besseres ein
if ( !($year >= 1 && $day <= 2500) )
{
// string ist falsch --> Fehlermeldung
}

Ein stilvollerer Weg wäre eine Überprüfung mittels relurärer Ausdrücke, aber das muss dir mal ein anderer zeigen. Kann ich selbst nicht gut genug.

Verfasst: 01.06.2004 19:44
von exweised
hey, danke. so funktioniert das schon gut. ;)

blos, sind noch keine bindestriche oder punkte vorhanden, zeigt er mir ne fehlermeldung, welche auf diese zeile zutrifft:

Code: Alles auswählen

$fields = explode($delimiter, $string);
wie kann ich das jetzt umgehen, indem er erst auf diese zeile zugreift wenn alles korrekt ausgefüllt wurde? geht sowas mit switch?

Verfasst: 01.06.2004 22:35
von QCO
Also ich dachte, dass du an dieser Stelle

Code: Alles auswählen

// string ist falsch --> Fehlermeldung
eine Fehlermeldung einbaust und dann halt den Code nicht mehr ausführen lässt.

Code: Alles auswählen

if ( count(explode('.', $string)) == 3 && count(explode('-', $string)) == 1 )
{
 // string ist richtig und . ist Trennzeichen
 $delimiter = '.';
}
elseif ( count(explode('.', $string)) == 1 && count(explode('-', $string)) == 3 )
{
 // string ist richtig und , ist Trennzeichen
 $delimiter = '-';
}
else
{
// string ist falsch --> Fehlermeldung
$error = true;
}

if ( !$error )
{
 $fields = explode($delimiter, $string);

 $day = intval($fields[0]);
 $month = intval($fields[1]);
 $year = intval($fields[2]);

 if ( !($day >= 1 && $day <= 31) )
 {
 // string ist falsch --> Fehlermeldung
 }

 if ( !($month >= 1 && $day <= 12) )
 {
 // string ist falsch --> Fehlermeldung
 }

 // für die Überprüfung xx oder xxxx fällt mir grad nichts besseres ein
 if ( !($year >= 1 && $day <= 2500) )
 {
 // string ist falsch --> Fehlermeldung
 }
}

Verfasst: 02.06.2004 11:24
von exweised
jo, er zeigt mir die fehlermeldung an, die wir da eingebaut haben. dass is richtig. blos für diese zeile:

Code: Alles auswählen

$fields = explode($delimiter, $date);
zeigt er mir folgende fehlermeldung:

Code: Alles auswählen

Warning: explode(): Empty delimiter. in g:\apache\htdocs\datum.php on line 37
da helft auch der trick mit dem $fehler nicht. mhh ... :-?

Verfasst: 02.06.2004 11:31
von exweised
ach, ich habe es jetzt so gemacht, dass geht ja auch.

Code: Alles auswählen

if($delimiter == "-" || $delimiter == ".") {
    $fields = explode($delimiter, $date);
    [...]
} else {
    die;
}

Verfasst: 02.06.2004 14:20
von exweised
mist, ich habe jetzt noch ein anderes kleines problem, wo ich mal wieder nicht auf ein lösungsweg komme. :roll:

also, der monat steht ja jetzt in der variable $month. jetzt soll aber aus der monatszahl (1 oder 01; 2 oder 02; 3 ... ) der monat als wort, als januar, etc. stehen. ich habe diese erstmal in ein array $month_ger gepackt. jetzt muss ja irgendwie mittels str_replace die zahl erstetzt werden und das immer automatisch mit der jeweiligen zahl dem richtigen monat zugewiesen werden. also, irgendwie mit ner schleife. oder denke ich zu kompliziert? :roll:

Verfasst: 02.06.2004 14:39
von QCO
exweised hat geschrieben:oder denke ich zu kompliziert?
Ja, durchaus...

Code: Alles auswählen

$months_ger = array('Januar', 'Februar', 'März');// usw.
$text = $months_ger[$month - 1];

Verfasst: 02.06.2004 16:16
von exweised
hey supi, danke. ;) ging ja doch leichter, als ich dachte. :D