Webhilfe.info/board

Normale Version: [PHP] Login Script Problem
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Joar, ich bastle mir hier gerade ein kleines Login Skript zusammen.
Normalerweise sollte alles Funktionieren nur wenn ich in der login.php username und pw einstelle bekomme ich statt einer weiterleitung eine Fehler meldung:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/www/samson/xu/xurax/login.php:10) in /home/www/samson/xu/xurax/login.php on line 31

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/samson/xu/xurax/login.php:10) in /home/www/samson/xu/xurax/login.php on line 31

Warning: Cannot modify header information - headers already sent by (output started at /home/www/samson/xu/xurax/login.php:10) in /home/www/samson/xu/xurax/login.php on line 36

Code der login.php
PHP-Code:
<?php
$username 
"Admin";
$passwort "TEST";
$status $_POST['status'];
if(
$status == "Login") {
if(
$username == $_POST['user'] && $passwort == $_POST['pass']) {
session_start();
session_register("auser");
session_register("apass");
$auser $var1// Jetzt sagen wir $auser ist gleich $var1
$apass $var2// hier das gleiche
header("location: news/index.php");
}
echo 
"<center><b><font color=darkred>Benutzername oder Passwort stimmen nicht!<br>Bitte Überprüfen Sie Ihre Eingabe!</font></b></center>"// wenn die daten nicht stimmen
}
?><center>
<form method="post" action="<? $_SERVER['PHP_SELF']; ?>">
<table width="100%" >
<tr>
<td width="45%"><div align=right>Name:</div></td>
<td><input type="text" name="user" class="login"></td>
</tr>
<tr>
<td><div align=right>Passwort:</div></td>
<td><input type="password" name="pass" class="login"></td>
</tr>
<tr>
<td></td>
<td><input name="status" type="submit" class="login" value="Login"></td>
</tr>
</table>
</form>
</center>
<?php
include("news/core/footer.inc");
?>

Vielleich kann mir ja einer HelfenBiggrin
Habe mir das Script mal angeschaut. Ich komme nur nicht gerade groß weiter. Laut Fehlermeldung gibt es ein Problem beim starten der Session in Zeile 31, jedoch befindet sich in Zeile 31 kein session_start.

Bindest du die login.php Datei in eine andere Datei ein wo vorher eine Ausgabe getätigt wurde? Durch "echo" oder normales HTML? Wenn ja liegt dort dein Fehler. Vor dem Aufrufen der Funktion "header", "setcookie", "session_start" etc. darf keine Ausgabe getätigt werden.

