Autor
|
Thread
|
05.01.2007 10:43 Uhr
|
Problem bei Loginskript
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Hi ich bins wieder!
Hab da jetzt ein Problem mit meinem Loginskript. Ich hab es in einer externen Datei gemacht, die ich dann auf jeder site include. Aber irgendwas ist wieder falsch beim Skript den es kommt folgende fehlermeldung:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Testserver\test\register.php:16) in C:\Testserver\test\login.php on line 9
Hier mal das Skript. Das mit den Cookies hab ich rausgenommen, da ich das mit den Sessions besser finde. Hoffe kannst mir helfen
PHP:
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" name="login" target="_self" id="login">
<?php
session_start();
error_reporting(E_ALL);
include 'conect.php';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
// 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());
// 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'];
}
if(isset($_POST['Send_x'], $_POST['Send_x']) ){
// 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>Willkommen ".$_SESSION['Nickname']."</h4>\n";
echo "Sie wurden erfolgreich eingeloggt.<br>\n".
"Zur <a href=\"index.php\">Startseite</a>\n";
}
else{
echo "Sie konnten nicht eingeloggt werden.<br>\n".
"Nickname oder Passwort fehlerhaft.<br>\n".
"Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
}
}
?>
<table width="206" height="120" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="29" colspan="4"> </td>
</tr>
<tr>
<td width="8" height="28"> </td>
<td colspan="3"><label>
<input name="username" type="text"
class=blur id=username
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'username'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='username'}" value=username
size=21 maxlength="30">
</label></td>
</tr>
<tr>
<td height="28"> </td>
<td colspan="2"><input name="password" type="password"
class="logininput"
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'password'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='password'}" value="password"
size=21 maxlength="32" /></td>
<td width="43"> </td>
</tr>
<tr>
<td height="35"> </td>
<td width="72" height="35" align="center" valign="middle"><span class="navi_rechts"><a href="register.php">Registrieren</a></span></td>
<td width="83" align="center" valign="top" class="navi_rechts"><a href="pw_forgot.php">PW<br />
vergessen?</a></td>
<td height="35"><input name="imageField4" type="image" onclick="submit()" src="pics/search.gif" /></td>
</tr>
</table>
</form>
|
|
|
05.01.2007 13:06 Uhr
|
|
ulmli
|
Forenuser
|
|
registriert
|
03.01.2007
|
wohnt in
|
|
Beiträge
|
46
|
|
Huhu mdean,
ich bin ja kein experte, aber ich glaube wenn ich das oben richtig verstanden haben muss das session_start ganz oben in der Datei stehen dann müsste das was bei Dir ganz oben steht da drunter... weiß aber net ob das daran liegt.
grüßlis
ulmli
|
|
|
05.01.2007 13:31 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
hey,
richtig, vor session_start() darf keine Ausgabe stattfinden, also kein echo ""; und auch kein HTML Code.
Die erste Zeile bei dir lautet
PHP:
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" name="login" target="_self" id="login">
also liegt eine Ausgabe vor.
Gruß Flitze
Dieser Beitrag wurde am 05.01.2007 um 13:32:15 Uhr von Flitze zum 1. Mal editiert.
|
|
|
05.01.2007 14:06 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
gut hab das jetzt geändert, hab die session_start jetzt am anfang jedes dokumentes eingefügt. Jetzt zeigt es zwar die Fehlermeldung nicht mehr an, aber der Login funzt immer noch nicht. Es lädt einfach die Site neu, egal ob die Eingaben richtig waren oder nicht.
Hier nochmal der code:
PHP:
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" name="login" target="_self" id="login">
<?php
error_reporting(E_ALL);
include 'conect.php';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
// 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());
// 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'];
}
if(isset($_POST['Send_x'], $_POST['Send_x']) ){
// 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']));
header ("Location: usercenter.php");
}
else{
header ("Location: pw_forgot.php");
}
}
?>
<table width="206" height="120" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="29" colspan="4"> </td>
</tr>
<tr>
<td width="8" height="28"> </td>
<td colspan="3"><label>
<input name="username" type="text"
class=blur id=username
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'username'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='username'}" value=username
size=21 maxlength="30">
</label></td>
</tr>
<tr>
<td height="28"> </td>
<td colspan="2"><input name="password" type="password"
class="logininput"
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'password'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='password'}" value="password"
size=21 maxlength="32" /></td>
<td width="43"> </td>
</tr>
<tr>
<td height="35"> </td>
<td width="72" height="35" align="center" valign="middle"><span class="navi_rechts"><a href="register.php">Registrieren</a></span></td>
<td width="83" align="center" valign="top" class="navi_rechts"><a href="pw_forgot.php">PW<br />
vergessen?</a></td>
<td height="35"><input name="imageField4" type="image" onclick="submit()" src="pics/search.gif" /></td>
</tr>
</table>
</form>
|
|
|
05.01.2007 15:15 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
*seuf*
Du musst wenn dann auch alle Namen ändern, wenn du die Namen der Input Felder änderst..
Gleiches Problem wie zuvor:
Code:
!!!!!!!!!!!!!!!
<input name="username" type="text"
class=blur id=username
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'username'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='username'}" value=username
size=21 maxlength="30">
</label></td>
</tr>
<tr>
<td height="28"> </td>
!!!!!!!!!!!!!!!
<td colspan="2"><input name="password" type="password"
class="logininput"
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'password'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='password'}" value="password"
size=21 maxlength="32" /></td>
Das Skript erwartet aber
Nickname und Passwort
PHP:
$sql = "SELECT
ID
FROM
User
WHERE
Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND // $_POST['Nickname'] wird erwartet
Passwort = '".md5(trim($_POST['Passwort']))."' // $_POST['Passwort'] wird erwartet
";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
Wenn du in deinem HTML Code die Feldnamen änderst, musst du auch die Variablen im Quellcode ändern
|
|
|
05.01.2007 15:26 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
Omg meine dummheit .
Es leitet mich aber trotzdem nicht weiter, sondern lädt die site einfach neu. Im code hab ich ja mit header die weiterleitung bestimmt. stimmt das mit dem action bereich dann wieder nicht überein?
|
|
|
05.01.2007 17:52 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
eigentliche müsste das mit der Weiterleitung sowieso einen Fehler geben, denn für header() zählt das gleiche wie für session_start(), vorher darf keine Ausgabe erfolgen.
es wird jedoch immer noch
PHP:
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" name="login" target="_self" id="login">
zu Beginn der Datei ausgegeben. Übrigens sollten Location Angaben immer als absolute URL gemacht werden (http://website/unterseite.php)
Es wird aber keine Fehlermeldung ausgegeben?
Poste nochmal bitte deinen jetzigen Code
|
|
|
05.01.2007 18:13 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
nope keine fehlermeldung.... hab jetzt die header() in absolute pfade geändert aber das ergebniss ist das gleiche.
also das ist meine login.php. die wird dann wie gesagt in alle seiten am rand eingebunden.
PHP:
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" name="login" target="" id="login">
<?php
error_reporting(E_ALL);
include 'conect.php';
$connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
// 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());
// 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'];
}
if(isset($_POST['Send_x'], $_POST['Send_x']) ){
// 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']));
header ("Location: http://localhost/test/usercenter.php");
}
else{
header ("Location: http://localhost/test/pw_forgot.php");
}
}
?>
<table width="206" height="120" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="29" colspan="4"> </td>
</tr>
<tr>
<td width="8" height="28"> </td>
<td colspan="3"><label>
<input name="Nickname" type="text"
class=blur id=username
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'username'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='username'}" value=username
size=21 maxlength="30">
</label></td>
</tr>
<tr>
<td height="28"> </td>
<td colspan="2"><input name="Passwort" type="password"
class="logininput"
style="width:125px; height:18px; font-family:Verdana; font-size:11px; color:#515151; border-width:1px; border-style:solid; border-color:#7B7B7B"
onFocus="style.background='#E4E4E4';if(value == 'password'){value=''};"
onBlur="style.background='#ffffff';if(value== ''){value='password'}" value="password"
size=21 maxlength="32" /></td>
<td width="43"> </td>
</tr>
<tr>
<td height="35"> </td>
<td width="72" height="35" align="center" valign="middle"><span class="navi_rechts"><a href="register.php">Registrieren</a></span></td>
<td width="83" align="center" valign="top" class="navi_rechts"><a href="pw_forgot.php">PW<br />
vergessen?</a></td>
<td height="35"><input name="send" type="image" onclick="submit()" src="pics/search.gif" /></td>
</tr>
</table>
</form>
Die Funktion session_start() setze ich dann dort, wo die login.php eingebunden wird, ganz am anfang in das dokument.
|
|
|
05.01.2007 18:31 Uhr
|
|
Flitze
|
Administrator
|
|
registriert
|
17.10.2006
|
wohnt in
|
Eschwege
|
Beiträge
|
332
|
|
manchmal sollte man dich teeren und federn ôÔ
Code:
<td height="35"><input name="send" type="image" onclick="submit()" src="pics/search.gif" /></td>
name="send" kleingeschrieben!
Soo und was möchte unser if
PHP:
if(isset($_POST['Send_x'], $_POST['Send_x']) ){
Send großgeschrieben!
nunja.. ne
Achso, beachte übrigens bitte trotzdem, das vor header() keine Ausgabe stattfinden darf
|
|
|
05.01.2007 18:47 Uhr
|
|
mdean
|
Forenposter
|
|
registriert
|
03.01.2007
|
wohnt in
|
Schweiz
|
Beiträge
|
90
|
|
thx! Aber wie könnte ich denn sonst den Benutzer weiterleiten, sodass er auf die von mir angegeben seiten weitergeleitet wird? Gibts da nen weiteren php befehl?
|
|
|