header probleem
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/xx/domains/xxxxx/public_html/portal/index.php:6) in /home/xx/domains/xxxxx/public_html/portal/logindex.php on line 2
Het probleem is nu dat ik op m'n index.php meerdere pagina's include , waarbij ook logindex.php.
Weet iemand een oplossing?
Mvg
r0tx
FAQ. Je begint al met output voordat je de sessie hebt aangemaakt.
Typisch voorbeeld van output en logica die door elkaar staat. Output (html-code e.d.) stuur je pas op het allerlaatste moment naar de browser. Dus als er ergens een stuk php-code met een if tussen jouw html-code staat, dan ben je fout bezig. Ik heb in mijn output alleen nog wat echo's en foreach staan, verder ontbreekt iedere vorm van php-code. Gevolg: Nooit gedonder met 'headers already sent'.
Zie de Typisch voorbeeld van output en logica die door elkaar staat. Output (html-code e.d.) stuur je pas op het allerlaatste moment naar de browser. Dus als er ergens een stuk php-code met een if tussen jouw html-code staat, dan ben je fout bezig. Ik heb in mijn output alleen nog wat echo's en foreach staan, verder ontbreekt iedere vorm van php-code. Gevolg: Nooit gedonder met 'headers already sent'.
Nou ik heb ook geen andere php-code staan in m'n index.php , en op al de andere pagina's heb ik ervoor gezorgd dat de session_start helemaal bovenaan staat.
/home/xx/domains/xxxxx/public_html/portal/index.php:6
<style type="text/css">
Session_start() moet dus bovenaan je index.php komen te staan.
Rotx:
Dat is dus output... Zet nooit output in een include-bestand, maak simpelweg een variabele aan waar de output in staat:Wat kan ik er dan aan doen? Want ik include de pagina op m'n index.php. Op regel 6 er:
<style type="text/css">
<style type="text/css">
Op het moment dat je deze variabele nodig hebt, echo je de boel even.
Ik heb dus even bovenaan m'n index.php de session_start toegevoegd , en hij komt terug klagen :(
Error?
Als ik dus op inlog komt hij nu met deze error:
Warning: Cannot modify header information - headers already sent by (output started at /home/xx/domains/xxxx/public_html/portal/login.php:8) in /home/xx/domains/xxxx/public_html/portal/login.php on line 98
De rest lukt...
/home/xx/domains/xxxx/public_html/portal/login.php:8
Op lijn 8 in login.php heb je output. Zelfde methode toepassen als SanThe uit heeft gelegd.
Code (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
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
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
// x-aantal regels php-code ZONDER een echo, print,
// print_r of wat voor output dan ook, ook niet in een
// include! Dit kunnen honderden tot wel duizenden regels
// php-code zijn. Je maakt alleen maar variabelen aan.
// begin output:
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Titel</title>
</head>
<body>
<h1><?php echo $var; ?></h1>
<table>
<?php
foreach($array as $string){
echo '<tr><td>'.$string.'</tr></td>';
}
?>
</table>
</body>
</html>
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
// x-aantal regels php-code ZONDER een echo, print,
// print_r of wat voor output dan ook, ook niet in een
// include! Dit kunnen honderden tot wel duizenden regels
// php-code zijn. Je maakt alleen maar variabelen aan.
// begin output:
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Titel</title>
</head>
<body>
<h1><?php echo $var; ?></h1>
<table>
<?php
foreach($array as $string){
echo '<tr><td>'.$string.'</tr></td>';
}
?>
</table>
</body>
</html>
Code (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?
session_start();?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>xxxx :: Portaal</title>
<style type="text/css">
<!--
.style1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #FFFFFF;
font-weight: bold;
}
body {
background-color: #b8d0dc;
}
.style3 {
font-size: 4px;
color: #b8d0dc;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
.style4 {
font-size: 14px;
font-weight: bold;
}
-->
</style>
</head>
<body>
<table width="977" height="363" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="B8D0DC">
<tr>
<td valign="top" height="112" colspan="5"><img src="images/banner2.jpg" width="977" height="150"></td>
</tr>
<tr bgcolor="B8D0DC">
<td height="5" colspan="5"><span class="style3">2</span></td>
</tr>
<tr bgcolor="B8D0DC">
<td width="175" rowspan="2" valign="top"><table width="174" height="57" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/hoofdmenu.JPG" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td width="168" height="19" valign="top" bgcolor="#FFFFFF">
<? include "hoofdmenu.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table> <br>
<table width="174" height="58" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/aankoop.JPG" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td width="168" height="19" valign="top" bgcolor="#FFFFFF">
<? include "aankoopmenu.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table></td>
<td height="19"> </td>
<td rowspan="2" valign="top"><table width="620" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center" class="style1"><img src="images/content.JPG" width="620" height="19"></div></td>
</tr>
<tr>
<td width="6" valign="top" bgcolor="#FFFFFF"> </td>
<td width="614" height="100%" valign="top" bgcolor="#FFFFFF"><?
require("config.php");
if($submit){
$query = mysql_query("SELECT * FROM members WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord' AND geactiveerd = '1'");
$result = mysql_num_rows($query);
if(!$result){
$a = "Gebruikersnaam en/of Wachtwoord is/zijn incorrect. Of je bent vergeten om je account te activeren...<br><br><a href=\"?gebruikersnaam=$gebruikersnaam\">Ga terug</a>";
}
else{
while($object = mysql_fetch_object($query)){
$memberid = $object->memberid;
}
$login = 1;
session_register("login");
session_register("memberid");
header("Location: logindex.php");
}
}
else{
// Verwijder deze comment en de onderstaande regel als je een eigen stylesheet gebruikt...
echo "<link rel=\"stylesheet\" content=\"text/css\" href=\"style.css\">";
if(!$login){
$a = "<form method=\"POST\" action=\"$PHP_SELF\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Naam:<br>
<input type=\"text\" name=\"gebruikersnaam\" size=\"20\" value=\"$gebruikersnaam\"><br>
Wachtwoord:<br>
<input type=\"password\" name=\"wachtwoord\" size=\"20\"><br>
<input type=\"submit\" value=\"Login\"> <input type=\"reset\" value=\"Aanmelden\"
onclick=\"document.location.href=('aanmelden.php')\">
</form>";
}
else{
header("Location: logindex.php");
}
}
// Op de plaats in je layout waar je het inlogformulier wilt hebben doe je ( echo $a; )
echo $a;
?>
</td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/copy.JPG" width="620" height="19"></td>
</tr>
</table></td>
<td> </td>
<td width="175" rowspan="2" valign="top"><table width="174" height="114" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/inloggen.jpg" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td valign="top" width="168" height="76" bgcolor="#FFFFFF"><? include "logindex.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="4" height="222" bgcolor="#B8D0DC"> </td>
<td width="5" bgcolor="#B8D0DC"> </td>
</tr>
<tr bgcolor="B8D0DC">
<td height="5" colspan="5" valign="top"> </td>
</tr>
</table>
<div align="center"></div>
</body>
</html>
session_start();?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>xxxx :: Portaal</title>
<style type="text/css">
<!--
.style1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #FFFFFF;
font-weight: bold;
}
body {
background-color: #b8d0dc;
}
.style3 {
font-size: 4px;
color: #b8d0dc;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
.style4 {
font-size: 14px;
font-weight: bold;
}
-->
</style>
</head>
<body>
<table width="977" height="363" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="B8D0DC">
<tr>
<td valign="top" height="112" colspan="5"><img src="images/banner2.jpg" width="977" height="150"></td>
</tr>
<tr bgcolor="B8D0DC">
<td height="5" colspan="5"><span class="style3">2</span></td>
</tr>
<tr bgcolor="B8D0DC">
<td width="175" rowspan="2" valign="top"><table width="174" height="57" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/hoofdmenu.JPG" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td width="168" height="19" valign="top" bgcolor="#FFFFFF">
<? include "hoofdmenu.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table> <br>
<table width="174" height="58" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/aankoop.JPG" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td width="168" height="19" valign="top" bgcolor="#FFFFFF">
<? include "aankoopmenu.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table></td>
<td height="19"> </td>
<td rowspan="2" valign="top"><table width="620" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center" class="style1"><img src="images/content.JPG" width="620" height="19"></div></td>
</tr>
<tr>
<td width="6" valign="top" bgcolor="#FFFFFF"> </td>
<td width="614" height="100%" valign="top" bgcolor="#FFFFFF"><?
require("config.php");
if($submit){
$query = mysql_query("SELECT * FROM members WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord' AND geactiveerd = '1'");
$result = mysql_num_rows($query);
if(!$result){
$a = "Gebruikersnaam en/of Wachtwoord is/zijn incorrect. Of je bent vergeten om je account te activeren...<br><br><a href=\"?gebruikersnaam=$gebruikersnaam\">Ga terug</a>";
}
else{
while($object = mysql_fetch_object($query)){
$memberid = $object->memberid;
}
$login = 1;
session_register("login");
session_register("memberid");
header("Location: logindex.php");
}
}
else{
// Verwijder deze comment en de onderstaande regel als je een eigen stylesheet gebruikt...
echo "<link rel=\"stylesheet\" content=\"text/css\" href=\"style.css\">";
if(!$login){
$a = "<form method=\"POST\" action=\"$PHP_SELF\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Naam:<br>
<input type=\"text\" name=\"gebruikersnaam\" size=\"20\" value=\"$gebruikersnaam\"><br>
Wachtwoord:<br>
<input type=\"password\" name=\"wachtwoord\" size=\"20\"><br>
<input type=\"submit\" value=\"Login\"> <input type=\"reset\" value=\"Aanmelden\"
onclick=\"document.location.href=('aanmelden.php')\">
</form>";
}
else{
header("Location: logindex.php");
}
}
// Op de plaats in je layout waar je het inlogformulier wilt hebben doe je ( echo $a; )
echo $a;
?>
</td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/copy.JPG" width="620" height="19"></td>
</tr>
</table></td>
<td> </td>
<td width="175" rowspan="2" valign="top"><table width="174" height="114" border="0" cellpadding="0" cellspacing="0">
<tr>
<td height="19" colspan="2"><div align="center"><img src="images/inloggen.jpg" width="174" height="19"></div></td>
</tr>
<tr>
<td width="6" bgcolor="#FFFFFF"> </td>
<td valign="top" width="168" height="76" bgcolor="#FFFFFF"><? include "logindex.php" ?></td>
</tr>
<tr>
<td height="19" colspan="2"><img src="images/down.jpg" width="174" height="19"></td>
</tr>
</table></td>
</tr>
<tr bgcolor="#FFFFFF">
<td width="4" height="222" bgcolor="#B8D0DC"> </td>
<td width="5" bgcolor="#B8D0DC"> </td>
</tr>
<tr bgcolor="B8D0DC">
<td height="5" colspan="5" valign="top"> </td>
</tr>
</table>
<div align="center"></div>
</body>
</html>
Van lijn 3-51 is allemaal output. In een var zetten, en pas na de controles e.d. echoën.
session_register("login"); gooi je trouwens in de prullenbak, is ernstig verouderd. Gebruik $_SESSION['login'] = 'bedenk maar een waarde';
moet ik dus alle code boven m'n output zetten?