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
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
Anmerkung: das echo "hallo"; kann ich nicht weglassen, weil das an anderer Stelle noch genutzt wird.
Du mußt schon das echo "hallo" an die richtige Stelle verschieben. Anders geht das nicht.
 

Tyracor

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

}
 

zoom

Antonowka
Registriert
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?
 

Tyracor

Idared
Registriert
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.
 

kip

Rheinischer Krummstiel
Registriert
19.03.09
Beiträge
378
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.
 

Tyracor

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

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
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.
 

zoom

Antonowka
Registriert
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>";
 
Zuletzt bearbeitet:

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.057
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.