gizzy2k7
|
User
|
|
registriert
|
18.08.2008
|
wohnt in
|
|
Beiträge
|
4
|
|
Hallo ich hab ein ähnliches Problem.
Warning: Cannot modify header information - headers already sent by (output started at /var/www/webxx/html/login.php:66) in /var/www/webxx/html/login.php on line 36
PHP:
<?php
error_reporting(E_ALL);
$MYSQL_HOST = 'localhost';
$MYSQL_USER = 'webxx';
$MYSQL_PASS = 'xxxxxxx';
$MYSQL_DATA = 'usr_webxx_1';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
session_start();
// Loggt einen User ein, ..
function doLogin($ID, $Autologin=false)
{
// .. indem die aktuelle Session ID in der Datenbank gespeichert wird
$sql = "UPDATE
User
SET
SessionID = '".mysql_real_escape_string(session_id())."',
Autologin = NULL,
IP = '".$_SERVER['REMOTE_ADDR']."',
Letzte_Aktion = '".mysql_real_escape_string(time())."',
Letzter_Login = '".mysql_real_escape_string(time())."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// Wenn 'eingeloggt bleiben' aktiviert wurde
if($Autologin){
// Zufallscode erzeugen
$part_one = substr(time()-rand(100, 100000),5,10);
$part_two = substr(time()-rand(100, 100000),-5);
$Login_ID = md5($part_one.$part_two);
// Code im Cookie speichern, 10 Jahre dürfte genügen
setcookie("Autologin", $Login_ID, time()+60*60*24*365*10);
$sql = "UPDATE
User
SET
Autologin = '".$Login_ID."'
WHERE
ID = '".$ID."'
";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}
// Daten des Users in der Session speichern
$sql = "SELECT
Nickname
FROM
User
WHERE
ID = '".$ID."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
$_SESSION['UserID'] = $ID;
$_SESSION['Nickname'] = $row['Nickname'];
}
?>
Zeile 62-111 ist das gerüst meiner Seite. Dann kommt das Login Formular.
(Auf englisch umgeschrieben)
PHP:
<?php
if(isset($_POST['submit']) AND $_POST['submit']=='Log in'){
// Falls der Nickname und das Passwort übereinstimmen..
$sql = "SELECT
ID
FROM
User
WHERE
Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND
Passwort = '".md5(trim($_POST['Passwort']))."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// wird die ID des Users geholt und der User damit eingeloggt
$row = mysql_fetch_assoc($result);
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
if (mysql_num_rows($result)==1){
doLogin($row['ID'], isset($_POST['Autologin']));
echo "<h4>Welcome ".$_SESSION['Nickname']."</h4>\n";
echo "You was logged in succesfully!.<br>\n".
"Back to <a href=\"index.php\" class=\"link\">Main Page</a>\n";
}
else{
echo "Your Login failed.<br>\n".
"Nickname or password wrong.<br>\n".
"Try it <a class=\"link\" href=\"".$_SERVER['PHP_SELF']."\">again</a>\n";
}
}
else{
echo "<form ".
" name=\"Login\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<table border=\"0\"><tr><td>Nickname :\n</td>";
echo "<td><input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>Passwort :\n</td>";
echo "<td><input type=\"password\" name=\"Passwort\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>Stay logged in?\n</td>";
echo "<td><input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n</td>";
echo "</tr></table><br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Log in\">\n";
echo "<br>\n";
echo "<a class=\"link\" href=\"pwch.php\">Forgot password</a> or not <a class=\"link\" href=\"register.php\">registered</a> yet?\n";
echo "</form>\n";
}
?>
Ich verstehs nicht 
Der normale Login funkt soweit, nur mit dem stay logged in häckchen klappts nicht vollständig (einloggen tut er trotzdem)
Vielen dank schonmal für eure hilfe
Dieser Beitrag wurde am 18.08.2008 um 16:39:13 Uhr von gizzy2k7 zum 1. Mal editiert.
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
Zitat:gizzy2k7
Hallo ich hab ein ähnliches Problem.
Warning: Cannot modify header information - headers already sent by (output started at /var/www/webxx/html/login.php:66) in /var/www/webxx/html/login.php on line 36
Zeile 62-111 ist das gerüst meiner Seite. Dann kommt das Login Formular.
(Auf englisch umgeschrieben)
Ich verstehs nicht 
Der normale Login funkt soweit, nur mit dem stay logged in häckchen klappts nicht vollständig (einloggen tut er trotzdem)
Vielen dank schonmal für eure hilfe
Also ich vermute Folgendes:
Der Autologin funzt nicht, weil dabei ein Cookie gesetzt wird. Da du aber sagst, dass du zuvor das Grundgerüst der Seite ausgibst, wurde ja bereits eine HTML Ausgabe gemacht. Dadurch kann kein Cookie mehr gesetzt werden (Cannot modify header information).
Der "normale" Login funtioniert ohne Probleme, weil die Session bereits zu Beginn des Scriptes (also vor dem "Grundgerüst" deiner Seite) gestartet wird - dabei gibts also keinen Konflikt.
Testweise könntest mal versuchen,
PHP:
<?php
if(isset($_POST['submit']) AND $_POST['submit']=='Log in'){
// Falls der Nickname und das Passwort übereinstimmen..
$sql = "SELECT
ID
FROM
User
WHERE
Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND
Passwort = '".md5(trim($_POST['Passwort']))."'
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
// wird die ID des Users geholt und der User damit eingeloggt
$row = mysql_fetch_assoc($result);
// Prüft, ob wirklich genau ein Datensatz gefunden wurde
if (mysql_num_rows($result)==1){
doLogin($row['ID'], isset($_POST['Autologin']));
}
?>
An den Anfang des Skriptes zu schreiben (vor jeder HTML Ausgabe!!!) und den Code in deinem Login-Formular folgendermaßen umzuschreiben:
PHP:
<?php
if(isset($_POST['submit']) AND $_POST['submit']=='Log in'){
if (isset($_SESSION['UserID'])){
echo "<h4>Welcome ".$_SESSION['Nickname']."</h4>\n";
echo "You was logged in succesfully!.<br>\n".
"Back to <a href=\"index.php\" class=\"link\">Main Page</a>\n";
}
else{
echo "Your Login failed.<br>\n".
"Nickname or password wrong.<br>\n".
"Try it <a class=\"link\" href=\"".$_SERVER['PHP_SELF']."\">again</a>\n";
}
}
else{
echo "<form ".
" name=\"Login\" ".
" action=\"".$_SERVER['PHP_SELF']."\" ".
" method=\"post\" ".
" accept-charset=\"ISO-8859-1\">\n";
echo "<table border=\"0\"><tr><td>Nickname :\n</td>";
echo "<td><input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>Passwort :\n</td>";
echo "<td><input type=\"password\" name=\"Passwort\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>Stay logged in?\n</td>";
echo "<td><input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n</td>";
echo "</tr></table><br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Log in\">\n";
echo "<br>\n";
echo "<a class=\"link\" href=\"pwch.php\">Forgot password</a> or not <a class=\"link\" href=\"register.php\">registered</a> yet?\n";
echo "</form>\n";
}
?>
Lass uns das Ergebnis bitte wissen
|
gizzy2k7
|
User
|
|
registriert
|
18.08.2008
|
wohnt in
|
|
Beiträge
|
4
|
|
Hat einwandfrei funktioniert!
Ich danke dir für dein tolles tut und deine schnelle hilfe!!
Hätte da noch ne kleine Optikfrage:
Woher kommt dieser freiraum
PHP:
<?php
echo "<strong>Register with Server</strong><br />\n";
echo "<form name=\"Registrierung\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\" accept-charset=\"ISO-8859-1\">\n";
echo "<table border=\"0\"><tr><td>Nickname:\n</td>";
echo "<td><input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>\nPassword:\n</td>";
echo "<td><input type=\"password\" name=\"Passwort\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>\nRepeat password:\n</td>";
echo "<td><input type=\"password\" name=\"Passwortwiederholung\">\n</td>";
echo "</tr><br>\n";
echo "<tr><td>\nEmail:\n</td>";
echo "<td><input type=\"text\" name=\"Email\" maxlength=\"70\">\n</td>";
echo "</tr><br>\n";
echo "</table><br>\n";
echo "<input type=\"submit\" name=\"submit\" value=\"Register\">\n";
echo "<input type=\"reset\" value=\"Clear\">\n";
echo "</form>\n";
?>
Dieser Beitrag wurde am 19.08.2008 um 19:28:53 Uhr von gizzy2k7 zum 2. Mal editiert.
|