hänge bei einem php-problem

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

hänge bei einem php-problem

Beitrag 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.
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag 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.
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag 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?
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag 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
 }
}
Zuletzt geändert von QCO am 02.06.2004 14:00, insgesamt 1-mal geändert.
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag 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 ... :-?
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag 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;
}
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag 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:
Benutzeravatar
QCO
Mitglied
Beiträge: 708
Registriert: 15.03.2003 12:30
Wohnort: Leipzig

Beitrag 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];
Schnelle direkte Hilfe? Modeinbau? Umfassender, persönlicher Support? Ein individuelles Design/Template?
Ich bin käuflich und löse zu kleinen Preisen Deine Probleme. Anfragen bitte per PN oder Mail.
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag von exweised »

hey supi, danke. ;) ging ja doch leichter, als ich dachte. :D
Antworten

Zurück zu „Coding & Technik“