header prob
Mijn script is als volgt.
Je klikt op een link (een php_self) met een waarde in de url. adhv die waarde wordt dan een cookie geïnstalleerd.
Dan wil ik direct terug naar de pagina waar die link op was. zodat de cookie goed geïnstalleerd is en de veranderingen zijn doorgebracht.
Dat doe ik dan met een header, dat lukt op gewone pagina's. maar op een pagina uit een db met een ID dus niet.
Nu is mijn vraag hoe krijg ik die header naar de correcte pagina met dat ID, en is dat mogelijk eigenlijk :/
ik heb al wat zitten proberen maar zonder resultaat.
dit is de code v
Code (php)
1
2
3
4
2
3
4
if ($_GET['waarde'] == '0') {
setcookie('cookie', '0', time()+86400);
header("Location: $php");
setcookie('cookie', '0', time()+86400);
header("Location: $php");
($php is de php_self ;) )
Sander
Je kan voor een javascript oplossing kiezen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// Send the browser to the error page.
echo '<script language=\'javascript\'>
window.location = "http://'.$_SERVER['HTTP_HOST'].'/?page=error"</script>';
?>
// Send the browser to the error page.
echo '<script language=\'javascript\'>
window.location = "http://'.$_SERVER['HTTP_HOST'].'/?page=error"</script>';
?>
Of je kan ob_start() gebruiken om eerst je output in de buffer op te bouwen.
Of je doet een header refresh van 1 seconde waarna je de cookie set? (weet eigenlijk niet zeker of dat werkt, maar normale code na een header refresh wordt nog wel gewoon uitgevoerd..
Danny schreef op 13.07.2008 21:08:
Dat klopt helemaal, maar beide oplossingen die je daarvoor geeft zou ik niet gebruiken...Je hebt al output dus je kan de header niet meer plaatsen.
Zorg er gewoon voor dat de volgorde in je PHP scripts in orde is. Dus handel eerst alle PHP logica (waaronder setcookie en headers) af en verstuur dan pas output naar de browser. Dan kom je nooit in de problemen.
Oplossingen als javascript redirects of output buffering wil je echt niet gebruiken. De eerste zal niet werken als javascript uitgeschakeld is en de tweede is helemaal niet bedoeld om dit soort fouten op te lossen.
Blanche schreef op 13.07.2008 21:28:
Zorg er gewoon voor dat de volgorde in je PHP scripts in orde is. Dus handel eerst alle PHP logica (waaronder setcookie en headers) af en verstuur dan pas output naar de browser. Dan kom je nooit in de problemen.
Oplossingen als javascript redirects of output buffering wil je echt niet gebruiken. De eerste zal niet werken als javascript uitgeschakeld is en de tweede is helemaal niet bedoeld om dit soort fouten op te lossen.
Danny schreef op 13.07.2008 21:08:
Dat klopt helemaal, maar beide oplossingen die je daarvoor geeft zou ik niet gebruiken...Je hebt al output dus je kan de header niet meer plaatsen.
Zorg er gewoon voor dat de volgorde in je PHP scripts in orde is. Dus handel eerst alle PHP logica (waaronder setcookie en headers) af en verstuur dan pas output naar de browser. Dan kom je nooit in de problemen.
Oplossingen als javascript redirects of output buffering wil je echt niet gebruiken. De eerste zal niet werken als javascript uitgeschakeld is en de tweede is helemaal niet bedoeld om dit soort fouten op te lossen.
Toch zijn er situaties waarbij je de volgorde niet kan aanhouden. Denk aan bijvoorbeeld het gebruik van includes. Hierdoor is er al output geweest, en kan je in de afhandeling toch een redirect nodig hebben.
Wat is dan slimmer, ob_start gebruiken, welke er niet voor bedoeld is, maar wel zijn doel bereikt. Of alle output in een variabele gaan save (Eigenlijk zelfde effect van ob_start), en op het allerlaatste headers, en output eruit gooien naar de webbrowser.
Ik wil eigenlijk terug gaan naar de vorige pagina maar gerefreshed dan :)
ik weet niet of het echt mogelijk is maar ja :/
Quote:
Onzin! Zoals je zelf al aangeeft kun je alle output die je tijdens je PHP logica genereert opslaan in een variabele. Pas als je alle logica hebt afgehandeld ga je deze output naar de browser versturen.Toch zijn er situaties waarbij je de volgorde niet kan aanhouden.
Kijk bijvoorbeeld maar eens naar de werking van een template engine als smarty, daar wordt werkelijk op de allerlaatste regel de output pas naar de browser verzonden:
@Sander: als je een headers already sent foutmelding krijgt, staat daar ook een bestand en regelnummer waar de output al begonnen is. Die kun je dus opzoeken en zien waarom daar output verzonden wordt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
en dat omdat mijn header terug keert naar de opgegeven php_self maar het ID van de DB zit er niet meer bij :/ daarom krijg ik deze.
Ik probeer dus om dat ID wel in de header te krijgen maar het probleem is dat er niet alleen ID's zijn en ik dus iets auto nodig zou hebben :/
die setcookie is toch geen echte outpt (ofwel?) dus die header werkt correct
Gewijzigd op 01/01/1970 01:00:00 door Sander
Zo nee, ga dat dan eerst eens doen en geef een foutmelding mbv mysql_error() als je query mislukt...
Ik wil dus eigenlijk het volgende
van pagina - index.php?waarde=x
daar klikt men op de link die de cookie instelt.
en daarna gaat de header naar index.php
maar wat ik wil is dat hij weer naar index.php?waarde=x gaat :)
Is dat mogelijk ?
Is het daarom niet veel verstandiger om die GET variabele te vervangen door een sessievariabele. Die is immers beschikbaar op elke pagina die je met session_start() begint...
Het prob is dat die get var soms anders is, zoals hier op phphulp, je hebt cat & id ik heb dat ook en ik kan ze moeilijk manueel instellen :)
Ik zal eens kijken naar die sessionvars, dat is het eerste dat ik ervan hoor ;)
Sander schreef op 13.07.2008 22:09:
Je haalt hier nu een aantal dingen door elkaar. GET variabelen, sessie variabelen en database output zijn totaal verschillende dingen en staan los van elkaar, die hebben in beginsel niets met elkaar te maken.ik kan niet volgen, ik wist niet dat dat kon, dus je kan met sessie vars ook uit de db outputten, wist ik niet.
Een GET variabele komt uit de url, een sessievariabele is aangemaakt in een PHP script en database output komt uit de database. Kortom, 3 totaal verschillende dingen...
Wat jij wilt is wellicht met een combinatie van die 3 te bereiken, maar ik krijg hete gevoel dat je zelf niet helemaal door hebt waar je nu mee bezig bent. Misschien dat het handig is om eerst eens deze PHP Beginnershandleiding door te lezen?
ik begrijp niet goed vanwaar jij met die sessie vars komt, die hebben toch niets met mijn get vars voor mijn db output te maken ?
Nee, maar je kunt ze wel gebruiken om variabelen op meerdere paginas te gebruiken zonder dat je die variabelen telkens als GET variabele mee moet geven. En dat is precies waar ze in jouw geval een uitkomst zouden kunnen bieden...
Misschien is het handig als je even het achterliggende idee vertelt. Het enige dat we nu weten is dat je script niet werkt, maar vertel eens wat het precies moet doen? Het kan misschien handiger dan je nu hebt.
Ik zit op een pagina en dan wil ik een cookie instellen door een get waarde, dus gaat de bezoeker naar die pagina waar de cookie wordt ingesteld; en dan wil ik direct terug naar de pagina waar de bezoeker van kwam.
Het probleem zit hem in het terug keren door dat er pagina's uit de db komen en dus een ID hebben in de url, de bezoeker gaat dan naar de correcte pagina maar zonder het correcte ID in de url en krijgt dus niet de gewenste pagina
Ik kan het niet anders uitleggen :/
@blanche, ik begrijp niet hoe die sessie vars in mijn geval een oplossing kunnen bieden :s
index.php en daar is geen probleem.
maar bij de pagina's uit mijn DB , pagina.php?ID=4 vb. wel, omdat hij terug keert naar pagina.php en net naar pagina.php?ID=4
Neen, het ID staat niet in de url omdat er 2 verschillende url's zijn, eentje met GET waarden en eentje zonder.
Hij neemt van php_self en voegt dan ?waarde_cookie=ja een toe :/