Abfragen vereinfachen

Hallo zusammen,

ich bin gerade dabei mir ein ACP für unsre Feuerwehr-Homepage zu programmieren.
Nun habe ich u.a. eine Maske, über die ich Einsatzberichte eintragen kann.
Die Werte der Input-Felder möchte ich dabei überprüfen, damit es im Frontend bzw. bei der Ausgabe keine Schwierigkeiten gibt.

Allerdings sieht mir das alles ziemlich umständlich aus, wie ich es gerade versuche zu lösen.
Gibt es eine Möglichkeit, das alles etwas zu vereinfachen?

Habe schon an eine Klasse gedacht, allerdings weiß ich nicht, wie ich das aufbauen soll, da die Abfragen z.T. unterschiedlich sind.

[php]
if(!preg_match(„/[1]{1,2}$/“,$_POST[‚einsatzid‘])){
echo „“;
die(„Nur Zahlen (einsatz id).“);
}
else{ $einsatzid = $_POST[‚einsatzid‘]; }
#TLF überprüfen
if(!preg_match(„/[2]{1}$/“,$_POST[‚tlf‘])){
echo „“;
die(„Für das TLF maximal 9 Personen.“);
}
else{ $tlf = $_POST[‚tlf‘]; }
#TSF-W überprüfen
if(!preg_match(„/[3]{1}$/“,$_POST[‚tsf‘])){
echo „“;
die(„Für das TSF-W maximal 6 Personen.“);
}
else{ $tsf = $_POST[‚tsf‘]; }
#MTF überprüfen
if(!preg_match(„/[4]{1}$/“,$_POST[‚mtf‘])){
echo „“;
die(„Für das MTF maximal 9 Personen.“);
}
else{ $mtf = $_POST[‚mtf‘]; }
#Reserve überprüfen
if(!preg_match(„/[5]$/“,$_POST[‚reserve‘])){
echo „“;
die(„Fehler“);
}
else{ $reserve = $_POST[‚reserve‘]; }

#Einsatz Anfang
if(!is_numeric($_POST[‚alarm_stunde‘]) && !is_numeric($_POST[‚alarm_minute‘])){
$alarm = „:“;
}else{
$alarm = $_POST[‚alarm_stunde‘].„:“.$_POST[‚alarm_minute‘];
}
#Einsatz Ende
if(!is_numeric($_POST[‚ende_stunde‘]) && !is_numeric($_POST[‚ende_minute‘])){
$ende = „:“;
}else{
$ende = $_POST[‚ende_stunde‘].„:“.$_POST[‚ende_minute‘];
}

$gesamt = $tlf + $tsf + $mtf + $reserve;#Gesamtleute im Einsatz
#Monat überprüfen
if(!preg_match(„/[6]{2}$/“,$_POST[‚monat‘])){
echo „“;
die(„Datum Einsatz → Monat falsch / nicht angegeben.“);
}
else{ $monat = $_POST[‚monat‘]; }
#Tag überprüfen
if(!preg_match(„/[7]{2}$/“,$_POST[‚tag‘])){
echo „“;
die(„Datum Einsatz → Tag falsch / nicht angegeben.“);
}
else{ $tag = $_POST[‚tag‘]; }
#jahr überprüfen
if(!preg_match(„/[8]{4}$/“,$_POST[‚jahr‘])){
echo „“;
die(„Datum Einsatz → Jahr falsch / nicht angegeben.“);
}
else{ $jahr = $_POST[‚jahr‘]; }
[/php]

Hat jemand eine Idee?

Danke vorab!
Gruß
Stefan


  1. 0-9 ↩︎

  2. 0-9 ↩︎

  3. 0-6 ↩︎

  4. 0-9 ↩︎

  5. 0-9+ ↩︎

  6. 0-9 ↩︎

  7. 0-9 ↩︎

  8. 0-9 ↩︎

Soweit ich das sehe willst Du immer eine Fehlermeldung ausgeben die nach 3 Sekunden auf die Eingabeseite zurück leitet?

