Logo - MyWebsolution.de
User gesamt  :  2370005
User online  :  2
KubaSeoTräume, PHP Forum, PHP Community and more ... MyWebsolution.de!
   
   
 
Registrieren Login User F.A.Q Suche Home

eingeloggt bleiben

MyWebsolution.de Foren » Workshops » Problem bei Loginskript

Seite: 1 2 3 4  > Posts pro Seite: 5 10 20
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 xD

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">&nbsp;</td>
    </tr>
    <tr>
      <td width="8" height="28">&nbsp;</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">&nbsp;</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">&nbsp;</td>
    </tr>
    <tr>
      <td height="35">&nbsp;</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>
Profil ansehen
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
Profil ansehen
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.


Profil ansehen Mail senden
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">&nbsp;</td>
    </tr>
    <tr>
      <td width="8" height="28">&nbsp;</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">&nbsp;</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">&nbsp;</td>
    </tr>
    <tr>
      <td height="35">&nbsp;</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>
Profil ansehen
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">&nbsp;</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 ;)


Profil ansehen Mail senden
05.01.2007 15:26 Uhr
mdean
Forenposter
 
registriert 03.01.2007
wohnt in Schweiz
Beiträge 90
Omg :oops: 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?
Profil ansehen
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


Profil ansehen Mail senden
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">&nbsp;</td>
    </tr>
    <tr>
      <td width="8" height="28">&nbsp;</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">&nbsp;</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">&nbsp;</td>
    </tr>
    <tr>
      <td height="35">&nbsp;</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.
Profil ansehen
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! :rolleyes:

Soo und was möchte unser if

PHP:
if(isset($_POST['Send_x'], $_POST['Send_x']) ){


Send großgeschrieben!

nunja.. ne :P

Achso, beachte übrigens bitte trotzdem, das vor header() keine Ausgabe stattfinden darf ;)


Profil ansehen Mail senden
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?
Profil ansehen
Seite: 1 2 3 4  > no reply
Powered by Pascal Landau © 2006 MyWebsolution.de
Designed by Pascal Landau © 2006 MyWebsolution.de
 
 
 
 
Home Email Impressum Disclaimer Statistik