|
Variablen von Datei zu Datei übergeben
Folgende Situation: wir haben zwei verschiedene Dateien, nennen wir die erste
Datei login.php und die zweite ist unsere profil.php. Wir möchten
nun eine Variable, welche in der login.php gespeichert wurde in der nächsten
Datei weiter benutzen können. Wie greife ich auf die Variable in der zweiten
Datei zu, wenn diese in einer anderen Datei gesetzt wurde ?
Hierzu müssen wir verschiedene Fälle betrachten und ein wenig
Grundlagen erläutern.
Fall 1: die login.php included die profil.php Datei
Dies ist zugleich ein klassisches Beispiel dafür, wie man Daten mit POST übermittelt.
Wenn eine Datei eine andere Datei mit include(); einfügt,
dann kann man in der zweiten Datei profil.php im Code auf alle Variablen zugreifen, die auch
in der ersten Datei login.php gesetzt worden sind. Hierzu ein Beispiel, wie man mehrere
Dateien ineinander "includen" kann. Include bedeutet nichts anderes, als das genau an dieser
Stelle wo wir include("datei_xy.php"); schreiben der gesamte Quellcode von der Datei die wir
in den runden Klammern angegeben haben für php zum abarbeiten eingefügt wird. So
kann man einen sehr großen Programmcode in viele kleine Unterteilen, in verschiedenen
Dateien abspeichern und dann mehrfach benutzen. Der Programmcode bleibt übersichtlich und
ich weiss, dass ich um was am Login zu ändern an der login.php ändern muss. Wäre
dies alles in einem einzigen Programmcode müsste ich die Zeilen für den Login
warscheinlich aus tausenden von Zeilen raussuchen.
Datei: formular.html:
<form method="POST" action="login.php"> <b>Login</b><br> <br> Username: <input name="loginname"><br> Passwort: <input name="loginpasswort" type=password><br> <br> <input type=submit name=submit value="Einloggen"> </form>
|
Datei: login.php:
<?php session_start();
# Die Logindaten lauten Username: admin Passwort: 12345 $_logindaten = ARRAY("name"=>"admin", "passwort"=>"12345");
if (isset($_POST["loginname"]) && isset($_POST["loginpasswort"])) { if ($_logindaten["name"] == $_POST["loginname"] && $_logindaten["passwort"] == $_POST["loginpasswort"]) { # Userdaten korrekt - User ist eingeloggt # Login und Logindaten speichern ! $_SESSION["login"] = 1; $_SESSION["username"] = $_POST["loginname"]; $_SESSION["passwort"] = $_POST["loginpasswort"]; } }
if ($_SESSION["login"] != 1) { # Hier wird mit include der Quelltext von der formular.html für # den Parser geladen - und somit auch dieser Quellcode # ausgeführt. Danach steigen wir mit exit aus der weiteren # Abarbeitung des Programms aus ! include("formular.html"); exit; }
# User ist eingeloggt, wird nur ausgeführt wenn Login erfolgreich # Mit Include laden wir den Quelltext der profil.php mit zu diesem # Quelltext, damit dieser auch abgearbeitet wird ! include("profil.php"); ?>
|
Datei: profil.php:
<?php echo "Eingeloggt ist der Benutzter ".$_SESSION["username"]; ?>
|
In diesem Beispiel ist es nun so, dass das Formular für den Login nur angezeigt wird,
wenn der User nicht eingeloggt ist. Gibt er einmal die Daten richtig ein, dann werden diese
und der erfolgreiche Loginversuch in der SESSION gespeichert. Die Session kann nicht von aussen
manipuliert werden. Dadurch dass die Daten dann in der Session verfügbar sind, können
wir den Login überspringen und laden dann nur noch die profil.php.
Fall 2: wir leiten auf eine andere Datei weiter
Im zweiten Fall haben wir das Formular, die login.php und die profil.php . Die Dateien
includen sich nicht gegenseitig. Erst wird die login.php ausgeführt - wenn der
Login erfolgreich war, kommt man per Klick auf die nächste Datei. Die profil.php
wird ausgeführt, ohne dass vorher die login.php ausgeführt wird - wie kommt man
nun an die Userdaten die vorher eingegeben wurden ?
Hierfür gibt es zwei verschiedene Möglichkeiten !
a) man kann die Daten einmalig per GET übergeben
b) Man kann die Daten in der Session speichern und dann später in jeder anderen
aufgerufenen Datei aufrufen, bis die Session zerstört oder der Browser geschlossen wird
Zu beidem will ich euch hier ein Beispiel geben !
GET und POST - der Unterschied: extra zu diesem Kapitel habe ich ein
Extra Kapitel angelegt, welches kurz erklärt was GET und POST überhaupt ist und
was die Unterschiede der beiden Daten Übertragungsarten sind - hier klicken -
Übergabe von Daten auf eine andere Datei mit GET
Datei: login.php:
<?php # Diesen Benutzer wollen wir an die profil.php mit GET übergeben $_benutzer = "Heinrich"; ?>
<a href="profil.php?name=<?php=$_benutzer?>&nach=Mueller">Weiter ....</a>
|
Datei: profil.php:
<?php echo "Übergeben wurde der Name " . $_GET["name"]; echo "<br>Nachname " . $_GET["nach"]; ?>
|
Hier wird der Name per GET übergeben. Dafür müssen wir den Namen über die
Adresszeile des Browsers übergeben. Achtung: Groß- und Kleinschreibung nimmt auch
PHP ganz übel - $name ist nicht das selbe wie $Name oder $nAme - das sind alles
verschiedene Variablen. Beim Aufruf der nächsten Datei sind die Daten, die wir mit
GET übergeben haben verfügbar. Nachteil des ganzen ist, dass diese Daten nur
beim Aufruf der nächsten Datei verfügbar sind - geben wir diese dann nicht erneut
wieder mit GET weiter, dann gehen diese verloren - sie bleiben nicht dauerhaft im GET
gespeichert.
Übergabe von Daten von einem Skript an ein anderes mit SESSIONS (empfohlen)
Datei: login.php:
<?php # Die Session muss immer zuerst gestartet werden, bevor # eine Ausgabe an den Browser erfolgt !!! SESSION_START();
$_SESSION["username"] = "Heinz"; $_SESSION["uhrzeit"] = time(); ?> <a href="profil.php">Hier geht´s zur profil.php !</a>
|
Datei: profil.php:
<?php # Session starten nicht vergessen !!! Sonst gibts keine Daten ! SESSION_START();
echo "In der letzten Datei wurde der Benutzer " . $_SESSION["username"] . " gespeichert - am " . date("d.m.Y H:i:s", $_SESSION["uhrzeit"]) . " Uhr"; ?>
|
Hier wird erst die login.php gestartet - diese startet die Session und
speichert in dieser den Benutzernamen und das aktuelle Datum mit der Uhrzeit
(Unix Timestamp). Wenn der Surfer dann auf den Link klickt, kommt er zu der profil.php
und dort wird wieder die Session aufgegriffen und die Daten werden ausgegeben.
Vorteil dieser Methode: Daten die man einmal in einer Session speichert bleiben solange
erhalten bis man diese zerstört oder der Surfer den Browser schliesst und eine gewisse
Zeit vergeht. Man muss also nicht von Datei zu Datei immer wieder diese Daten übergeben
wie bei GET damit diese nicht verloren gehen. Diese Daten sind dann aber auch nur für die
Domain gültig, auf der sich der Surfer gerade befindet - wechselt man die Domain, dann
wäre dies eine neue Session. Es gibt Webserver, da wird die Session in der Adresszeile
mit angezeigt - z.B. index.php?PHPSESSID=394829348928349283942934 - deshalb sollte man so
eine Adresse nie mit der Sessionnummer weitergeben, weil der nächste der auf diesen Link
klickt surft mit euren Daten weiter. Die Daten werden nämlich auf dem Server gespeichert
und nicht beim Surfer (was zum Beispiel bei Cookies der Fall ist). Um ein Skript abzusichern
könnte man z.B. die IP Adresse des Surfers noch mit in der Session speichern. Wenn diese
IP Adresse aus der Session nicht gleich der IP Adresse des Surfers ist, könnte man die
Session zerstören ( SESSION_DESTROY(); nur so als Anregungsbeispiel).
|