DerMicha Geschrieben 15. November 2007 Geschrieben 15. November 2007 Also... Hallo erstmal! :-) Ich habe mal gleich zwei Fragen: 1. Aus einem Login-Formular heraus möchte ich eine Methode meiner Klasse "Login" aufrufen. Geht das über <form action="???" ??? Falls ja, ... WIE? 2. Ich habe das Problem, dass eine Klasse K1 eine weitere K2 aufruft, die sich nicht im gleichen Verzeichnis befindet. Diese via require_once() einzubinden ist noch kein Problem, aber die nächste Klasse K2 greift dann wieder auf eine Weitere K3 zu, die sich ebenfalls in einem anderen Verzeichnis befindet. Gebe ich nun den realtiven Pfad von K2 zu K3 in K2 an, wird diese vom Apache nicht gefunden. Gebe ich den relativen Pfad von K1 zu K3 in K2 an, wird die Klasse gefunden und korrekt eingebunden. Da mir das aber jegliche Nutzbarkeit der Klassen nimmt, habe ich mit: define('PATH_CLASSES_BLA', 'classes/bla/'); eine Konstante angelegt, die meiner Meinung nach funktionieren sollte... (also Eclipse findet alles) Binde ich somit jedoch über: require_once PATH_CLASSES_BLA.'K3.php'; geht gar nichts... Kann mir da zufällig jemand weiterhelfen? :confused::confused: Ich sehe wohl gerade den Wald vor lauter Bäumen nicht... :rolleyes: Ich danke schonmal recht herzlich! Ciao :old Zitieren
Aiun Geschrieben 15. November 2007 Geschrieben 15. November 2007 zu deinem Formular: in action schreibst du dateien, nicht klassen. Also <form action="index.php5"> jetzt kannst du per POST variablen übergeben, z.B. $_POST['controller'] = 'Login' $_POST['action'] = 'loginfunktion'; ergo <input type="hidden" name="controller" value="logiN"> deine Index.php5 wertet das dann aus require_once($klassenname); $obj = new $klassenname(); $obj->$func();[/PHP] aber VORSICHT !!!, require_once von _GET oder _POST ist sehr unsicher, die ganzeN variablen sollten vorher durch filter geprüft werden (if(strpos, preg_match .... zu deiner Konstanten, gute Idee. Du solltest bedenken, wenn du mit classes/ anfängst, ist der Anfang davon ja relativ, nicht absolut. Ich empfehle hier mit "/"home/user/server/web/directory/ .... wirklich von der rootebene aus zu gehen. Am besten noch, du kapselst dein require_once() in einer Factory-Klasse oder eigenen Funktion um im zweifelsfall debug-Code da rein zu setzen. Zitieren
geloescht_JesterDay Geschrieben 15. November 2007 Geschrieben 15. November 2007 Binde ich somit jedoch über: require_once PATH_CLASSES_BLA.'K3.php'; geht gar nichts... Also, was macht require(_once) bzw include(_once)? Nichts anderes, als die Datei die da angegeben ist an die Stelle in den Quellcode kopieren und eben PHP-Code auszuwerten. Wenn du also deine Datei, die du includen willst komplett markierst (STRG+a) und an die stelle des require Befehlst kopierst, dann kannst du sehen wie das zur Laufzeit aussieht. Denke dir sollte jetzt schon klar sein, warum deine relativen Pfade nicht funktionieren... Solche Konstanten etc hab ich immer in eine Config-Datei ausgelagert. Das kann auch für jede Klasse eine eigene sein, wenn die alle in einem Config-Ordner liegen. Dann musst du nur an einer Stelle die Pfade anpassen (absolute, wie oben ja schon erwähnt). Du könntest das ganze auch "Webserverabsolut" machen. Also ausgehen vom Webroot die Pfade angeben. Dann müsstest du nur jeweils den absoluten Pfad zum Webroot anpassen, also ung so: $webServerDocumentRoot = "/srv/myServer/www"; [...] $pathToClass1 = "/classes/class1"; $pathToClass2 = "/classes/someThing/class2"; [...] require_once($webServerDocumentRoot . $pathToClass1); Wobei der absolute Pfad zum DocumentRoot (also die Configdatei) am besten außerhalb des DocumentRoots abgelegt wird. Dazu hab ich immer eine inclue_config Datei verwendet, die im DocumentRoot liegt. Die tut nix anderes, als die eigentliche Config-Datei einzubinden (absoluter Pfad), die ganz woanders liegt. Somit haben deine Skripte immer eine Datei an einer fixen Stelle zum einbinden, du kannst die eigentliche Config aber hinlegen wo du willst und musst das nur in dieser einen Datei anpassen. Auch sehr praktisch bei DB-Passwörtern etc. Sowas will man ja nicht unbedingt im DocumentRoot liegen haben. Zitieren
DerMicha Geschrieben 15. November 2007 Autor Geschrieben 15. November 2007 Also danke schonmal, aber (jetzt kommts), Ich habe eine externe config-Datei, in der ich das alles drin habe (auch die DB Zugangsdaten) Dass das mit den relativen Pfaden nicht so ganz funktionieren kann, wurde mir dann heute auch klar :-P Aber absolute Pfade funtionieren auch nicht. Oder sagen wir mal so, was genau ist mit absoluten Pfad gemeint? Ausgehend davon, dass es sich um eine lokale Testumgebung handelt! Um nochmal kurz auf meine andere Frage zurück zu kommen...ist es nicht möglich direkt mit <form action="..." eine Methode einer bestimmten Klasse anzusprechen? Ich danke schonmal für die bisherige Unterstützung Wünsche einen schönen Abend Zitieren
Aiun Geschrieben 15. November 2007 Geschrieben 15. November 2007 1. Absoluter Pfad ausgehend von ROOT, also alle Pfade, egal wann und egal wo gehen vom gleichen punkt aus und sind immer gleich, egal von wo aufgerufen. das ist bei Linux (ergo Server hoffe ich) / bei Windows die jeweilige Festplatte, C, D, E, F, G, H, I, J und co 2. Nein Zitieren
DerMicha Geschrieben 15. November 2007 Autor Geschrieben 15. November 2007 Super Sache...dann werde ich mich gleich mal ransetzen und das nochmal probieren! An dieser Stelle erst einmal recht herzlichen Dank! Wenn sich noch was ergibt, melde ich mich! :-) Ciao Zitieren
DerMicha Geschrieben 16. November 2007 Autor Geschrieben 16. November 2007 Ich bins nochmal kurz! Läuft jetzt alles! Danke nochmal Zitieren
geloescht_JesterDay Geschrieben 19. November 2007 Geschrieben 19. November 2007 Um nochmal kurz auf meine andere Frage zurück zu kommen...ist es nicht möglich direkt mit <form action="..." eine Methode einer bestimmten Klasse anzusprechen? HTTP != php Ein HTML form Tag ist nur die Umsetzung um Daten per HTTP Post an den Server zu senden. Der bekommt die anfrage und ruft die im Action Attribut angegebene Datei auf. Je nach Einstellung schickt er die dann durch den PHP-Interpreter vor der Rüchgabe an den Client. PHP, wenn aufgerufen, geht die Datei von Anfang bis ende durch und führt auf dem Weg anfallenden PHP-Code aus. Das Schema wie sowas abläuft solltest du dir klar machen. Es hilft ungemein, wenn du das verstanden hast und mit PHP entwickelst. Der Client (Browser meistens) und der Server (PHP in dem Fall) sind total unabhängig voneinander. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.