[PHP & MySQL] Bei Änderung kommt Fehlermeldung

Paty
Hi,
Ich brauche kurz hilfe.Beim Mitgliiederbereich,immer wenn ich einen text dazuschreiben will oder die farbe der links oder so ändere,oder die schriftfarbe kommt diese fehlermeldung: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/kunterbunt/www/memberarea.php:4) in /users/kunterbunt/www/memberarea.php on line 4

Kann mir jemand helfen?
LG
Thorim
wäre gut, wenn man den code der memberarea.php hätte

scheinbar wird da in Zeile 4 irgendwas an den Browser ausgegeben, das session_start() muss auf alle Fälle vor jeglicher Ausgabe ausgeführt werden (das schickt ja die Session-ID an den Browser)
Paty
das ist der code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php session_start();

if(isset($_SESSION["login"])) { // Wenn eingeloggt..

include("header.php");

include("db.php");

include("functions.inc.php");

refresh($_SESSION["login"]); // refresht

?>
<title>memberarea</title>
</head>
<body>
<small style="font-family: Century Gothic; color: rgb(9, 66, 59);"><b>Mitgliederbereich<br>
</b>Hallo!Sch&ouml;n das du dich wiedermal einloggst.<b><br>
</b></small><br>
- <a href="logout.php">Logout</a><br>
- <a href="editprofil.php">Profil &Auml;ndern</a><br>
- <a href="freunde.php">Freundeliste</a> ( Neue
Anfragen)<br>
- <a href="posteingang.php">Posteingang</a> ( Neue)<br>
- <a href="newpn.php">Neue PN</a><br>
<?php if(exist("mitglieder WHERE id = '".$_SESSION["login"]."' AND gruppe = 'Admin'")) { // Wenn Admin

?>
<br>
<b>Admin</b><br>
- <a href="admin.php">Gruppen und Passw&ouml;rter
&auml;ndern</a><br>
<?php }

?><?php include("footer.php");

}

?>
</body>
</html>
Paty
jetzt geht es überhaupt nicht..
Thorim
versuchs mal so

php:
1:
2:
3:
4:
5:
6:
7:
<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php
if(isset($_SESSION["login"])) { // Wenn eingeloggt..
...
Paty
geht auhc nicht..weil wenn ich mich dann einlogge kommt garnichts..keine fehlermeldung und kein inhalt
Paty
doch ich bin eingeloggt..jetzt kommt diese fehlermeldung:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /users/kunterbunt/www/memberarea.php:5) in /users/kunterbunt/www/memberarea.php on line 5
Oli
Hi,

die Fehlermeldung erscheint, weil bereits Inhalt vor session_start() ausgegeben wurde. session_start() muss ganz am Anfang der Datei stehen, sprich:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php

if(isset($_SESSION["login"])) { // Wenn eingeloggt..

include("header.php");

include("db.php");

include("functions.inc.php");

refresh($_SESSION["login"]); // refresht

?>
<title>memberarea</title>
</head>
<body>
<small style="font-family: Century Gothic; color: rgb(9, 66, 59);"><b>Mitgliederbereich<br>
</b>Hallo!Sch&ouml;n das du dich wiedermal einloggst.<b><br>
</b></small><br>
- <a href="logout.php">Logout</a><br>
- <a href="editprofil.php">Profil &Auml;ndern</a><br>
- <a href="freunde.php">Freundeliste</a> ( Neue
Anfragen)<br>
- <a href="posteingang.php">Posteingang</a> ( Neue)<br>
- <a href="newpn.php">Neue PN</a><br>
<?php if(exist("mitglieder WHERE id = '".$_SESSION["login"]."' AND gruppe = 'Admin'")) { // Wenn Admin

?>
<br>
<b>Admin</b><br>
- <a href="admin.php">Gruppen und Passw&ouml;rter
&auml;ndern</a><br>
<?php }

?><?php include("footer.php");

} else {
echo "Du bist nicht eingeloggt.";
}

?>
</body>
</html> 


Außerdem dürfen vor dem ersten <?php auch keine Leerzeichen oder Leerzeilen befinden, sonst werden diese natürlich vorher übertragen.


LG,
Oli
Paty
jetzt steht: Du bist nicht eingeloggt.
Oli
Zitat:
Original von Paty_Pu
jetzt steht: Du bist nicht eingeloggt.


Blöde Frage, aber: Sicher, dass du eingeloggt bist? Falls ja, zeig mal bitte das Loginscript.
Paty
ja..ich bin eingeloggt..:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php session_start(); // Startet die Session

include("header.php");

include("db.php");

include("functions.inc.php");

