headers already sent
Warning: Cannot modify header information - headers already sent by (output started at /public/sites/www......php:40) in /public/sites/www. ....php on line 82
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
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
<?php
session_start();
include('../mysql_connect.php');
if(isset($_SESSION['ingelogd'])){
//header('location: member.php');
} else{
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<link href="css/normalize.css"/>
<link href="css/main.css" rel="stylesheet" type="text/css" media="screen"/>
</head>
<body>
<header>
<div class="center">
<div class="title">
<h1> title</h1>
</div>
</div>
</header>
<div id="container">
<div id="main">
<div class="title">
<h1>Log in</h1>
</div>
<div class="main_text">
<div id="login">
<?php
if(isset($_POST['hidden'])){
// variable
$username = $_POST['gebruikersnaam']; // username
$password = $_POST['wachtwoord']; // wachtwoord
$username = mysql_real_escape_string($username); //sql injection
$password = mysql_real_escape_string($password); //sql injection
//$password = md5_file($password); // wachtwoord versleutelen
$sql = "SELECT * FROM Leden WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; // wordt gecontroleerd of er een wachtwoord en gebruikersnaam bestaat
$query = mysql_query ($sql);
$inloggegevens = mysql_fetch_array($query);
$voornaam = $inloggegevens['voornaam'];
$achternaam = $inloggegevens['achternaam'];
$email = $inloggegevens['email'];
$gebruiker = $inloggegevens['gebruikersnaam'];
$password = $inloggegevens['wachtwoord'];
$num = mysql_num_rows($query);
if($num == 1){ // wanneer alles hieronder klopt ben je ingelogd
// Ingelogd
$_SESSION['gebruikersnaam'] = $gebruiker; // controleert username
$_SESSION['wachtwoord'] = $password;
$_SESSION['voornaam'] = $voornaam;
$_SESSION['achternaam'] = $achternaam;
$_SESSION['email'] = $email;
$_SESSION['id'] = 5;//$fetch['id']; // controleer id
$_SESSION['ingelogd'] = true; // wanneer je ingelogd bent
if($_SESSION['gebruikersnaam']== "admin"){ // controleer of de gebruiker is of een admin
header('location: admin.php');
}else{
header('location: member.php'); // ga je naar de pagina member.
echo "Ingelogd"; }
}
else{
echo " Gebruikersnaam of Wachtwoord is verkeerd!! <br>"; // anders is het wachtwoord of gebruikersnaam verkeer of sta je nog niet in de database.
echo "<a href='index.php'>Terug</a>"; // ge je weer terug naar de pagina
}
}
else{
?>
<form action='index.php' method='POST'>
<input type='text' name='gebruikersnaam' value="gebruikersnaam"/><br>
<input type='password' name='wachtwoord' value="wachtwoord"/><br>
<input type='hidden' name='hidden'>
<input type='submit' value='Inloggen' class="btn blue">
</form>
<?php
}
}
?>
</div>
</div>
</div>
</body>
</html>
session_start();
include('../mysql_connect.php');
if(isset($_SESSION['ingelogd'])){
//header('location: member.php');
} else{
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<link href="css/normalize.css"/>
<link href="css/main.css" rel="stylesheet" type="text/css" media="screen"/>
</head>
<body>
<header>
<div class="center">
<div class="title">
<h1> title</h1>
</div>
</div>
</header>
<div id="container">
<div id="main">
<div class="title">
<h1>Log in</h1>
</div>
<div class="main_text">
<div id="login">
<?php
if(isset($_POST['hidden'])){
// variable
$username = $_POST['gebruikersnaam']; // username
$password = $_POST['wachtwoord']; // wachtwoord
$username = mysql_real_escape_string($username); //sql injection
$password = mysql_real_escape_string($password); //sql injection
//$password = md5_file($password); // wachtwoord versleutelen
$sql = "SELECT * FROM Leden WHERE gebruikersnaam='$username' AND wachtwoord='$password'"; // wordt gecontroleerd of er een wachtwoord en gebruikersnaam bestaat
$query = mysql_query ($sql);
$inloggegevens = mysql_fetch_array($query);
$voornaam = $inloggegevens['voornaam'];
$achternaam = $inloggegevens['achternaam'];
$email = $inloggegevens['email'];
$gebruiker = $inloggegevens['gebruikersnaam'];
$password = $inloggegevens['wachtwoord'];
$num = mysql_num_rows($query);
if($num == 1){ // wanneer alles hieronder klopt ben je ingelogd
// Ingelogd
$_SESSION['gebruikersnaam'] = $gebruiker; // controleert username
$_SESSION['wachtwoord'] = $password;
$_SESSION['voornaam'] = $voornaam;
$_SESSION['achternaam'] = $achternaam;
$_SESSION['email'] = $email;
$_SESSION['id'] = 5;//$fetch['id']; // controleer id
$_SESSION['ingelogd'] = true; // wanneer je ingelogd bent
if($_SESSION['gebruikersnaam']== "admin"){ // controleer of de gebruiker is of een admin
header('location: admin.php');
}else{
header('location: member.php'); // ga je naar de pagina member.
echo "Ingelogd"; }
}
else{
echo " Gebruikersnaam of Wachtwoord is verkeerd!! <br>"; // anders is het wachtwoord of gebruikersnaam verkeer of sta je nog niet in de database.
echo "<a href='index.php'>Terug</a>"; // ge je weer terug naar de pagina
}
}
else{
?>
<form action='index.php' method='POST'>
<input type='text' name='gebruikersnaam' value="gebruikersnaam"/><br>
<input type='password' name='wachtwoord' value="wachtwoord"/><br>
<input type='hidden' name='hidden'>
<input type='submit' value='Inloggen' class="btn blue">
</form>
<?php
}
}
?>
</div>
</div>
</div>
</body>
</html>
Gewijzigd op 29/10/2014 00:27:39 door Enrico van der List
Voordat je headers verstuurt mag er geen informatie naar de client (browser) worden verstuurd, en dat doe jij wel. Daarom krijg je die melding. Het versturen van headers moet je dus doen, voordat je ook maar 1 teken html-code genereert.
maar hoe kan het dan wel dat het werkte bij een andere login?
Geen idee. Misschien stonden je foutmeldingen uit. Hoe je het nu doet, klopt het in ieder geval niet.
daar schiet ik nog niet echt mee op om eerlijk te zijn
Dan moet je aangeven waar je wel iets mee opschiet. Wat begrijp je niet?
regel 10 t/m 39 moet je onder de php code met je header() functies plaatsen.
Die paar echo 's die er dan staan die verander je naar een variabele die je dan later tussen je html uit spuugt.
http://www.phphulp.nl/php/tutorial/php-algemeen/header-already-sent/738/header-already-sent/1961/
http://www.phphulp.nl/php/forum/topic/warning-cannot-modify-header-information-headers-already-sent-by/93500/
http://open.phphulp.nl/php/forum/topic/error/92611/last/
wat ook al helpt is als je in de include files de ?> weg laat.
Gewijzigd op 29/10/2014 01:51:08 door Frank Nietbelangrijk
Enrico van der List op 29/10/2014 00:51:09:
daar schiet ik nog niet echt mee op om eerlijk te zijn
Als je met Google zoekt op de foutmelding kom je heel veel topics tegen. Ook op dit forum komt de vraag regelmatig naar voren. Beetje zoekwerk had je dus al een antwoord kunnen opleveren.
Wat betreft je code:
Waar controleer je of $_POST['gebruikersnaam'] en $_POST['wachtwoord'] bestaan?
Waarom maak je een nieuwe variabele aan voor beide? Laat je daarna nog een keer een bewerking er op los (die overigens in een query hoort).
Een password hoeft geen mysql_real_escape_string, omdat je een wachtwoord beveiligd zou moeten opslaan.
Het password beveilig je momenteel niet?! MD5 is overigens een oude, onveilige, manier.
Waarom Select * en niet een veld/de velden benoemen?
Doorgaans wordt geadviseerd om variabelen buiten quotes te houden.
mysql komt te vervallen. Kijk naar mysqli of PDO.
Waar is de foutafhandeling bij je query?
Waarom mysql_fetch_array en geen mysql_fetch_assoc? Je gebruikt de array namelijk niet.
Wat is het nut van het aanmaken van alle variabelen op regels 58/62?
Je gaat overigens daarna pas kijken of er 1 resultaat is? Waarom doe je dat niet eerder (voor je al die variabelen (onnodig) aanmaakt)?
Waarom zet je al die gegevens in een sessie? Zeker wachtwoord hoort er niet in thuis (en het nut van een emailadres in een sessie zie ik ook nog niet direct).
Na een header is het advies om exit() te gebruiken.
Er is regelmatig discussie over, maar in het verleden werd in HTML " gebruikt en PHP '
nooit met EXIT; worden afgesloten ?
na header('Content-Type: application/pdf'); heeft exit niet zo veel zin: je breekt je script af voor er output is.
als je een redirect gebruikt, is het wel handig als je script niet verder loopt terwijl de browser opweg is naar een volgend avontuur.
Code (php)
Dit zou best eens tot het wissen van de betreffende file kunnen leiden, zonder dat je de melding zag