PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werte aus Formular an eine bestimmte Funktion übergeben



baron_huehnerho
07-12-2003, 17:52
Hallo,

ich habe ein kleines Problem beim übergeben von werten aus einem Formular an eine Funktion.

Ich habe eine einzelne Datei, in der ich alle Funtionen, die ich definiere gesammelt drin habe. Nun will ich ein Formular haben, das die eingegebenen Werte an die Funktion create_cd in der Datei functions.php übergibt.
Wie mache ich das?

besten dank

Stanislaus
08-12-2003, 12:55
Indem Du den Wert einfach übergibst.

Wenn Dein Formular per POST seine Daten verschickt ganz einfach
create_cd($_POST['variable']);

Oder wo ist Dein Problem?

offe
08-12-2003, 15:55
Hi,

brauchst du aber nicht, da die $_POST Variable global ist!

Offe

Stanislaus
08-12-2003, 16:06
Original geschrieben von offe
Hi,

brauchst du aber nicht, da die $_POST Variable global ist!

Offe
Aber nur wenn register_globals auf on gesetzt ist, was es nicht tun sollte.

offe
08-12-2003, 16:40
Hi,

dann verstehe ich:

Die neuen "Superglobals" stehen seit der PHP Version 4.1.0. zur Verfügung. Dieses sind die Arrays $_GET, $_POST ... und werden informell als Superglobals bezeichnet, weil sie immer zur Verfügung stehen, ohne Berücksichtigung des Geltungsbereichs.

falsch.

> Aber nur wenn register_globals auf on gesetzt ist, was es nicht tun sollte.

sagt nur das ich auf die Variable mit $_POST['variable'] und nicht mit $variable zugreifen muß!

Offe

Gaert
08-12-2003, 17:50
Hi!

Um ganz korrekt zu sein:
Die superglobalen Variablen stehen seit PHP 4.1 immer, (unabhängig von der register_globals Einstellung) zur Verfügung.

Stanislaus
09-12-2003, 07:19
Moin, moin!

Auf $_POST['dingens'] kann man seit 4.1 immer zugreifen.
Wenn register_globals = on ist kann man den Wert zusätzlich über die Variable $dingens erreichen. Und genau dieser Effekt ist eben nicht erwünscht.

Bis neulich ...

offe
09-12-2003, 10:24
Hi,

wollte auch nur sagen, daß ich der Funktion die globalen Variablen nicht übergeben muß.

Offe

Stanislaus
09-12-2003, 10:32
Original geschrieben von offe
Hi,

wollte auch nur sagen, daß ich der Funktion die globalen Variablen nicht übergeben muß.

Offe
Ach so jetzt verstehe ich.
Du meintest, daß man der Funktion die Variable nicht übergeben muss, da $_POST eh superglobal ist und die Funktion somit direkt darauf zugreifen kann.

Bis neulich ...

baron_huehnerho
09-12-2003, 13:39
Danke für die Antworten.
Ich habe mich jetzt aber dazu entschlossen eine Zwischenebene zwischen den Frontends und den Funktionen zu machen, die die Werte eines bestimmten Frontends einer bestimmten Funktion zuweist

ohcibi
09-12-2003, 19:22
ooehm. es is doch vollkommen sinnlos die $_POST in der funktion aufzurufen ohne sie zu uebergeben... unabhaengig davon ob dafuer register_globals auf on gegeben werden muss oder so.... denn dann is die funktion ja nicht universell einsetzbar und meine frage is jetze wozu man eine extra funktion fuer einen nur einmal aufgerufenen vorgang schreiben sollte.....

elrond
10-12-2003, 06:52
Original geschrieben von ohcibi
... meine frage is jetze wozu man eine extra funktion fuer einen nur einmal aufgerufenen vorgang schreiben sollte.....

ggf. um lesbaren Code zu erhalten...;)

ohcibi
10-12-2003, 09:26
Original geschrieben von elrond
ggf. um lesbaren Code zu erhalten...;)

aha dann sollte man also jeden einzelnen vorgang in einem script in eine extra funktion packen - so steht dann das eigentliche script in der functions.php und das script was den dateinamen seinerselbst traegt besteht nur aus einer abfolge von funktionsaufrufen angefuehrt von require oder include zum einbinden der functions.... zusaetzlich wird bei einem groeßer werdenden projekt bei jedem seitenaufruf, und wenn die startseite php-technisch nur aus einem besucherzaehler besteht, das ganze projekt mitgeladen..

das is natuerlich sehr lesbar und vor allendingen auch supischnell wa....

versteh ich einfach nich.... meiner meinungen nach definiert man funktionen nur wenn man sie an mehreren stellen in einem script/projekt brauch als an einer....

elrond
10-12-2003, 09:34
Du bist der deutschen Sprache aber schon soweit mächtig, dass Du mit "ggf." etwas anfangen kannst, oder ? (Alternativ könnte man auch "u.U." benutzen.)

Es bedeutet einfach nur, dass es keine Regel gibt, die heißt "alles was geht grhört in eine Funktion". Für mich macht es schon Sinn umfangreiche Funktionen durch auslagern in Unterfunktionen einzukürzen. Wenn's für Dich anders ist, ok.

Hast Du denn schon ein einigermaßen umfangreiches PHP-Projekt ans Laufen gebracht und über einen längeren Zeitraum gepflegt?