if(isset($_REQUEST["submit"])) { // Wenn Formular abgeschickt

if(exist("mitglieder WHERE name = '".strip_tags($_REQUEST["name"])."' AND passwort = '".md5($_REQUEST["passwort"])."'") && anzahl("login WHERE ip = '".getenv("REMOTE_ADDR")."' AND erfolgreich = 'nein' AND timestamp > '".(time()-60*30)."'") < 4) { // Wenn Mitglied mit dem Namen und Passwort existiert! und wenn keine falschen logins in den letzten 30 Min. Wieso? um die Seite sicherer zu machen sonst können bruteforcer leicht hacken!

$eintragen = mysql_query("INSERT INTO login (name, ip, timestamp, erfolgreich) VALUES ('".strip_tags($_REQUEST["name"])."', '".getenv("REMOTE_ADDR")."', '".time()."', 'ja')"); // Eintrag in Login!


$abfrage = "SELECT id FROM mitglieder WHERE name = '".strip_tags($_REQUEST["name"])."' LIMIT 0,1";

$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))

{

$_SESSION["login"] = $row->id; // Loggt einen ein!

}

echo "<meta http-equiv=\"refresh\" content=\"0; URL=memberarea.php\">"; // Weiterleitung zur Memberarea

} else { // Wenn falsch eingeloggt

$eintragen = mysql_query("INSERT INTO login (name, ip, timestamp, erfolgreich) VALUES ('".strip_tags($_REQUEST["name"])."', '".getenv("REMOTE_ADDR")."', '".time()."', 'nein')"); // Eintrag in Login!

?>
</head>
<body>
Login schlug fehl.<?php }

} else { // Formular ->

?>
<form action="login.php" method="post">
<table width="90%">
<tbody>
<tr>
<td width="50%"> <b>Name:</b> </td>
<td width="50%"> <input name="name"
type="text"> </td>
</tr>
<tr>
<td width="50%"> <b>Passwort:</b> </td>
<td width="50%"> <input name="passwort"
type="password"> </td>
</tr>
<tr>
<td colspan="2" width="100%"> <input
value="Login" name="submit" type="submit"> </td>
</tr>
</tbody>
</table>
</form>
<?php }

include("footer.php");

?>
</body>
</html>
Oli
Also was mir jetzt aufgefallen ist, ist, dass auch hier wieder die Session nicht ordnungsgemäß gestartet wird. Möglicherweise führt das dazu, dass sie gar nicht existiert, somit ist dein Login natürlich erfolgt, wird aber nicht gespeichert.


Ändere den oberen Teil mit dem session_start() mal wie bei der anderen Datei:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php session_start(); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php

include("header.php");

include("db.php");
[...]


Ansonsten ist mir da jetzt auf den ersten Blick nichts aufgefallen.

P.S.: Wenn du vor dem Code [PHP] und dahinter [/PHP] schreibst, ist der Code besser zu lesen Augenzwinkern .
Paty
funktioniert immer noch nicht._.
Bitte helft mir unglücklich
Snatsch
Bau den Code doch einfach so auf:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

<?php
include("header.php");
?>

<html>
<head>
<title></title> 
<link rel="stylesheet" type="text/css" href="style.css">
</head>

<body>

<?

Php-Gezeugsel xD  

?>

</body>
</html>




So würde ich persönlich das aufbauen Augenzwinkern . In den header.php kopierst du einfach den Teil, der überprüft, ob du on bist. Das ist der Header, den ich benutze.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

<?php 
session_start();
if(!isset($_SESSION['username'])) 
   { 
   echo "Bitte erst <a href="login.html">einloggen</a>";
   exit; 
   } 

?>

Paty
klappt noch immer nicht=/
Oli
Ähm. Dein Loginscript setzt gar kein $_SESSION['username'].
php:
1:
$_SESSION["login"] = $row->id// Loggt einen ein!

Daher ist die Prüfung, ob $_SESSION['username'] gesetzt ist, natürlich immer false.


Probier mal $_SESSION['login'] statt $_SESSION['username'] - oder lass $_SESSION['username'] im Loginscript belegen:
php:
1:
2:
$_SESSION["login"] = $row->id// Loggt einen ein!
$_SESSION["username"] = $row->name//Hier Name in Session speichern

Vorausgesetzt der Name steht in der Tabellenzeile "name". Ggfs. anpassen.
Paty
ich versteh immoment echt nur bahnhof? kann es mir nicht einfach jemand machen?._.
Snatsch
*push* (mit ausdrücklicher Erlaubnis)
Paty
*push*
Paty
hö? da find ich aber nichts..was mir hilft..