Zum Inhalt springen

OOP PHP + PHP-Anfänger ==> Ich :-)


Empfohlene Beiträge

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::rolleyes:

Ich danke schonmal recht herzlich!

Ciao

:old

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...