webForumDet fria alternativet

redirect med header()

7 svar · 297 visningar · startad av Bäckman

BäckmanMedlem sedan nov. 2001339 inlägg
#1

Går det att komma undan problemet med att man inte får skriva ut något på sidan innan man ska skicka en användare vidare m.h.a. header("location: bla")?

Gjorde en funktion som utnyttjade javascript, men det är kanske inte så smidigt om användaren inte har javascript aktiverat? :stud

rakiMedlem sedan jan. 2003140 inlägg
#2

Vet inte om jag fattade rätt men kanske såhär:

if (isset($_GET['submit'])){
header("location: sidan.php");
}
FlashXMedlem sedan nov. 1999992 inlägg
#3

Varför vill du komma runt det problemet?
Jag förmodar att enda gången man vill göra det är när man vill meddela något till besökaren innan denne skickas vidare och då fungerar en vanlig <meta http-equiv="refresh" content="3;URL=sidan.php">. Den raden behöver inte nödvändigtvis ligga mellan head-taggarna om du råkar ha dessa i en inkuderad fil. Har du väl skrivit ut något så är headern redan skickad och kan inte skickas en andra gång.

pimmeMedlem sedan sep. 2001553 inlägg
FlashXMedlem sedan nov. 1999992 inlägg
#5

Man bör kanske tillägga att det inte går att skriva ut något på sidan innan du skickar header("location: bla"). Den regeln har inget med PHP att göra utan är nog mer ett HTTP-problem.
ob_start();
echo "Du skickas snart vidare\n";
header("location: sidan.php");
ob_end_flush();
har samma effekt som
header("location: sidan.php");
echo "Du skickas snart vidare\n";

http://www.devshed.com/Server_Side/PHP/OutputBuffering/print_html har en liten bättre beskrivning av funktionen än manualen som länkades.

BäckmanMedlem sedan nov. 2001339 inlägg
#6

Problemet är det sätt som jag strukturerar mina sidor på. Jag har en fil som heter index.php som är layouten, och på index.php så inkluderar man en fil beroende på vad $_GET["view"] innehåller. Om den innehåller "news" så visar man nyheter osv.

Om jag nu vill göra en redirect från en inkluderad sida så ligger ju den mitt i smeten så att säga, och enda sättet att komma ifrån det är väl att använda javascript, eller kanske meta-versionen? :l

FlashXMedlem sedan nov. 1999992 inlägg
#7

Det går ju att lägga ob_start(); och ob_end_flush(); i din indexfil om det inte är nödvändigt att skriva ut något de gånger som en redirect ska göras. Dilemmat är att PHP då kör hela sajten på detta sättet vilket kräver en del minne eftersom den konstant lagrar allting.

Vad är det som avgör när en redirect ska göras?
Är det en variabel som skickas eller är det när en speciell fil anropas?

Jag tycker det borde gå att lösa på något sätt i index.php
En meta är i.o.f.s. en smidig lösning och fungerar nog ganska tillförlitligt.

BäckmanMedlem sedan nov. 2001339 inlägg
#8

Ett exempel på ett moment som kräver en redirect är ju en inloggningsfunktion. Efter att man har kontrollerat lösenordet så vill man ju skicka användaren till nästa sida. Det finns ju också lite andra moment som innehåller formulär som man vill komplettera med en redirect-funktion.

369 ms totalt · 5 externa anrop · cache AV · v20260730165559-full.0b955084
0 ms — hämta statistik (cache)
115 ms — slå upp tråd (db)
0 ms — hämta forumlista (cache)
131 ms — hämta inlägg (db)
120 ms — hämta bilagor (db)