Partner & Ads


scripthosting.net Partner-Banner
de.creativecommons.org Partner-Banner

Codeschnipsel

Zurück zur Übersicht

Informationen über einen Link weitergeben

Fragen oder Anmerkungen zum diesem Codeschnipsel?
Im zugehörigen Diskussionsthema im Support-Forum wird Ihnen weitergeholfen!

Oftmals ist es nötig Informationen von einer Seite auf eine andere Seite weiterzugeben. Mit HTML und PHP gibt es dazu unter anderem die Möglichkeit Informationen an die URL der Seite als weiteren Parameter anzuhängen. Das kann dann zum Beispiel wie im Falle eines Foren-Links so aussehen:

http://www.01-scripts.de/forum/index.php?page=Thread&threadID=136

Dieser Link enthält zwei Parameter page und threadID mit folgender Wert-Zuordnung:

page: Thread
threadID: 136

Der Parameter page sagt dabei der Foren-Software was für eine Seite angezeigt werden soll. In diesem Fall handelt es sich dabei bereits um die Themenansicht (Thread).
Der zweite Parameter threadID teilt der Software dann mit welches Thema dort überhaupt angezeigt werden soll. In diesem Fall ist es das Thema mit der ID-Nummer 136.

In PHP kann auf solche Parameter mit dem globalen Array $_GET zugegriffen werden:

<?PHP
// Listet alle enthaltenen Parameter-Wert-Paare auf:
print_r($_GET);

// Der Zugriff auf die Werte erfolgt über die Syntax $_GET['Parametername']:
if(isset($_GET['page']) && $_GET['page'] == "Thread"){
    echo "Zeige die Seite 'Thread' an<br />";
    }
if(isset($_GET['threadID']) && is_numeric($_GET['threadID'])){
    echo "und zeige das Thema mit der Nummer ".$_GET['threadID']." an";
    }
?>

Wenn Sie auf diese Art Informationen über einen Link weitergeben ist es wichtig, dass die Daten die damit übergeben werden immer manipuliert sein können! Verwenden Sie deshalb niemals ein solches Konstrukt:

<?PHP
// Link z.B.: index.php?page=contact.php
// oder z.B.: index.php?page=shop.php

if(isset($_GET['page']) && !empty($_GET['page'])){
    include("includes/".$_GET['page']);
    }
?>

Sie gehen dabei zwar davon aus, dass nur Werte wie contact.php oder shop.php an Ihre Seite übergeben werden. Das ist aber nicht sichergestellt. Jeder Benutzer kann auch beliebige andere Seiten an Ihre Funktion übergeben, die dann in Ihre Seite eingebettet werden würden.
Misstrauen Sie daher prinzipiell allen Daten, die irgendwie vom Benutzer manipuliert werden können!
Eine sichere Implementierung des obigen Versuchs könnte beispielsweise so aussehen:

<?PHP
// Link z.B.: index.php?page=contact.php
// oder z.B.: index.php?page=shop.php

switch($_GET['page']){
  case "contact.php":
    include("includes/contact.php");
    break;
  case "shop.php":
    include("includes/shop.php");
    break;
  default:
    include("includes/start.php");
    break
  }
?>

Dadurch ist sichergestellt, dass bei einem manipulierten Wert für $_GET['page'] lediglich eine Standard-Seite angezeigt wird. Der übergebene Wert kann jedoch keine beliebige Seite an den include()-Befehl übergeben.

Formulardaten

Auch auf Formulardaten kann über diese Methode zugegriffen werden. Es kommt dabei darauf an mit welcher Methode die Formulardaten versendet werden. Prinzipiell stehen dabei zwei Methoden zur Verfügung: GET und POST. Bei der GET-Methode werden wie bereits kennengelernt die Informationen der Formularfelder einfach an die URL angehängt. Ein entsprechendes Formular kann zum Beispiels folgendermaßen aussehen:

<form action="formular.php" method="get">
<input type="text" name="textfeld" value="Dummy-Text" size="20" /><br />
<input tzype="hidden" name="versteckt" value="GeheimerText" />
<input type="submit" name="submit" value="Absenden" />
</form>

Wird dieses Formular vom Benutzer abgesendet erhält man folgende URL im Browser:

http://www.domain.de/formular.php?textfeld=Dummy-Text&versteckt=GeheimerText&submit=Absenden

Über die Variablen $_GET['textfeld'], $_GET['versteckt'] und $_GET['submit'] kann nun ganz einfach auf die Werte zugegriffen werden. Nachteil: Der Benutzer sieht direkt in der URL welche Felder und Inhalte übergeben wurden. Darüber hinaus kann über die URL nur eine beschränkte Datenmenge übergeben werden.
Für große Formulare empfiehlt sich deshalb die POST-Methode:

<form action="formular.php" method="post">
<input type="text" name="textfeld" value="Dummy-Text" size="20" /><br />
<input tzype="hidden" name="versteckt" value="GeheimerText" />
<input type="submit" name="submit" value="Absenden" />
</form>

Der einzige Unterschied im Zugriff liegt nun darin, dass statt des globalen $_GET-Arrays der globale $_POST-Array verwendet wird:
$_POST['textfeld'], $_POST['versteckt'] und $_POST['submit'] enthält nun die entsprechenden Formularwerte. Die URL für den Benutzer sieht nun auch so aus:

http://www.domain.de/formular.php

Bitte beachten Sie jedoch, dass trotzdem der Inhalt von versteckten Formularfeldern jeder Benutzer jederzeit im Quelltext ihrer HTML-Seite betrachten kann.
Übertragen Sie deshalb keine sensiblen Daten auf diesem Weg!

Weiterführende Informationen

Zurück zur Übersicht

Zum Diskussionsthema

Dieser Beitrag ist unter der Creative Commons Namensnennung 3.0 Deutschland lizensiert.
Bearbeitung, Nutzung & Verbreitung ist ausdrücklich gestattet.