Gå til innhold

Finnes det alternativ til header("")?


Anbefalte innlegg

Jeg er nødt til å redirecte siden min i sammenheng med innlogging. Er brukeren ikke innlogget, men prøver å åpne en side som kun skal være åpen når man er innlogget skal brukeren sendes tilbake til innloggingssiden.

 

header(""); fungerer dårlig, ettersom det da blir duplisering av headere, noe som resulterer i php feilmeldinger.

 

Nå bruker jeg:

 

<? 
session_start();
if(!session_is_registered(myusername))
{
echo '<meta http-equiv="refresh" content="0; url=/index.php?id=5"></meta>';
//header("location:index.php?id=5");
}
?>

 

Dette fungerer helt utmerket, men det går ikke gjennom valideringen til w3c. Valideringen klager på at meta er i koden der det ikke hører hjemme.

 

Jeg har googlet og googlet, men ikke funnet en annen fungerende redirect funksjon. Må jeg bare leve med feil i valideringen, eller finnes det en måte å gjøre det på?

 

Mvh

 

Francis

Lenke til kommentar
Videoannonse
Annonse

Grunnen til at det blir feilmeldinger i PHP er at headere allerede er sendt til browseren og derfor kan du ikke legge til flere. Dette løser du enten ved å forsikre deg om at headere ikke blir sendt før du ønsker det(dette blir ofte forårsaket av at det med viten eller utviten blir sendt tekst til browseren) eller ved å aktivere buffering. Innholdet i bufferen blir ikke sendt til browseren før du ønsker det og dermed har du kontrollen.

Lenke til kommentar
Jeg har vansker med å forstå din logikk. Fjern echo-linjen du, så er du i god båt. Header () skal ALDRI kalles etter at output er sendt til browser (echo/print/printf etc)

Om du leser posten hans så bruker han meta-header for å få til løsningen fordi header() ikke fungerer(fordi output allerede er sendt til browseren).

Lenke til kommentar

nomore har skjønt problemet. Jeg regner med at jeg på en eller annen måte må bruke ob_start(); og ob_end_flush(); sammen men header(""); for å løse problemet, hvis det ikke finnes andre redirect funksjoner jeg kan bruke?

 

Mvh

 

Francis

Lenke til kommentar

Det stemmer. Bruk ob_start() så tidlig som overhode mulig i koden og når du finner ut at du skal omdirrigere brukeren så bruker du ob_clean() rett før header("Location: "). Da vil innholdet i bufferen slettes og brukeren omdirrigeres. For at det skal fungere når du ikke omdirrigerer må den siste linjen i koden(eller på det punktet du har bestemt deg for å sende siden til browseren) være ob_end_flush(). Dersom du vil sende deler av innholdet og fortsette etterpå bruker du i stede ob_flush(). Disse kommandoene er godt beskrevet i manualen :)

 

I tillegg vil eg anbefale deg å bruke "<?php" i stede for "<?" som start tag. Standard start tag i PHP er "<?php" og enkelte shared-hosts tillater ikke annet. Surt dersom du senere skal flytte en side på et par tusen linjer kode og må endre alle. I tillegg blir <? brukt i andre språk også(som xml("<?xml")) :)

Lenke til kommentar
<?php

session_start();

if (!isset($_SESSION['myusername'])) {
header('Location: index.php');
die();
}

Da er jo trådstarter tilbake til start igjen og vil få en feilmelding pga bruk av header-funksjonen etter output. Les nå tråden da :)

Lenke til kommentar

Kan man bruke javascript inne i php?

 

EDIT:

 

Dette ser ut til å fungere:

echo "<script language=\"JavaScript\">\n"; 
echo "window.location.href=/index.php?id=5;\n"; 
echo "</script>";

 

EDIT2:

Jeg trodde det var koden ovenfor som fungerte, men realiteten var at jeg hadde glemt å kommentere ut den gamle koden :p.

 

 

Francis

Endret av :Francis:
Lenke til kommentar

Prøvde meg på litt ouput buffering:

 

Dette har jeg i siden som det må logges inn for å vise:

 

<?php
session_start();

if(!(isset($_SESSION['myusername']))) 
{
 header("location:index.php?id=5");
}
?>

 

Dette har jeg i index.php:

 

<?php
session_start();
include 'login.php';
ob_start();
?>

masse html kode

<?php
ob_end_flush();
?>

 

Det fungerer helt perfekt, og siden validerer!

 

Tusen takk for all hjelp jeg har fått i trådene mine! Uten deres hjelp hadde jeg aldri klart det :new_woot: !

 

Mvh

 

Francis

Lenke til kommentar

Prøv så godt du kan å få header () til å fungere. De som ikke har JS aktivert vil for eksempel ikke bli videreført. Det er en uskreven regel som sier at du skal sende output det til browser når alt annet er utført. Dette fører igjen til at headers vil fungere skikkelig. Outpt-buffering er en løsning der du omgår problemet, uten å løse det. Det blir det samme som vi gjorde med apartheid det, vi overså det hele.

 

Triks: Erstatt hver echo med en $Output .=

På slutten av siden din, skriver du echo $Output.

 

Lykke til.

Lenke til kommentar
Prøv så godt du kan å få header () til å fungere. De som ikke har JS aktivert vil for eksempel ikke bli videreført. Det er en uskreven regel som sier at du skal sende output det til browser når alt annet er utført. Dette fører igjen til at headers vil fungere skikkelig. Outpt-buffering er en løsning der du omgår problemet, uten å løse det. Det blir det samme som vi gjorde med apartheid det, vi overså det hele.

 

Triks: Erstatt hver echo med en $Output .=

På slutten av siden din, skriver du echo $Output.

 

Lykke til.

Tror output buffering med ob_ funksjonene er bedre og enklere enn å lagre det i en variabel.

Lenke til kommentar
Prøv så godt du kan å få header () til å fungere. De som ikke har JS aktivert vil for eksempel ikke bli videreført. Det er en uskreven regel som sier at du skal sende output det til browser når alt annet er utført. Dette fører igjen til at headers vil fungere skikkelig. Outpt-buffering er en løsning der du omgår problemet, uten å løse det. Det blir det samme som vi gjorde med apartheid det, vi overså det hele.

Hva er forskjellen på å aktivere output buffering kontra å lagre det i en variabel?

 

Resultatet er uansett det samme. Når du mener du er klar så sender du informasjonen til nettleseren, uavhengig om den kommer fra en buffer i PHP eller en PHP variabel.

Lenke til kommentar
Prøv så godt du kan å få header () til å fungere. De som ikke har JS aktivert vil for eksempel ikke bli videreført. Det er en uskreven regel som sier at du skal sende output det til browser når alt annet er utført. Dette fører igjen til at headers vil fungere skikkelig. Outpt-buffering er en løsning der du omgår problemet, uten å løse det. Det blir det samme som vi gjorde med apartheid det, vi overså det hele.

 

Triks: Erstatt hver echo med en $Output .=

På slutten av siden din, skriver du echo $Output.

 

Lykke til.

Ehhmm ... og poenget med det var hva? Å lagre det i en variabel er eksakt det samme som å bruke ob-funksjonene. Er man ikke strukturert nok til at man på sett og vis klarer å skille presentasjon og logikk nok til at man sikrer null utskrift før et header-kall, så er det kanskje likegreit å bruke ob først som sist.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...