Hello,
Noch ein paar Worte zu dieser Methode:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
$_SERVER['PHP_SELF'] ist bei der üblichen Serverinrichtung, bei der auch Pfadergänzungen nach der eigentlichen Ressource zulässig sind und ans Script weitergereicht werden, nicht ganz ungefährlich. Insbesondere Formulare werden durch einen "manipulierten Link" auf die Ressource entführbar.
Es ist dann besser, man verwendet
$_SERVER['SCRIPT_NAME']
<input type="text" name="pw">
<input type="submit" value="Senden">
</form>
<?php
if (isset($_POST['pw'])) {
$pw = $_POST['pw'];
if ($pw == "DEINPASSWORT") {?>
Das Umkopieren von Variablen ist nicht notwendig.
<?php
$_out['hint'] = "<a href="{$_SERVER['SCRIPT_NAME']}">Nochmal versuchen</a>";
if (!isset($_POST['pw']) or ($_POST['pw'] != 'mein_geheimes_passwort))
{
$_out['errormessage'] = htmlspecialchars('>> Du musst das richtige Passwort wissen <<');
include('.ht_fehlertemplate.phtml');
exit;
}
## oder normal weiterarbeiten
## und den Rest einbinden
##
?>
Und nur als Andeutung die Fehlerseite:
<!-- .ht_fehlertemplate.phtml -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Fehlermeldung</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
html, body
{
height:100%;
width:100%;
font-family:century gothic, tahoma, arial,sans-serif;
}
</style>
</HEAD>
<BODY>
<p class="errormessage"><?php if(isset($_out['errormessage'])) echo $_out['errormessage'])); ?></p>
<p class="hint"><?php if(isset($_out['hint'])) echo $_out['hint'])); ?></p>
</BODY>
</HTML>
Nur so als Beispiel, wie man an jeder Stelle im Script auf eine (hoffentlich) valide Fehlerseite kommen kann. Die Trennung von Eingabe, Verarbeitung und Ausgabe macht es möglich, seinen Code sauber zu strukturieren udn nachher auch noch durchzusteigen.
Die Templates sind so aufgebaut, dass man sie "wissen", wohin jeder vorbereitete Wert gehört und diesen auch nur anzeigen, wenn er gesetzt ist. Das <p> kann man je nach Geschmack und Kontext auch in die Bedingung mit reinnehmen.
Und dann gibt es noch eine Möglichkeit, den Zugang zu kontrollieren:
function authenticate(&$_out) ## Das vorbereitete Ausgabearray übergeben, siehe oben
{
Header("WWW-authenticate: basic realm="Privater Bereich"");
Header("HTTP/1.0 401 Unauthorized");
#include("wunderbare_leider_nicht_Seite");
# oder einfach nur:
echo "Benutzerdaten erforderlich!";
exit;
}
#------------------------------------
if (!isset($_SERVER["PHP_AUTH_PW"], $_SERVER["PHP_AUTH_USER"])
or $_SERVER["PHP_AUTH_USER"] != 'dein_username'
or $_SERVER["PHP_AUTH_PW"] != 'dein_passwort')
{
authenticate($_out);
}
sonst
Weiterarbeiten...
Das funktioniert aber nur, wenn PHP als Modul läuft oder wenn in der CGI-Umgebung die Servervariablen entsprechend dazugeladen wurden aus dem Environment. Letzteres kann man aber nicht immer selber machen als Hosting-Kunde.
Harzliche Grüße aus
Sankt Andreasberg
und Guten Rutsch
Tom
Nur selber lernen macht schlau