Kleiner Verbesserungsvorschlag.
PHP-Code:
$status $_POST['status'];
if(
$status == "Login"
Diese Zeile ist nicht notwendig. Es reicht wenn du
PHP-Code:
if(isset($_POST['status'])) 
schreibst. Isset solltest du hier verwenden, weil es sonst Fehler geben kann. Isset überprüft, ob eine Variable vorhanden ist, das Formular also abgeschickt wurde.
Zitat:Original von Virus
Habe mir das Script mal angeschaut. Ich komme nur nicht gerade groß weiter. Laut Fehlermeldung gibt es ein Problem beim starten der Session in Zeile 31, jedoch befindet sich in Zeile 31 kein session_start.

Doch doch, hier ist es nur Zeile 7, weil ich den html rotz der davor steht rausgschnitten hab. Aber hier nochmal der Vollständige Code:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="author" content="0o">
<meta name="description" content="bla">
<title>bla</title>
</head>
<body bgcolor="#6D6666" link="#000000" vlink="#000000" alink="#000000">
<style>
A
{
TEXT-DECORATION: none
}
A:link
{
TEXT-DECORATION: none
}
A:visited
{
TEXT-DECORATION: none
}
</style>
<center><img src=news/images/logo.gif border=0></center>
<?php
$username = "Admin";
$passwort = "TEST";
$status = $_POST['status'];
if($status == "Login") {
if($username == $_POST['user'] && $passwort == $_POST['pass']) {
session_start();
session_register("auser");
session_register("apass");
$auser = $var1; // Jetzt sagen wir $auser ist gleich $var1
$apass = $var2; // hier das gleiche
header("location: news/index.php");
    }
    echo "<center><b><font color=darkred>Benutzername oder Passwort stimmen nicht!<br>Bitte Überprüfen Sie Ihre Eingabe!</font></b></center>"; // wenn die daten nicht stimmen
}
?><center>
<form method="post" action="<? $_SERVER['PHP_SELF']; ?>">
<table width="100%" >
  <tr>
    <td width="45%"><div align=right>Name:</div></td>
    <td><input type="text" name="user" class="login"></td>
  </tr>
  <tr>
    <td><div align=right>Passwort:</div></td>
    <td><input type="password" name="pass" class="login"></td>
  </tr>
  <tr>
    <td></td>
    <td><input name="status" type="submit" class="login" value="Login"></td>
  </tr>
</table>
</form>
</center>
<?php
include("news/core/footer.inc");
?>
</body>
</html>

Zitat:Bindest du die login.php Datei in eine andere Datei ein wo vorher eine Ausgabe getätigt wurde? Durch "echo" oder normales HTML? Wenn ja liegt dort dein Fehler. Vor dem Aufrufen der Funktion "header", "setcookie", "session_start" etc. darf keine Ausgabe getätigt werden.

Nein, die Datei login.php liegt alleine in ihrem verzeichnis und wird nirgendwo eingebunden, die Datei login.php includet ansonsten nur noch die footer.inc
Zitat:Kleiner Verbesserungsvorschlag.
PHP-Code:
$status $_POST['status'];
if(
$status == "Login"
Diese Zeile ist nicht notwendig. Es reicht wenn du
PHP-Code:
if(isset($_POST['status'])) 
schreibst. Isset solltest du hier verwenden, weil es sonst Fehler geben kann. Isset überprüft, ob eine Variable vorhanden ist, das Formular also abgeschickt wurde.

Ok, werde das mal Einfügen und probieren.
€: Keine Veränderung der Fehlermeldung.
Ansonsten schonmal vielen Dank!
Hm gut, die login.php wird zwar nirgendwo eingebunden, doch hast du dennoch vor dem session_start eine Ausgabe. Deswegen hast du die Probleme. Pass auf, schreibe das ganze so.

Code:
<?php
$username = "Admin";
$passwort = "TEST";
$status = $_POST['status'];
if($status == "Login") {
if($username == $_POST['user'] && $passwort == $_POST['pass']) {
session_start();
session_register("auser");
session_register("apass");
$auser = $var1; // Jetzt sagen wir $auser ist gleich $var1
$apass = $var2; // hier das gleiche
header("location: news/index.php");
    }
    echo "<center><b><font color=darkred>Benutzername oder Passwort stimmen nicht!<br>Bitte Überprüfen Sie Ihre Eingabe!</font></b></center>"; // wenn die daten nicht stimmen
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta name="author" content="0o">
<meta name="description" content="bla">
<title>bla</title>
</head>
<body bgcolor="#6D6666" link="#000000" vlink="#000000" alink="#000000">
<style>
A
{
TEXT-DECORATION: none
}
A:link
{
TEXT-DECORATION: none
}
A:visited
{
TEXT-DECORATION: none
}
</style>
<center><img src=news/images/logo.gif border=0></center>
<center>
<form method="post" action="<? $_SERVER['PHP_SELF']; ?>">
<table width="100%" >
  <tr>
    <td width="45%"><div align=right>Name:</div></td>
    <td><input type="text" name="user" class="login"></td>
  </tr>
  <tr>
    <td><div align=right>Passwort:</div></td>
    <td><input type="password" name="pass" class="login"></td>
  </tr>
  <tr>
    <td></td>
    <td><input name="status" type="submit" class="login" value="Login"></td>
  </tr>
</table>
</form>
</center>
<?php
include("news/core/footer.inc");
?>
</body>
</html>
Habe den PHP Code ganz nach oben verlegt, sodass vor session_start und vor header() keine Ausgabe zum Browser kommt. Wie gesagt darf vor diesen Funktionen keine Ausgabe erfolgen. Nun müsste es funktionieren.
Änder mal bitte noch den PHP-Code in das ->

PHP-Code:
<?php
session_start
(); 
//steht jetzt am Anfang, damit man auf alles zugreifen kann
$username "Admin"
$passwort "TEST";
$status $_POST['status']; 
if(
$status == "Login") { 
if(
$username == $_POST['user'] && $passwort == $_POST['pass']) {
session_register("auser"); 
session_register("apass"); 
$auser $var1// Jetzt sagen wir $auser ist gleich $var1
$apass $var2// hier das gleiche
header("location: news/index.php"); 
    }
    echo 
"<center><b><font color=darkred>Benutzername oder Passwort stimmen nicht!<br>Bitte Überprüfen Sie Ihre Eingabe!</font></b></center>"// wenn die daten nicht stimmen
}
?>
@Blacksoul: Dies ist aber nur notwendig, wenn er in der login.php eine Abfrage nach einer Session macht, da er aber direkt nach einem korrekten Login weiterleitet, ist das starten der session außerhalb der if Abfrage nicht notwendig.
Zitat:Original von Virus
@Blacksoul: Dies ist aber nur notwendig, wenn er in der login.php eine Abfrage nach einer Session macht, da er aber direkt nach einem korrekten Login weiterleitet, ist das starten der session außerhalb der if Abfrage nicht notwendig.

Aber schaden tut es nicht :-) Ist ja auch nur für jeden Fall. Habe ja nicht gesagt, dass es das Problem löst :-)

mfG
Ne schaden tut es nicht, nur wäre das eine Optimierungsgeschichte. Warum eine Session starten wenn sie nicht gebraucht wird. Ich denke mal du verstehst auf was ich hinaus will. Soll ja auch mehr ein Hinweis für XuRaX sein.

Falsch ist es auf keinen Fall.
Hey jow, Danke erst mal für die Hilfe.
Hab das jetzt so gemacht, dass ich den Veränderten PHP Code von Blacksoul an den Anfang von login.php gesetz habe. Fehlermeldung ist wech, jedoch bekomme ich immer wenn ich die Login Daten eingegeben habe und eigentlich auf news/index.php weitergeleitet werden soll, die Fehlermeldung "UMleitungslimit für diese URL überschritten."" WTF is das?
Um ehrlich zu sein, diese Fehlermeldung kenne ich garnicht. Muss ich erstmal passen. Ich gucke mal ob ich was finde.
Seiten: 1 2
Referenz-URLs