[PHP] redirect advies

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo,

Ik ben nu een aantal weken bezig met PHP. Ik heb een klein vraagje over een zogenaamde redirect functie in PHP.

Ik heb gemerkt dat je twee functies hiervoor kan gebruiken. Bijvoorbeeld wanneer iemand inlogd dat diegene ergens heen wordt gestuurd afhankelijk van de correctheid van de gegevens.

Mogelijkheid 1:
PHP:
1
echo "<meta http-equiv=\"refresh\" content=\"0;url=  index.php?var=1\" target=\"_top\">";


Mogelijkheid 2:
PHP:
1
header("Location: index.php?var=1");


Welke adviseren jullie om te gebruiken?

Groeten Rappas

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

De een doet een clientside redirect, de andere returned een status 302. Ik heb zelf een voorkeur voor optie 2. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Osiris
  • Registratie: Januari 2000
  • Niet online
* Osiris doet ook optie 2...

Volgens mij heb je eerder de kans dat een browser de headers wél leest en de Location-header snapt dan dat een browser die niet snapt, maar de meta-tag wel :)

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 20-09 15:31
Als je een lage load hebt op de server dan kun je die header manier wel gebruiken denk ik.

Ik zou alleen de boel wel even cachen voordat je die header verstuurd (dus, eerste querys uitvoeren voordat je die header verstuurd).

Ik vind die header manier altijd wel wat vaag, ben gewend om een 'u bent ingelogd, klik hier als u niet kunt wachten' bericht te krijgen maar dat hoeft met die header manier dus niet.

edit: ik meende me trouwens te herinneren dat hele oude browsers die header niet aankunnen...

[ Voor 12% gewijzigd door jan-marten op 26-02-2004 11:33 ]


Verwijderd

De 2e methode heeft de voorkeur.
Het enige nadeel is dat je header moet aanroepen voordat er output geweest, maar dit kan je weer afvangen door ob_start() aan het begin van je pagina te plaatsen en ob_end_flush() aan het eind.
Wat ik meestal ook doe is een exit() na de header("Location"), is in principe niet nodig, maar geeft een extra zekerheid dat je script niet doorloopt.

Verwijderd

Topicstarter
Tnx mensen voor de snelle reactie. De header functie dus ;)

Verwijderd

Verwijderd schreef op 26 februari 2004 @ 11:34:
De 2e methode heeft de voorkeur.
Het enige nadeel is dat je header moet aanroepen voordat er output geweest, maar dit kan je weer afvangen door ob_start() aan het begin van je pagina te plaatsen en ob_end_flush() aan het eind.
Wat ik meestal ook doe is een exit() na de header("Location"), is in principe niet nodig, maar geeft een extra zekerheid dat je script niet doorloopt.
het is ook onzinnig om output te genereren als je gaat redirecten....

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 14:27
De header methode verdient idd de voorkeur. W3C legt vrij helder uit waarom, kern van de zaak is dat een meta-refresh de [Back] button verziekt.

W3c over redirects

Regeren is vooruitschuiven


  • Sendy
  • Registratie: September 2001
  • Niet online
Ik heb weleens gelezen dat een relatieve URL in een HTTP redirect niet mag. Lynx klaagt er ook over als je dat doet, maar werkt wel gewoon. Andere browsers vinden het ook wel best.

Het lijkt me ook logisch, want waarom zou een browser in een nieuw request, de URL laten afhangen van de vorige request?!? Misschien weet iemand de details hiervan?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit nu weer met die redirect dingen :?.

Wanneer ik de 'header' functie gebruik krijg ik steeds de fout melding:

Warning: Cannot modify header information - headers already sent by (output started at ../public_html/index.php:22) in ../public_html/checkmember.php on line 27

En wanneer ik de 'refresh' functie gebruik niet. Dit is de code die ik gebruik. (werkende en niet werkende achter de //)

PHP:
1
2
3
4
5
        if ($adminprofiel == 3) { 
            echo "<meta http-equiv=\"refresh\" content=\"0;url=User/default.php?menuvar=pg\" target=\"_top\">";
            //header("Location:User/default.php?menuvar=pg");
            //exit();       
        }


Hij zegt dat de fout in mijn index.php zit. Op lijn 22 include ik alleen maar een navigatie menu die op zijn beurt buttons laat zien afhankelijk van een variabele

PHP:
1
<? include("navigatie.php");?>


'Headers alread sent by...' <-- welke headers heb ik dan al gestuurd?

gr Rappas

Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
Je hebt een uitvoer gestuurd > en dus ook http headers :)

Icons are overrated


Acties:
  • 0 Henk 'm!

Verwijderd

Kan het zijn dat je al data verstuurd naar de browser voordat je header() aanroept?
Of wordt je bestand ge-includ in een bestand die al headers heeft verzonden?

Dit komt van http://nl2.php.net/manual/nl/function.header.php

Onthoud dat header() moet worden aangeroepen voor er output is verzonden, door normale HTML tags, lege regels in een file, of vanuit PHP. Het is een veel voorkomende fout om met include(), require(), functies, of een andere file toegang functie output te verzenden voordat header() wordt aangeroepen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je hebt al wat afgedrukt naar het scherm waarschijnlijk.
Het enige nadeel is dat je header moet aanroepen voordat er output geweest, maar dit kan je weer afvangen door ob_start() aan het begin van je pagina te plaatsen en ob_end_flush() aan het eind.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe84 schreef op 03 maart 2004 @ 14:19:
Je hebt al wat afgedrukt naar het scherm waarschijnlijk.

[...]
Ja dank je, ik had deze functie al eerder geprobeerd, maar toen kreeg ik de zelfde foutmelding. Had ik zeker toen wat fout gedaan (weet ik wel zeker ;))

Maar ik kan weer verder... tnx

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

ik gebruik eigenlijk altijd de javascript functie window.location, ook altijd gezeik met de output van headers (kzet cookies, daar doetie moeilijk over)

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op 26 februari 2004 @ 13:01:
[...]


het is ook onzinnig om output te genereren als je gaat redirecten....
Euhm, nee. In mozilla of firebird 0.7 (een van die twee) wilde de browser niet re-directen, als je niet tenminste 1 karakter doorstuurde in de body. Dus je wilt op zn minst een bogus karakter doorsturen. ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1