Probleem met inlogscript
Ik heb een heel makelijk inlogscriptje gedownload. Dit heb ik in mijn website geïntegreerd, alleen, als ik met de juiste gebruikersnaam en wachtwoord inlog, krijg ik de volgende error:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\CR\login\functions.php:48) in C:\xampp\htdocs\CR\login\index.php on line 26
Hier zijn de codes die van belang zijn
index.php
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
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
<?php
session_start();
include ( "./functions.php" );
if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
// wanneer er 1 van de velden niet is ingevuld
if ( $_POST['sGebruikersNaam'] == "" )
{
echo "Wel naam invullen he, ga <a
href='javascript:history.back(-1)';>terug</a>";
}
elseif ( $_POST['sWachtwoord'] == "" )
{
echo "Wel wachtwoord invullen he, ga <a
href='javascript:history.back(-1)';>terug</a>";
}
else // wanneer alle velden wel zijn ingevuld
{
if ( !LoginControle() )
{
echo "Gebruikersnaam en wachtwoord zijn onbekend";
}
else
{
header ( "location: beveiligde_pagina.php" );
}
}
}
else
{
?>
<form method="post" action="" >
<table>
<tr>
<td style="width: 100px;">
Gebruikersnaam:
</td>
<td>
<input type="text" name="sGebruikersNaam" value=""
/>
</td>
</tr>
<tr>
<td style="width: 100px;">
Wachtwoord:
</td>
<td>
<input type="password" name="sWachtwoord" value=""
/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name= submit" value="Inloggen"
/>
</td>
</tr>
</table>
</form>
<?php
}
?>
session_start();
include ( "./functions.php" );
if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
// wanneer er 1 van de velden niet is ingevuld
if ( $_POST['sGebruikersNaam'] == "" )
{
echo "Wel naam invullen he, ga <a
href='javascript:history.back(-1)';>terug</a>";
}
elseif ( $_POST['sWachtwoord'] == "" )
{
echo "Wel wachtwoord invullen he, ga <a
href='javascript:history.back(-1)';>terug</a>";
}
else // wanneer alle velden wel zijn ingevuld
{
if ( !LoginControle() )
{
echo "Gebruikersnaam en wachtwoord zijn onbekend";
}
else
{
header ( "location: beveiligde_pagina.php" );
}
}
}
else
{
?>
<form method="post" action="" >
<table>
<tr>
<td style="width: 100px;">
Gebruikersnaam:
</td>
<td>
<input type="text" name="sGebruikersNaam" value=""
/>
</td>
</tr>
<tr>
<td style="width: 100px;">
Wachtwoord:
</td>
<td>
<input type="password" name="sWachtwoord" value=""
/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name= submit" value="Inloggen"
/>
</td>
</tr>
</table>
</form>
<?php
}
?>
functions.php
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
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
<?php
function LoginControle ()
{
$aGebruikers = array ( array('***','****'), // hier kunnen gebruikers toegevoegd worden
array('***','***'),
array('***','***')
);
foreach ( $aGebruikers as $value )
{
if ( $_POST['sGebruikersNaam'] == $value[0] && md5 ( $_POST['sWachtwoord'] ) == md5 ( $value[1] ) )
{
$_SESSION['sGebruikersnaam'] = $_POST['sGebruikersNaam'];
$_SESSION['bIngelogd'] = TRUE;
$_SESSION['iTijd'] = time()+300;
$_SESSION['iIp'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
}
function Beveiliging()
{
if ( isSet ( $_SESSION['bIngelogd'] ) && ( $_SESSION['bIngelogd'] == 1) )
{
if ( $_SESSION['iTijd'] > ( time() ) )
{
$_SESSION['iTijd'] = time()+300;
return true;
}
elseif ( $_SERVER['REMOTE_ADDR'] != $_SESSION['iIp'] )
{
return false;
}
else
{
return false;
}
}
}
?>
function LoginControle ()
{
$aGebruikers = array ( array('***','****'), // hier kunnen gebruikers toegevoegd worden
array('***','***'),
array('***','***')
);
foreach ( $aGebruikers as $value )
{
if ( $_POST['sGebruikersNaam'] == $value[0] && md5 ( $_POST['sWachtwoord'] ) == md5 ( $value[1] ) )
{
$_SESSION['sGebruikersnaam'] = $_POST['sGebruikersNaam'];
$_SESSION['bIngelogd'] = TRUE;
$_SESSION['iTijd'] = time()+300;
$_SESSION['iIp'] = $_SERVER['REMOTE_ADDR'];
return true;
}
}
}
function Beveiliging()
{
if ( isSet ( $_SESSION['bIngelogd'] ) && ( $_SESSION['bIngelogd'] == 1) )
{
if ( $_SESSION['iTijd'] > ( time() ) )
{
$_SESSION['iTijd'] = time()+300;
return true;
}
elseif ( $_SERVER['REMOTE_ADDR'] != $_SESSION['iIp'] )
{
return false;
}
else
{
return false;
}
}
}
?>
Zou iemand mij kunnen vertellen wat die error veroorzaakt en hoe ik die oplos?
Bvd,
Tom
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\CR\login\functions.php:48) in C:\xampp\htdocs\CR\login\index.php on line 26
Kopieer je functions.php eens naar kladblok en sla hem dan op. Kijk ook effe of je rare tekens ziet. Welke editor gebruik je?
Maar ik heb dus die funtions.php al in kladblok gekopieërd, om gebruikers toe te voegen. Maar ik kan dus niet zien waar die fout vandaan komt. :(
Er is blijkbaar ergens output naar de browser geweest, op regel 48 van functions.php, maar die zie ik hier niet staan, hier gaat functions.php maar tot 47.
Ik heb hier de volledige functions.php geplaatst! Ik snap er niks van.
Ik heb aan alle drie de PHP-pagina's die bij dit inlogscript betrokken waren wat toegevoegd.
ob_start(); helemaal bovenaan de pagina, en
ob_end_flush(); helemaal onderaan de pagina.
(uiteraard wel tussen de tags.)
Toch bedankt!
1. Logica (PHP) zonder output eerst
2. Output (eventueel met PHP echo's/prints) na de (PHP) logica.
3. Binnenpretje hebben dat je systeem werkt.
Er is toch blijkbaar output voor de header(); functie, wat resulteert in deze error. Zorg eerst dat dat opgelost is. Als je dit niet opgelost hebt, heb je in feite een defecte PHP code draaien.
Quote:
"Je plakt je band toch ook niet met een pleister, of wel?"
dit en dit.
Wat je moet doen is debuggen. Download eclipse ofzo, die heeft een debugger. Of zend studio. Dan kan je d'r stap voor stap doorheen lopen.
Ik heb geen tijd voor jou gedebug...
Dat ga je dus echt niet doen. Ob prop je in een meisje niet in php. Met ob_start omzeil je je probleem, je verhelpt het dan niet. Je gebruikt die functie dan ergens voor waar je hem niet voor gebruiken moet. Zie ook Wat je moet doen is debuggen. Download eclipse ofzo, die heeft een debugger. Of zend studio. Dan kan je d'r stap voor stap doorheen lopen.
Ik heb geen tijd voor jou gedebug...
en @GaMer13: Je dacht toch niet dat ik die code niet 15x heb overgekeken voordat ik deze oplossing ging gebruiken? Ik vond het op een site, en het werkte, dus lijkt mij prima.
en @Karl: Als je geen tijd hebt voor mijn 'ge-debug', reageer dan ook niet aub.
Wat me alleen hier opvalt op dit forum is, dat als je mensen om hulp vraagt, ze snel geneigd zijn om te zeggen 'los het maar lekker zelf op'. Zo komt het iig wel over. Ik post hier omdat het een PHP-forum is, waar dus mensen die er verstand van hebben mensen ermee kunnen helpen. En dat gebeurt hier dus weinig. Er wordt meer nutteloos gereageerd. Sorry dat ik dit zo zeg, maar zo ervaar ik het wel.
Ik stel hier netjes de vraag hoe het komt dat deze error verschijnt, omdat ik het dus zelf niet kan vinden, en in plaatst van dat jullie dan gewoon zeggen van 'probeer dit of dat eens', is het van 'zoek het lekker zelf uit'. Geef dan geen antwoord.
Dus: Zouden jullie zo vriendelijk willen zijn mij dan te vertellen hoe het wél moet, of laten jullie liever iemand in de steek die netjes om hulp vraagt?
Mvg,
Tom
Gewijzigd op 01/01/1970 01:00:00 door Tom C
Waarschijnlijk een spatie of een enter na de sluittag van functies.php op pagina 48
Daar heb ik tenminste wat aan. ob_start en ob_end_flush weggehaald. Op onzichtbare spaties en enters gecheckt: bingo!
Heel erg bedankt!
(Nu iedereen tevreden?)
Graag gedaan, en onthoud php liegt niet, als er staat regel 48 STAAT er wat op regel 48
Tom schreef op 03.06.2008 23:03:
Het werkt toch? Ik zie het probleem niet.
en @GaMer13: Je dacht toch niet dat ik die code niet 15x heb overgekeken voordat ik deze oplossing ging gebruiken? Ik vond het op een site, en het werkte, dus lijkt mij prima.
en @GaMer13: Je dacht toch niet dat ik die code niet 15x heb overgekeken voordat ik deze oplossing ging gebruiken? Ik vond het op een site, en het werkte, dus lijkt mij prima.
Daar heeft GaMer13 een quote voor:
Quote:
"Je plakt je band toch ook niet met een pleister, of wel?"
Snap je wat daar bedoelt wordt?
Tom schreef op 03.06.2008 23:03:
Wat me alleen hier opvalt op dit forum is, dat als je mensen om hulp vraagt, ze snel geneigd zijn om te zeggen 'los het maar lekker zelf op'. Zo komt het iig wel over. Ik post hier omdat het een PHP-forum is, waar dus mensen die er verstand van hebben mensen ermee kunnen helpen. En dat gebeurt hier dus weinig. Er wordt meer nutteloos gereageerd. Sorry dat ik dit zo zeg, maar zo ervaar ik het wel.
quote='GaMer13 schreef op 03.06.2008 20:16']@Tom, ob_start(); en ob_end_flush(); zijn geen oplossing voor je probleem. Je behoort naar behoren te programmeren, dus op z'n minst in dit stappenplan:
1. Logica (PHP) zonder output eerst
2. Output (eventueel met PHP echo's/prints) na de (PHP) logica.
3. Binnenpretje hebben dat je systeem werkt.
Er is toch blijkbaar output voor de header(); functie, wat resulteert in deze error. Zorg eerst dat dat opgelost is. Als je dit niet opgelost hebt, heb je in feite een defecte PHP code draaien.
Quote:
[/quote]"Je plakt je band toch ook niet met een pleister, of wel?"
Hij heeft verstand van php. Dus wat ie zegt is geen onzin.
En sommige vragen zijn al wel miljoenen keren gevraagt, waarvoor een simpele link oid wel volstaat. Waarom moet je dan elke keer weer opnieuw een heel verhaal houden van zus-en-zo?
Deze headers error is volgens mij wel de meest voorkomende. Meestal hebben mensen gewoon html boven de header staan, maar soms dus niet. Dan is er een BOM character aan het begin geplaatst door dreamweaver ofzo, die je weer niet ziet. Maar heb je ook naar die andere topics waar ik naar linkde gekeken?
Tom schreef op 03.06.2008 23:03:
Dus: Zouden jullie zo vriendelijk willen zijn mij dan te vertellen hoe het wél moet, of laten jullie liever iemand in de steek die netjes om hulp vraagt?
Karl schreef op 03.06.2008 20:18:
Wat je moet doen is debuggen. Download eclipse ofzo, die heeft een debugger. Of zend studio. Dan kan je d'r stap voor stap doorheen lopen.
Ik heb geen tijd voor jou gedebug...
Ik heb geen tijd voor jou gedebug...
Tom schreef op 03.06.2008 23:03:
en @Karl: Als je geen tijd hebt voor mijn 'ge-debug', reageer dan ook niet aub.
Ik heb geen tijd om jou code te debuggen. Dat neemt wel effetjes tijd in beslag, waarvan ik niet veel heb. Veel mensen hier hebben niet zoveel tijd over dat ze ieders code kunnen gaan debuggen. Bovendien is het handig als je dit zelf ook kunt.
Edit:
Ik had dus verwacht dat je dat dus al had gedaan.
Tom schreef op 03.06.2008 23:18:
Klaasjan: Thnx!
Daar heb ik tenminste wat aan. ob_start en ob_end_flush weggehaald. Op onzichtbare spaties en enters gecheckt: bingo!
Heel erg bedankt!
(Nu iedereen tevreden?)
Daar heb ik tenminste wat aan. ob_start en ob_end_flush weggehaald. Op onzichtbare spaties en enters gecheckt: bingo!
Heel erg bedankt!
(Nu iedereen tevreden?)
Ik had dus verwacht dat je dat dus al had gedaan.
@Karl ik had er minder werk van en van mijn antwoord wel hij wel gelukkig. Asl je wel tijd alles aan elkaar te quoten maar niet om die jongen even te helpen zeg dan gewoon niks
Klaasjan Boven schreef op 03.06.2008 23:23:
@Karl ik had er minder werk van en van mijn antwoord wel hij wel gelukkig. Asl je wel tijd alles aan elkaar te quoten maar niet om die jongen even te helpen zeg dan gewoon niks
Zie mijn edit. Hij had er al bij mijn post over 47 regels en kladblok uit kunnen komen. En ik reageer op hem, dat lijkt mij wel zo netjes.
Trouwens, @TS: je kunt beter een editor die syntax highlighting doet nemen zoals notepad++, je ziet dan bijvoorbeeld dat je een haakje bent vergeten, of welke bijelkaar horen. In notepad++ zie je ook speciale characters. Eclipse, of zend, of iets anders kan natuurlijk ook.
Jij begon met 'output naar de browser' enz., maar hoe moet ik zoiets begrijpen als total PHPn00b?
Als je het gewoon in volkstaal zegt (zoals Klaasjan), begrijpt iedereen het.
NIW, nog wel bedankt voor de tip. Heb ff notepad++ gedownload.