Door
Albert de Wit
op 12-10-2012 17:13
gewijzigd op 12-10-2012 17:37
6.267 views
Warning: Cannot modify header information - headers already sent by (output started at
Deze foutmelding krijg ik. Waarom? Google verteld mij dat ik geen php ervoor mag uitvoeren. Andere sites zeggen dat ik helemaal niks mag uitvoeren. Zelf heb ik op localhost iets waar ik gewoon eerst output heb en dan header('Location: index.php'); heb waar die het gewoon doet. Ligt dit aan de versie van PHP ofzo?
Jouw code van 14/10/2012 12:11:14
Daar heb je allerlei html out-put (regel 1 t/m 15) en pas op regel 23 heb je je doctype staan. Dat gaat (dus) niet werken.
Hoe wel? Zoals Wouter J aangeeft:
Wouter J op 14/10/2012 00:19:26
Wat je moet doen is alle logica boven je HTML plaatsen en in je HTML alleen wat simpele if statements, loopjes en echo's.
dus als ik het goed begrijp moet ik bijvoorbeeld alle 'output' boven de html tags eigenlijk in variabelen zetten die heel erg globaal genoemd zijn ($header,$pagina,$footer) etc en die later echoën?
Exact, maar in jou geval hierboven kun je gewoon de HTML beneden plaatsen en die include opslaan in een variabele (dus include veranderen in [php]file_get_contents[/php]) en die echoën op de juiste plaatst.
Oke, dus als ik bijvoorbeeld een inlog script gebruik die er als volgt uitziet?
Dit is wel goed?
<?php
function inloggen(){
$inlognaam = mysql_real_escape_string($_POST['inlognaam']);
$wachtwoord= mysql_real_escape_string($_POST['wachtwoord']);
$query = mysql_query("SELECT id_gebruiker FROM gebruiker WHERE inlognaam='".$inlognaam."' AND wachtwoord='".$wachtwoord."'");
$id_gebruiker = mysql_fetch_row($query);
if ($query){
$_SESSION['id_gebruiker'] = $id_gebruiker[0];
header('Location: index.php?pagina=inloggen');
exit();
}else{
$error = 'Inlogcombinatie is fout, probeer het nog eens';
}
}
Waarom zou je, gezien je code in de functie, een functie inloggen willen maken? Zou zelf in ieder geval geen header gebruiken in een functie.
mysql_real_escape_string gebruik je _in_ een query, niet bij het kopiëren er van naar een nieuwe variabele.
In je code fetch je de query, terwijl je geen foutafhandeling hebt.
Ik ga er van uit dat je ergens anders controleert of de variabelen wel bestaan? Je roept namelijk nergens de functie aan.
Ik twijfel of die include in je body gaat werken, maar dat kun je zelf snel genoeg testen.
En of het verder goed is; hangt ook deels af van wat er in header staat. Als daar zaken in staan die in de head thuis horen (bv aanroepen css-bestand) dan klopt het nog niet.
Het zonder controle gebruiken van user-input (zoals $_GET['pagina']) gaat je vroeg of laat opbreken. Er kan van alles worden meegegeven via de url/variabele. Nergens controleer/beveilig je dit.