1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Funktion in php

Dieses Thema im Forum "PHP & Co." wurde erstellt von zoom, 13.04.09.

  1. zoom

    zoom Antonowka

    Dabei seit:
    06.03.06
    Beiträge:
    356
    Moin!

    Ich habe für ein etwas umfangreicheres Formularskript eine Funktion erstellt. Diese Funktion checkt halt, ob Felder ausgefüllt wurden, gibt einen Text aus und wird am Ende auf false oder true gesetzt.
    Mein kleines Beispiel:
    Code:
    function check($a) {
    if($a != 5) {
    echo "hallo";
    return false;
    }
    else {
    return true;
    } }
    // ein Kommentar
    if(check($a) == false) {
    echo "a ist nicht 5";
    }
    else {}
    
    Nun meine generelle Frage zu Funktionen in php. Bei der if-Anweisung nach dem Kommentar wird geprüft, ob die Funktion check false ist. Leider wird dabei auch schon das "hallo" ausgegeben. Wie kann ich das vermeiden? Es soll also nur überprüft werden, ob die Funktion true oder false ist. Das "hallo" soll nicht ausgegeben werden. Anmerkung: das echo "hallo"; kann ich nicht weglassen, weil das an anderer Stelle noch genutzt wird.
    Kann mir jemand weiterhelfen?

    Gruß zoom
     
  2. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Du mußt schon das echo "hallo" an die richtige Stelle verschieben. Anders geht das nicht.
     
  3. Tyracor

    Tyracor Idared

    Dabei seit:
    13.04.09
    Beiträge:
    26
    Stimmt nicht ganz.
    Um Funktionen ganz "allgemein" zu gestalten macht man KEINE Ausgaben in eine Function.
    Sondern nur sogenannte "returns" - Diese beenden dann auch die Funktion.

    zum Beispiel mache ich im "Hauptteil"
    Code:
    echo superfunktion(par1,par2,par3,par4,par5,par6,par7,par8);
    
    und die function ist dann
    Code:
    function superfunktion (....) {
    
    if(par1....&&par2....) { return "alles drin";  }
    else { return "es fehlt was"; }
    
    }
    
     
  4. zoom

    zoom Antonowka

    Dabei seit:
    06.03.06
    Beiträge:
    356
    Das Problem ist, dass mein return, also die Ausgabe "hello" etwas komplexer ist. Das heißt, die Ausgabe beinhaltet noch eine for-Schleife und eine if-Anweisung. Wie kann ich das dann am geschicktesten realisieren?
     
  5. Tyracor

    Tyracor Idared

    Dabei seit:
    13.04.09
    Beiträge:
    26
    Werd nen bisschen genauer, dann kann ich dir auch helfen.
    Normalerweise ... "rechnest" du halt in der function und gibts das Ergebnis dann per return zurück.
     
  6. kip

    kip Antonowka

    Dabei seit:
    19.03.09
    Beiträge:
    357
    etwas unschön, aber könntest es so machen:

    Code:
    function check($a, $justcheck=false) {
    if($a != 5) {
    if ($justcheck == false) echo "hallo";
    return false;
    }
    [...]

    Code:
    if(check($a, true) == false) {
    echo "a ist nicht 5";
    }
    wie gesagt, keine schöne lösung - ziemlich zusammengehackt. Das was meine Vorredner gesagt haben stimmt.
     
  7. Tyracor

    Tyracor Idared

    Dabei seit:
    13.04.09
    Beiträge:
    26
    Es kommt kein Echo in eine function!
    Mach doch sowas:

    Code:
    if (check(..)) { return "a ungleich 5"; }
    if (check(..)) { return "a gleich 5"; }
    ...
    
     
  8. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Beschreibe doch einfach was Du erreichen willst, und nicht wie Du es gedenkst umzusetzen. So kann man nur in die Glaskugel schauen und Dir nicht wirklich helfen.
     
  9. zoom

    zoom Antonowka

    Dabei seit:
    06.03.06
    Beiträge:
    356
    Ich hatte gedacht, dass es eine allgemeine einfache Lösung gibt, die ich bisher nicht kenne. Aber dann werde ich konkreter. Ich möchte wie gesagt ein recht komplexes Formular verarbeiten, bei dem viele Einträge überprüft werden müssen. Unter anderem soll geprüft werden, ob die angegebene eMail-Adresse korrekt ist. Dazu habe ich eine Funktion erstellt. Die anderen Überprüfungen sind ebenfalls in Funktionen definiert. Nun geben alle Funktionen ein false aus, wenn etwas nicht richtig eingegeben wurde. Außerdem soll dem User nach dem klick auf Abschicken eine Info ausgegeben werden, die ihm anzeigt, was er falsch angegeben hat. Damit die Mail verschickt wird, müssen natürlich alle Funktionen auf true sein.
    Mein Problem ist jetzt: Wo binde ich die echo-Anweisungen für die sehr individuellen Fehlermeldungen ein?
    Code:
    if(check_data($_REQUEST['name'], $_REQUEST['firstname']) == false || check_email($_REQUEST['email']) == false) {
    Ausgabe der fehlenden oder falschen Angaben
    }
    else {
    // eMail senden
    }
    
    Die Ausgabe der fehlenden Angaben ist sehr umfangreich. Das Script würde dadurch sehr unübersichtlich werden. Sie Fehlerausgabe für eine Funktion ist folgende:
    Code:
    $check_data_array = array($_REQUEST['name'], $_REQUEST['firstname'], $_REQUEST['street'], $_REQUEST['zip'], $_REQUEST['city']);
    $check_data_data = array("Name", "Vorname", "Straße", "PLZ", "Ort");
    	if($_REQUEST['name'] == "" || $_REQUEST['firstname'] == "" || $_REQUEST['street'] == "" || $_REQUEST['zip'] == "" || $_REQUEST['city'] == "") {
    		echo "Sie müssen von Ihrer Adresse folgende Daten angeben:<ul>";
    			for($n = 0; $n < sizeof($check_data_array); $n++) {
    				if($check_data_array[$n] == "") {
    					echo "<li>".$check_data_data[$n]."</li>";
    				}
    				else {}
    			}
    		echo "</ul>";
     
    #9 zoom, 14.04.09
    Zuletzt bearbeitet: 14.04.09
  10. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.255
    Eine mögliche Lösung dafür, Du übergibst den Prüffunktionen eine Variable per Referenz in der Du das Ergebnis festhälst und anschließend nach dem alle Prüfungen abgeschlossen ist, gibst Du eine Fehlermeldung aus.
    Code:
    function check($a, &$error_status, $justcheck=false) {
    ...
        return false;
    }
    
    function error_report (&$error_status) {
        ... Fehlerausgabe
    }
    
    error_status definiert man dann sinnvollerweise als class, so daß man für alle Prüfungen Felder definieren kann.

    (Ergänzung)Alternativ kannst Du natürlich die Fehlermeldung prozedural runterprogrammieren, und anstatt direkt auszugeben erstmal die Ausgabe in einen String ausgeben und diesem am Schluß ausgeben.
     

Diese Seite empfehlen