ohcibi
10-12-2003, 09:44
hey ich will jetz hier keinen penisvergleich machen... ich hab nich gesagt ich weiß es besser sondern ich verstehe es nich......

und was ich nich verstehe ist es GEGEBENENFALLS einen saubereren code zu erhalten indem man vorgaenge die nur ein einziges mal benoetigt werden in eine funktion auszulagern, das geht gegen meine vorstellungen von schnelligkeit da diese funktion (wenn sie in einer extra datei ausgelagert ist die fuer das ganze projekt gelten) ja jedesmal mitgeladen werden muss ich meine es waere gut wenn du mir ma ein beispiel zeigst wo sich das bevorteiligt zeigen wuerde....

das was ich im letzten post phantasiert habe ist uebrigens nur ein extremes szenario hervorgegangen aus einer bestimmten auslegung deiner aussage und kein indiz dafuer dass ich der deutschen sprache nich maechtig bin

elrond
10-12-2003, 10:26
hat recht, ich versuch's mit einem Beispiel:

Ich arbeite mit dem Templatesystem FastTemplate. Damit sieht es in vielen Funktionen etwa so aus:


$lvsmab=getlvsmabsel($rs_arr[0]["lvs_nr"],$rs_arr[0]["person_id"],"gotourl('".$PHP_SELF."?action=call&opt=03&callid=$callid&personid='+document.frmcall.mabpersonid[document.frmcall.mabpersonid.selectedIndex].value)");
$tpl->assign(array(
"{MAINTITEL}" => "Call-Bearbeitung",
"{CALLNR}" => $rs_arr[0]["callnr"],
"{LVSMAB}" => $lvsmab,
"{STATUS}" => $rs_arr[0]["status_text"],
"{COWNER}" => $rs_arr[0]["username"],
"{CCALL}" => $ccall,
"{PAGENAME}" => $PHP_SELF,
"{TABLE}" => $tabval,
"{NEXT}" => $next,
"{PREV}" => $prev,
"{LVSINFO}" => $lvsinfo,
"{CALLINFO}" => $callinfo,
"{LVSNR}" => $rs_arr[0]["lvs_nr"],
"{ACTION}" => $callaction,
"{STATUSEDIT}" => $statusedit,
"{OWNEREDIT}" => $owneredit,
"{RELOADURL}" => $PHP_SELF."?".$QUERY_STRING
));



die Funktion "getlvsmabsel" erzeugt ein select-Feld. Dazu ist eine Datenbankabfrage notwendig. Das Ergebis wird überprüft und der Fehlerfall abgefangen. All diese Aktionen würden den Code im der Hauptfunktion aufblähen und damit schwehrer pflegbar machen. Ich habe jetzt nur die Belegung eine Var herausgegriffen. Wenn du dir vorstellst, dass ich mit den anderen auch so verfahre wird meine Intension vieleicht klarer.

Die Frage nach deine Projekterfahrung dienete keineswegs irgendeinem Größenvergleich. Ich habe die Notwendigkeit lesbaren Code zu erzeugen auch erst eingesehen, nachdem ich lange Tage fluchend vor meinem alten "Spagetti-Code" gesessen habe...

Stanislaus
10-12-2003, 10:33
Original geschrieben von ohcibi
ooehm. es is doch vollkommen sinnlos die $_POST in der funktion aufzurufen ohne sie zu uebergeben... unabhaengig davon ob dafuer register_globals auf on gegeben werden muss oder so.... denn dann is die funktion ja nicht universell einsetzbar und meine frage is jetze wozu man eine extra funktion fuer einen nur einmal aufgerufenen vorgang schreiben sollte.....
Ganz einfach. Es kommt auf die Aufgabe an, die diese Funktion erfüllen soll. Hast Du z.B. eine Funktion, die irgendeinen Wert (bsp. einen Preis) mit Tausendertrennzeichen und Währung versieht und die Werte kommen aus der DB aus GET und POST etc. dann übergibst Du natürlich den Wert an die Funktion.
Es kann aber auch den Fall geben, das eine Funktion zwar mehrfach benötigt wird aber immer nur die selben Variablen auswertet.
Beispiel (aus meinem atkl Projekt): Es existiert ein Formular, daß drei Submit Buttons beinhaltet 1. Änderungen speichern, 2. Neuen Eintrag anlegen und 3. Datensatz löschen. Da das Formular immer auf das selbe Script verweist muss besagtes Script dann auswerten, welcher der drei submit Buttons gedrückt wurde um entsprechend zu reagieren. Dazu habe ich eine Funktion getFormAction(), die keinen übergabeparameter erwartet denn die Submit Buttons sind immer im $_POST Array und nirgendwo sonst. Je nach dem welchen subimt Button die Funktion nun im $_POST Arry findet gibt sie UPDATE, DELETE oder NEW zurück. Würde ich das mit einer Übergabe machen wäre es eh immer der selbe wert nämlich $_POST und darauf kann die Funktion nunmal auch selber zugreifen.
Das ganze hab ich nun in eine Basisklasse gepackt, von der alle Formulare abgeleitet sind und weiß so immer ganz genau welcher Button gedrückt wurde.

Ich hoffe anhand des Beispiels ist das ganze etwas klarer geworden.

Bis neulich ...

ohcibi
10-12-2003, 12:28
Original geschrieben von Stanislaus


Ich hoffe anhand des Beispiels ist das ganze etwas klarer geworden.



das ist es wohl...:cool: ich danke dir...