Dafür musst Du schon mal nicht immer

[php]echo „“;
die(„Datum Einsatz → Monat falsch / nicht angegeben.“);[/php]

schreiben. In jeder Bedingung kannst Du statt dessen auch ein error-Array füllen.

[php]errors = „Datum Einsatz → Monat falsch / nicht angegeben“;[/php]

und nach all den if-Bedingungen und Prüfungen schaust Du, ob $errors ein Array mit mehr als 0 Inhalten ist. Wenn ja, gibst Du die darin stehenden Fehlermeldungen aus und leitest dann weiter.

[php]if( is_array($errors) && count($errors) > 0 ) {
foreach( $errors as $error )
{
echo „

“.$error.„

“;

}
}[/php]

Weitere Alternative: sammel die Fehler ebenso und speicher sie in einer Sitzungsvariable. Wenn diese gefüllt ist, leitest Du zurück zur Eingabeseite und gibst dort diese Fehlermeldungen alle aus. Das ist aus Nutzersicht übersichtlicher, da man das Eingabefeld + die dazugehörige Fehlermeldung sofort sieht.

Hallo threadi,

vielen Dank dafür. Das sieht schon mal sehr gut aus!

Nur damit ich es richtig verstehe:
Mir bleibt keine andere Möglichkeit, um jedes Input einzeln zu überprüfen?
Ich würde auch dort gerne eine Schleife einbauen… Allerdings weiß ich nicht, wie ich an die Sache rangehen soll, da jede Überprüfung verschiedene Werte benötigt, auf die überprüft werden soll.

Gruß
Stefan

Wenn alle $_POST Variablen auf nummerisch geprüft werden sollen, dann geht auch sowas:
[PHP]
$keys = array_keys($_POST);

foreach($keys as $element)
{
if(!preg_match(„/[1]{1,2}$/“,$_POST[$element]))
{
echo „“;
die($element." Nur nummerisch.");
}
else
{
$$element = $_POST[$element];
}

}
[/PHP]
Eventuelle Fehlermeldumngen müssten dann noch angepasst werden.

ps
Natürlich könnte man $keys auch mit dem entsprechenden Array füllen, das geprüft werden soll.


  1. 0-9 ↩︎

Hallo sysop,

danke dafür!
Das „Problem“ ist aber eben, dass nicht jede Überprüfung gleich aussieht.
Manchmal sind es 2 Zahlen, manchmal nur eine, manchmal Zahlen von 0-6 und manchmal eben Zahlen von 0-9.
Man müsste eine Funktion hinbekommen, die das übernimmt. Aber so viele Werte kann man leider nicht in einem Input an Attributen „verstecken“.

Ich dachte, dass es zu umständlich sei, was ich dort gezaubert :wink: habe.

Danke euch!
Gruß
Stefan

Die Anzahl der IF-Abfragen kannst Du schon reduzieren; mir fällt da aber momentan nur folgendes ein:
[PHP]
$elements = array(
0 => array (
‚key‘ => „einsatzid“,
‚regex‘ => „/[1]{1}$/“
),
1 => array (
‚key‘ => „tlf“,
‚regex‘ => „/[2]{1,2}$/“
)
);

for ($i = 0; $i < count($regEx); $i++) {
if (preg_match($elements[$i][‚regex‘]), $_POST[$elements[$i][‚key‘]]) {

} else {

}

}
[/PHP]


  1. 0-9 ↩︎

  2. 0-9 ↩︎

Genau, oder 3 Schleifen durchlaufen lassen. Eine Erweiterung deiner Abfragen wäre dann eine Erweiterung des Arrays, mehr nicht.
Wenn deine Abfragen (Anzahlmässig) so bleiben, sehe ich derzeit auch noch keinen Bedarf da eine „Vereinfachung“ in den Code zu bringen.

Das beruhigt mich :slight_smile:

Vielen Dank euch!

Gruß
Stefan