• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Abfragen vereinfachen

THE_fan

Neues Mitglied
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("/^[0-9]{1,2}$/",$_POST['einsatzid'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Nur Zahlen (einsatz id).");
  }
  else{ $einsatzid = $_POST['einsatzid']; }
  #TLF überprüfen
  if(!preg_match("/^[0-9]{1}$/",$_POST['tlf'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Für das TLF maximal <b>9</b> Personen.");
  }
  else{ $tlf = $_POST['tlf']; }
  #TSF-W überprüfen
  if(!preg_match("/^[0-6]{1}$/",$_POST['tsf'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Für das TSF-W maximal <b>6</b> Personen.");
  }
  else{ $tsf = $_POST['tsf']; }
  #MTF überprüfen
  if(!preg_match("/^[0-9]{1}$/",$_POST['mtf'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Für das MTF maximal <b>9</b> Personen."); 
  }
  else{ $mtf = $_POST['mtf']; }
  #Reserve überprüfen
  if(!preg_match("/^[0-9+]$/",$_POST['reserve'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      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("/^[0-9]{2}$/",$_POST['monat'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Datum Einsatz -> Monat falsch / nicht angegeben.");
  }
  else{ $monat = $_POST['monat']; }
  #Tag überprüfen
  if(!preg_match("/^[0-9]{2}$/",$_POST['tag'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Datum Einsatz -> Tag falsch / nicht angegeben."); 
  }
  else{ $tag = $_POST['tag']; }
  #jahr überprüfen
  if(!preg_match("/^[0-9]{4}$/",$_POST['jahr'])){
      echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Datum Einsatz -> Jahr falsch / nicht angegeben.");
  }
  else{ $jahr = $_POST['jahr']; }

Hat jemand eine Idee?

Danke vorab!
Gruß
Stefan
 
Werbung:
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 "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
      die("Datum Einsatz -> Monat falsch / nicht angegeben.");

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

PHP:
errors[] = "Datum Einsatz -> Monat falsch / nicht angegeben";

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 "<p>".$error."</p>";
  ...
 }
}

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
 
Werbung:
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("/^[0-9]{1,2}$/",$_POST[$element]))
    {
        echo "<meta http-equiv='refresh' content='3;URL=intern.php?site=addbericht'>";
        die($element." Nur nummerisch.");
    }
    else
    {
        $$element = $_POST[$element];
    }

}
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.
 
Zuletzt bearbeitet von einem Moderator:
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 ;) 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' => "/^[0-9]{1}$/"
    ),
    1 => array (
        'key'   => "tlf",
        'regex' => "/^[0-9]{1,2}$/"
    )
);

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

    } else {

    }
}
 
Werbung:
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.
 
Zurück
Oben