• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Funktion in php

zoom

Antonowka
Registriert
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
 
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"; }

}
 
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?
 
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.
 
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?

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.
 
Es kommt kein Echo in eine function!
Mach doch sowas:

Code:
if (check(..)) { return "a ungleich 5"; }
if (check(..)) { return "a gleich 5"; }
...
 
Wie kann ich das dann am geschicktesten realisieren?
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.
 
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>";
 
Zuletzt bearbeitet:
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.