header("Location: probleempje

Status
Niet open voor verdere reacties.

raymond88

Gebruiker
Lid geworden
24 feb 2010
Berichten
287
Ik gebruik dus meerdere malen header("Location:, echter.. deze geeft echter errors;

Cannot modify header information - headers already sent by (output started at

Is er een manier om dit op te lossen? Het is niet echt een optie om het in de header te stoppen. Nu heb ik wel dit gevonden;

echo "<script type='text/javascript'>window.location='

Maar deze is dus wat trager. Daarnaast zie je ook wat er gebeurt bovenin je browser (al helemaal als je server langzaam is. Weet iemand een mooie oplossing voor mijn probleem?
 
er mag geen output zijn boven je header.
output kan al een spatie zijn,
dit werkt bijvoorbeeld niet:

PHP:
spatie
<?php
header("location: ......");
?>

maar je kan er meestal wel voor zorgen dat er geen output voor de header komt, als je daar hulp voor wilt, kun je dan even het script posten?

je kan ook de meta tag gebruiken, die ziet er zo uit:
HTML:
<meta http-equiv="refresh" content="0;URL=http://www.jouwadres.nl/" />

alleen moet deze eigenlijk in de <head> van je document staan,
dit mag dus eigenlijk niet:

PHP:
<html>
<body>
<?php
  if(.......){echo '<meta http-equiv="refresh" content="0;URL=http://www.jouwadres.nl/" />';}
?>
</body>
</html>
omdat dan je meta in de <body> komt
 
Nou, ik kan de code die ik uitvoer natuurlijk ook in de header includen. De code die ik heb;

PHP:
<?php $tabel = $_GET['tabel'];
mysql_query("DELETE FROM ".$tabel."
			WHERE id='".$_GET['verwijder']."' ")
or die(mysql_error());
// redirect gebruiker naar document met algehele redirect
header("Location:?p=redirect&tabel=" . $tabel . " "); ?>

Probleem is alleen hoe ik het beste kan oplossen. Ik gebruik voor de body bijvoorbeeld het volgende;
PHP:
		switch(@$_GET['p']) {
			case 'verwijderen':

Dat is echter niet heel netjes denk ik zo, maar weet de nette manier hiervoor niet echt te vinden.
 
Nu heb ik het volgende geplaats, boven de <head>;

PHP:
if (isset($_GET['f'])){
	switch($_GET['f']) {
		// FUNCTIES

Onder //FUNCTIES komen dan alle cases met de includes. Weet echter niet of dit een nette manier is? Wil het zo goed mogelijk doen natuurlijk. Nu kan ik in ieder geval wel mijn header locations behouden.

Verder, ik ben wezen kijken naar login scripts. Nou moet de mijne écht veilig zijn, in verband met gebruik voor een (groot) bedrijf. Nou heb ik dingen gelezen over cookies, sessies, sha1, md5 blabla, maar heeft iemand een tutorial/ script/ whatever wat ik gebruiken kan zonder al te veel moeite?
 
Het maakt niet uit waar je het zet, als je er maar voor zorgt dat er vóór header() niets anders naar de browser wordt gestuurd.

Wat betreft een nette manier... begin eens met het controleren van de gebruiker input, want het rechtstreeks gebruiken van $_GET is vragen om problemen, zeker bij gebruik in mysql.
 
"Het maakt niet uit waar je het zet, als je er maar voor zorgt dat er vóór header() niets anders naar de browser wordt gestuurd."

Dat is duidelijk zo.

"Wat betreft een nette manier... begin eens met het controleren van de gebruiker input, want het rechtstreeks gebruiken van $_GET is vragen om problemen, zeker bij gebruik in mysql."

Kan je misschien iets specifieker zijn hierin?
 
Nu heb ik het volgende geplaats, boven de <head>;


if (isset($_GET['f'])){
switch($_GET['f']) {
// FUNCTIES

Als je wilt kijken of het goed is kun je het beste in de broncode van de pagina kijken,
als je in de geinclude pagina's html staat komt dat boven de <head> terwijl het in de <body> moet.
het handigste is om je voledige code te geven om te kijken of het goed.:thumb:
 
Het ging mij om dit stukje
PHP:
<?php $tabel = $_GET['tabel'];
mysql_query("DELETE FROM ".$tabel." WHERE id='".$_GET['verwijder']."' ")
or die(mysql_error());
Op zowel de tabelnaam als op de id is geen enkele controle, wat betekend dat iedereen zomaar een id kan gokken om zo dingen te wissen en als iemand bekend is met jouw database structuur kan die persoon ook een tabelnaam gebruiken om zo nog meer zaken te wissen.

Maar het kan nog erger: als de magic quotes uit staan (en gebruikers dus quotes kunnen meesturen) kan een gebruiker bijvoorbeeld de complete tabel wissen (voor meer info even zoeken op "sql injection").
 
Jaja ik snap wat je bedoeld. Maar hoe kan ik anders de tabel uitlezen? Misschien via een hidden input veldje in een voorgaand meegestuurd formulier? Want anders kun je altijd via de GET iets aanpassen, of proberen aan te passen/ verwijderen. Heb er al eens iets mee gedaan, maar niet veel en weet het zo niet op te lossen... Suggesties? :)
 
je kan (denk ik) het beste en switch maken voor de tabellen,
zoiets:

PHP:
switch($_GET['tabel')
{
   case 'tabel1':
        $tabel = 'tabel1';
   break;
   case 'tabel2':
        $tabel = 'tabel2';
   break;
   default:
        die('foutive tabel opgegeven');
   break;
}

een andere mannier is ook nog met if:
PHP:
if ($_GET['tabel'] == 'tabel1' or $_GET['tabel'] == 'tabel2')
   {$tabel = $_GET['tabel'];}
else {die('foutive tabel opgegeven');}

je kan ook dat hidden input veldje namaken en dat op je eigen website zetten en dan kun je nog de database aanpassen.

maar gaat dit niet een beetje offtopic ?
 
Laatst bewerkt:
Hidden velden kun je ook wijzigen door de broncode aan te passen; piece of cake met FireFox. Voor beveiliging voegt dat niks toe.
 
Mijn header location is opgelost, door 'simpelweg' een switch te maken, en deze voor de head te zetten. Weet zelf geen andere oplossing, dacht misschien weten jullie een (nettere) andere oplossing?

Betreffende het raden van tabellen, dat klopt inderdaad. Maar ik zie niet echt een oplossing, aangezien (inderdaad) hidden inputveldjes weinig zin zal hebben.

Ben nog lerende, en heb het natuurlijk liever meteen op de beste manier, dan eerst alles brak te schrijven en dan laterna er achter komen dat het allemaal 'geen zin had'. Thanks to all involved so far ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan