Variable an Seite
Wie kann ich Variablen von einer Seite auf einer anderen Seite benutzen? Antwort: 1. via Formular, 2. via Link bzw. Querystring, 3. siehe Cookies.
Via Formular
Bitte geben Sie entweder 'ja' oder 'nein' in das Formularfeld ein und bestätigen Sie mit einem Klick auf OK.
Obiges Formular sieht so aus:
<form action="control.php" method="post">
<input type="text" size="4" name="usr" maxlength="4">
<input type="submit" value="OK">
</form>
Die "control.php" ist die Datei, welche durch die action geöffnet wird, der die Variable übergeben wird und die die Abfragen vornehmen wird.
Die Variable wird hier durch die methode 'post' übergeben (möglich wäre auch 'get').
Via Link
Bitte wähle aus wie es weiter geht - durch einem Klick auf einen Link.
Link sendet: ja
Link sendet: nein
Link sendet: jein
Obige Links sehen so aus:
<a href="control.php?usr=ja">Link sendet: ja</a>
<a href="control.php?usr=nein">Link sendet: nein</a>
<a href="control.php?usr=jein">Link sendet: jein</a>
Die "control.php" ist die Datei, auf welche die Links zielen, der die Variable übergeben wird und die die Abfragen vornehmen wird.
Via Link wird die Variable durch die methode 'get' übergeben (ohne Wahlmöglichkeit).
Die erste Variable wird einfach mit einem ? (Fragezeichen) an die Datei-URL angehängt durch ein namen=wert Paar, wobei der Wert-String nicht in Anführungszeichen stehen.
Eine zweite und jede weitere Variable wird übergeben durch ein & (Ampersand).
Diese beiden Verknüpfungsoperatoren (? und &) sind uns schon beim mailto: Link begegnet.
Variablen empfangen
Je nachdem wie Variablen verschickt wurden, so müssen sie auch abgeholt werden.
via Adresszeileneingabe: $myVar=$_GET['varname']
via Link: $myVar=$_GET['varname']
via Formular: $myVar=$_POST['varname'] oder $myVar=$_GET['varname'] je nach Methode
via Unbekannt: $myVar=$_REQUEST['varname']
varname auch unbekannt: $myVar=$_REQUEST[0]
REQUEST holt die get, post, und cookie Variablen!
Ich sollte mich schon aus Gründen der Sicherheit fragen, ob ich Variablen
überhaupt nutzen soll und darf, wenn ich nicht weiss, woher sie eigentlich kommen.
Querystring Ausgabe
Ein Querystring ist eine Zeichenkette, welche durch ein ? an die Adresse gehängt wurde.
$_SERVER['QUERY_STRING']
foreach()
Ich habe im Buch von 'Lubkowitz' eine Funktion gefunden,
die sämtliche vorhandenen Variablen-Wert-Paare im Querystring in ein Assoziatives Array verwandelt und ausgibt*:
Zum Testen brauche ich einen Querystring, ich muss also etwas an die obige Adresszeile anhängen,
z.B.: ?Variable_1=eins&Variable_2=zwei und dann Enter drücken.
<?php
function parse_query_string() {
$vp = explode ("&",$_SERVER['QUERY_STRING']);
foreach ($vp as $value) {
list ($key,$value) = explode("=",$value); // list() nur für numerisches Array
$query_values[$key] = $value;
// direkte Ausgabe durch htmlspecialchars geschützt
echo htmlspecialchars($key,ENT_QUOTES)." = ".htmlspecialchars($value,ENT_QUOTES)."<br />\n";
}
return $query_values; // der Array soll dem Funktionsaufruf übergeben werden
}
$aufruf = parse_query_string(); // Aufruf der Funktion
?>
Achtung: Aller Input ist böse, oder muss zumindest so behandelt werden.
Niemals darf mit einer empfangenen Eingabe etwas getan werden, ohne dass diese
geprüft und entschärft wurde!
*Im obigen Beispiel wird vor der Ausgabe des Querystrings
'key' und 'value' der Funktion htmlspecialchars unterzogen, welche Codezeichen umwandelt
(Siehe auch: Sicherheit).
Orte, an denen Benutzer Code einschleusen könnten sind:
- Formulareingabefelder
- Hidden Formularfelder
- Querystring (Adresszeilen-Anhängsel)
- Javascript prompt
Querystring und PHP_SELF
Habe ich einen 'Link 1' welcher einen Querystring erzeugt, werde ich den durch
ein Formular mit der action $_SERVER['PHP_SELF'] in der method POST nicht mehr los!
Im folgenden Beispiel steht im 'Formular 1' bei action genau das Selbe wie im href des 'Link 2'.
Im 'Formular 2' wird darum statt dessen in der action auf die Seite verlinkt.
<a href='variable_seite.php?variable=klebrig'>Link 1</a> <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" name="Form"> <input type='submit' /> </form> <a href="<?php echo $_SERVER['PHP_SELF'] ?>">Link 2</a> <form action="variable_seite.php" method="post" name="Form"> <input type='submit' /> </form>
Die globalen Variablen wie $_GET können gelöscht werden, sie werden zwar durch 'Formular 1' weiter übertragen (Schönheitsfehler, aber sind unschädlich:
if (isset($_POST)){
if (isset($_GET)){
unset($_GET['variable']); // löscht $_GET bevor Aktion weiter unten abgefragt und wiederholt würde
}
}
Old style
Früher (PHP 3), lag der varname (der Feldname aus dem Formular) einfach schon als Variable $varname vor.
Aus Sicherheitsgründen wurde dies in der php.ini ausgeschaltet, die variable musste nun geholt werden:
$myVar=$HTTP_GET_VARS["varname"] // PHP 4
(Es gab natürlich auch schon POST und REQUEST.)