Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Aus if-Anweisung springen (https://www.delphipraxis.net/139183-%5Bphp%5D-aus-if-anweisung-springen.html)

TheMiller 25. Aug 2009 09:13


[PHP] Aus if-Anweisung springen
 
Hallo,

nach langer (Urlaubs-)Zeit, bin ich mal wieder hier. Und das gleich mit einer Frage ;)

Ich programmiere gerade eine Seite in PHP. PHP an sich kann ich auch ganz gut, aber ich habe gerade eine Stil-Frage.

Und zwar prüfe ich viele verschiedene Dinge, wenn ich ein ausgefülltes Formular zugesendet bekomme. Nun möchte ich bei einem Fehler die weiteren Prüfungen abbrechen und mit dem Ausgeben der Fehlermeldung und der restlichen Seite fortfahren.

Es sieht ungefähr so aus:

Code:
if(isset($_POST['speichern'])) {

   $username = $val->checkText('Username', $_POST['username'], 3, 15);
   
   //Hier nicht validieren, da md5 benutzt wird.
   $pass1 = $_POST['pass1'];
   $pass2 = $_POST['pass2'];

   if($pass1 !== $pass2) {
     addFehler('Passwort', 'Die Passwörter stimmen nicht überein');
     //HIER AUS DER IF RAUSSPRINGEN - EXIT GEHT NICHT, WEGEN DEM ANZEIGEN DES TEMPLATES!!!!!
   }

   if($pass1 == "" || $pass1 == NULL) {
     addFehler('Passwort', 'Das Passwort darf nicht leer sein');
     //HIER AUS DER IF RAUSSPRINGEN - EXIT GEHT NICHT, WEGEN DEM ANZEIGEN DES TEMPLATES!!!!!
   }

   $user = new user();
   
   $userdaten = array("username" => $username, "passwort" = md5($pass1));
   $user->insertUser(TABLE_USER, $userdaten);
   addMeldung('', 'Die Registrierung war erfolgreich');
}

$engine->showTemplate('registrierung'');
Klar könnte ich eine Kontrollvariable ($err = true / $err = false) anlegen, aber dann müsste ich immer ihren Wert prüfen, es ist viel Schreibarbeit und irgendwie unprofessionell....

Gibt's eine andere Lösung?

Vielen Dank

Die Muhkuh 25. Aug 2009 09:23

Re: [PHP] Aus if-Anweisung springen
 
Hi,

wie wäre es mit Else-If?

Code:
if(isset($_POST['speichern'])) {

   $username = $val->checkText('Username', $_POST['username'], 3, 15);
   
   //Hier nicht validieren, da md5 benutzt wird.
   $pass1 = $_POST['pass1'];
   $pass2 = $_POST['pass2'];

   if($pass1 !== $pass2) {
     addFehler('Passwort', 'Die Passwörter stimmen nicht überein');
     //HIER AUS DER IF RAUSSPRINGEN - EXIT GEHT NICHT, WEGEN DEM ANZEIGEN DES TEMPLATES!!!!!
   }
   else if($pass1 == "" || $pass1 == NULL) {
     addFehler('Passwort', 'Das Passwort darf nicht leer sein');
     //HIER AUS DER IF RAUSSPRINGEN - EXIT GEHT NICHT, WEGEN DEM ANZEIGEN DES TEMPLATES!!!!!
   }
   else {
     $user = new user();
   
     $userdaten = array("username" => $username, "passwort" = md5($pass1));
     $user->insertUser(TABLE_USER, $userdaten);
     addMeldung('', 'Die Registrierung war erfolgreich');
  }
}

$engine->showTemplate('registrierung'');

TheMiller 25. Aug 2009 09:27

Re: [PHP] Aus if-Anweisung springen
 
Ok das wäre eine Lösung (bei kleinen Formularen). Mein Formular ist aber größer (viel größer) - ich habe es hier nur gekürzt.

Oder kann man else-if auch intelligent bei großen Formularen (oder Prüfungen generell) anwenden und meinen gewünschten Effekt erreichen?

Ich hätte halt gerne was wie "exit_if()"... break / continue etc. funktioniert leider nicht.

mirage228 25. Aug 2009 09:28

Re: [PHP] Aus if-Anweisung springen
 
wie wärs mit
Code:
throw new Exception()
mit einem dazugehörigen Exception-Handler kannst Du die Meldung auch schön formatiert ausgeben.

Viele Grüße+

TheMiller 25. Aug 2009 09:32

Re: [PHP] Aus if-Anweisung springen
 
Ich hab's mir fast gedacht... Das ist jetzt wirklich Neuland.

Ich habe mir eine Funktion gebaut, die das "Fehlermeldungen"-Array ausgibt und schön positioniert anzeigt. Das wäre ja jetzt quasi überfüllig, oder?

Naja, ich schau mir das erstmal an.

Danke!

iGoA 25. Aug 2009 09:40

Re: [PHP] Aus if-Anweisung springen
 
Oder Du baust den ganzen Befehlsblock in eine Funktion und bei einem Abbruch trägst Du "return false" ein. Am Ende ein "return true". Dann kannst Du beim IF diese Funktion aufrufen und prüfen, ob sie durchgelaufen ist oder nicht.

TheMiller 25. Aug 2009 09:47

Re: [PHP] Aus if-Anweisung springen
 
@iGoA: Sehr gut. So wird's gemacht! Schau mal, ich habe einige Klassen geschrieben, die es genauso machen - warum kam ich da grad net selbst drauf.... vllt. weil's keine Klasse ist? :gruebel:

Wie auch immer - coole Idee - wird umgesetzt

Die Exceptions und Error_Handler scheinen mir ein wenig mit Kanonen auf Spatzen geschossen.

Danke an alle!

alcaeus 25. Aug 2009 18:07

Re: [PHP] Aus if-Anweisung springen
 
Andere Alternative:
Code:
switch (false) {
  case $pass1 == $pass2:
    // Code
    break;
 
  case !empty($pass2):
    // Code
    break;
 
  default:
    // Code
    break;
}
Die einzelnen case-Teile werden natuerlich ausgewertet und der erste, der false ergibt wird abgearbeitet...ganz simples Konstrukt ;)
Das Ganze kann man uebrigens auch mit switch (true) ausfuehren.

Greetz
alcaeus

TheMiller 25. Aug 2009 18:20

Re: [PHP] Aus if-Anweisung springen
 
Danke für die Antworten. Jetzt habe ich noch eine Stil-Frage dazu:

Ich sprach doch vorhin von meinem Fehlermeldungen-Array. Jeder Fehler der Auftritt, wird in das Array über die simple Funktion "addFehler" geschrieben.

Immer dann, wenn ich nicht möchte, dass spezieller Code ausgeführt wird, prüfe ich mit der simplen Funktion fehlerCount, ob Fehler aufgetreten sind.

Code:
function addFehler($feld, $msg) {
    global $fehler;
    $fehler[$feld] = $msg;
}

function addMeldung($feld, $msg) {
    global $meldungen;
    $meldungen[$feld] = $msg;
}

function fehlerCount() {
    return count($fehler);
}

////////////////
index.php
///////////////

[Prüfungen mit Fehler]

if(fehlerCount == 0) {
  $db->insertSQL.....
}

[Template anzeigen (und Fehler ausgeben)]
Kann man doch auch so lassen, oder ist das schlechter Stil?

alcaeus 25. Aug 2009 18:36

Re: [PHP] Aus if-Anweisung springen
 
Diese globals sind absolut haesslicher Stil und die prozedurale Programmierung ist absolut nicht mehr zeitgemaess. Sorry wenns boese klingt, is aber so.

BTW, guck dir fuer zukuenftige Projekte mal PHP-Frameworks wie z.B. Symfony an, mach dort ein Tutorial und du wirst die Art der PHP-Programmierung wie du sie bisher gemacht hast relativ schnell verlassen ;)

Greetz
alcaeus

[edit]Link zum Tutorial angepasst[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz