:Francis: Skrevet 7. mars 2009 Del Skrevet 7. mars 2009 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
nomore Skrevet 7. mars 2009 Del Skrevet 7. mars 2009 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
olabilen Skrevet 7. mars 2009 Del Skrevet 7. mars 2009 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) Lenke til kommentar
nomore Skrevet 7. mars 2009 Del Skrevet 7. mars 2009 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
olabilen Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 Jeg leste posten hans, og tolket koden som han oppgav som årsak til problemet. Se over koden; den skal gi feilmelding om at headere er allerede sendt. Lenke til kommentar
nomore Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 (endret) Nei, den vil ikke gi det siden header()-funksjonen er kommentert ut. Og header()-funksjonen er kommentert ut og echo lagt til FORDI han fikk en feilmelding. Endret 8. mars 2009 av nomore Lenke til kommentar
:Francis: Skrevet 8. mars 2009 Forfatter Del Skrevet 8. mars 2009 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
nomore Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 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
:Francis: Skrevet 8. mars 2009 Forfatter Del Skrevet 8. mars 2009 Takk! Jeg skal forske og teste litt, og se om jeg får det til . <? vs <?php problematikken var jeg ikke klar over. Jeg skal gå over koden og endre alt til <?php det det behøves. MVh Francis Lenke til kommentar
Alex Moran Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 <?php session_start(); if (!isset($_SESSION['myusername'])) { header('Location: index.php'); die(); } Lenke til kommentar
nomore Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 <?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
Alex Moran Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 Hva med å rette opp feilene? Du får sannsynligvis notice om en konstant som ikke eksisterer. Om du retter opp feilene (de er ikke der til pynt) så vil header fungerer fint. Lenke til kommentar
Bakke Skrevet 8. mars 2009 Del Skrevet 8. mars 2009 Enkelt og greit bruk javascript vell: <script>window.location.href="http://www.example.com/";</script> Lenke til kommentar
:Francis: Skrevet 8. mars 2009 Forfatter Del Skrevet 8. mars 2009 (endret) 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 . Francis Endret 8. mars 2009 av :Francis: Lenke til kommentar
:Francis: Skrevet 8. mars 2009 Forfatter Del Skrevet 8. mars 2009 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 ! Mvh Francis Lenke til kommentar
olabilen Skrevet 9. mars 2009 Del Skrevet 9. mars 2009 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
OIS Skrevet 9. mars 2009 Del Skrevet 9. mars 2009 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
dabear Skrevet 9. mars 2009 Del Skrevet 9. mars 2009 Et kort spørsmål: Hvor separerer du ikke logikken din(php) fra presentasjonen (html) ? Da slipper du unna problemet hfullstendig, fordi når logikken kjører, har det ikke blitt sendt output til browseren. Lenke til kommentar
nomore Skrevet 9. mars 2009 Del Skrevet 9. mars 2009 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
Ernie Skrevet 9. mars 2009 Del Skrevet 9. mars 2009 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå