Hallo allerseits,
leider bin ich momentan etwas in Verzug; ich habe nämlich für ein paar Freunde ein EM-Tippspiel programmiert (bisher noch nicht online), das jetzt nur noch einen Passwortschutz benötigt. Genau da scheitert es aber. Wie in meiner Testdatei em-tipp.bplaced.net/password_test.php zu sehen ist, kommt beim Aufrufen der Funktion header() die Fehlermeldung:
Im Internet habe ich dazu jetzt bereits die Anmerkung gefunden, das ganze in ASCII zu konvertieren. Das habe ich auch schon mal probehalber gemacht, allerdings gibt es dann an einer anderen Stelle Probleme: Selbst wenn das Passwort richtig eingegeben wird, lädt sich der header()-Dialog neu, als hätte man das falsche eingegeben. Hier zu Ansicht der Code:
<?php
// Verbinde mit MySQL
$link = mysql_connect('localhost', 'em-tipp', '.......');
if (!$link) {
die('Verbindung fehlgeschlagen: ' . mysql_error() );
}
// Verbinde mit der Datenbank
$db = mysql_select_db('em-tipp', $link);
if (!$db) {
die('Kann die Datenbank nicht benutzen : ' . mysql_error() );
}
function no_authentification() {
header("WWW-authenticate: basic realm=\"Anmelden\"");
header("HTTP/1.0 401 Unauthorized");
echo ("Sie benötigen Benutzername und Kennwort.");
exit;
}
if (!isset($_SERVER['PHP_AUTH_USER'])) {
no_authentification();
}
else {
echo $_SERVER['PHP_AUTH_USER'];
$sql = "SELECT * FROM `password` WHERE `user`='".$_SERVER['PHP_AUTH_USER']."'";
$user_raw = mysql_query($sql);
$user = mysql_fetch_array($user_raw);
echo $user;
if (!empty($user) and $user['password'] == $_SERVER['PHP_AUTH_PW']) {
$content = true;
//echo "Content wird angezeigt.";
}
else {
no_authentification();
}
}
if ($content) {
//Eigentlicher Bereich
}
?>
Die Tabelle “password” sieht so aus:
CREATE TABLE IF NOT EXISTS `password` (
`ID` int(2) NOT NULL,
`user` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `user` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Daten für Tabelle `password`
--
INSERT INTO `password` (`ID`, `user`, `password`) VALUES
(1, 'user1', 'password1'),
(2, 'user2', 'password2'),
(....)
Auf meinem localhost hatte ich übrigens zunächst das selbe Problem wie auf dem bplaced-Server (Cannot modify header information…). Allerdings hatte ich dort eine alte XAMPP-Version (1.7.0) drauf und damit auch noch PHP 5.2.8. Mit einem Update auf die neue Version (1.7.7 mit PHP 5.3.8) haben sich dann alle Probleme gelöst (auch mit Zeichenkodierung UTF-8).
Alternativ wäre ich auch sehr dankbar für den Hinweis auf einen alternativen Passwortschutz (nicht .htaccess, da man auf den Benutzernamen später zugreifen muss)!
Ich bedanke mich schonmal im Voraus für jegliche Hilfe und hoffe, das Tippspiel recht schnell zum Laufen zu bekommen!
Grüße
euratla (em-tipp.bplaced.net/)