Gå til innhold

"Redirect" virker ikke


Anbefalte innlegg

Følgende php-fil skulle fungere slik at man etter innlogging ble "redirected" til den siden man kom fra. Inloggingen fungerer, men redirect-koden fungerer ikke. Den alternative løsningen hvor man blir "redirected" til siden index.php fungerer.

Kan noen hjelpe?

<?php //palogin.php
include_once 'toptekst.php';

echo 'Innlogging';

if(isset($_POST['bruker']))
{
   $_SESSION['loginRedirect'] = $_SERVER['HTTP_REFERER'];

   $bruker = $_POST['bruker'];
   $pass   = $_POST['pass'];

   if($bruker == "" || $pass == "")
   {
       echo "Vennligst fyll i både brukernavn og passord";
   }
   else

   include_once 'pa_db_login.php';

   {
       $query = "SELECT * FROM brukere WHERE bruker='$bruker' 
                       AND passord='$pass'";

       if(mysql_num_rows(mysql_query($query))==0)
       {
           echo "Ugyldig passord eller brukernavn, prøv igjen";
       }
       else
       {
           $_SESSION['bruker'] = $bruker;
           $_SESSION['pass']   = $pass;
           //header( 'Location: http://localhost/hjemmeside/index.php');
           header("Location: " . $_SESSION['loginRedirect']);
       }
   }
}

if(!$_SESSION)
{
echo <<<_END
<form method='post' action='palogin.php'>
Brukernavn <input type='text' maxlength='16' name='bruker' "<br/>
Passord       <input type='password' maxlength='16' name='pass' <br/>
<input type='submit' value='Logg inn'>
_END;
}
?>

Lenke til kommentar
Videoannonse
Annonse

PHP klager nokk mest sannsynlig på at du setter headeren midt i koden. - Javascript metoden er rimelig lik

<script type="text/javascript">window.location="index.php"</script>

Nja, men det fungerer jo når jeg bruker "header( 'Location: http://localhost/hjemmeside/index.php');"!

Det jeg ønsker er imidlertid at brukeren skal sendes tilbake til siden som han kom fra. Det er akkurat på samme måte som her på Diskusjon.no. Når du logger inn her kommer du tilbake til den siden du var på før innloggingssiden.

 

Javascriptet som du foreslår vill også bare sende brukeren tilbake til indexen, uansett hvor han kom fra.

 

Jeg prøvde litt med javascript:history.go(-1), men jeg skjønner nok ikke helt nøyaktig hvordan jeg skal skrive koden.

 

Jeg er ganske fersk som dere skjønner.

Lenke til kommentar

Det du kan gjøre er å lagre nåværende URL når du sender noen til innloggingen i session og så sende brukeren tilbake til den URLen etter man blir logget inn. Alternativt sjekke om HTTP_REFERER er satt og sette en standardverdi hvis den ikke er det.

Å lagre den nåværende URL høres fornuftig ut, men hvordan gjør jeg det?

Lenke til kommentar

bare slaske litt php kode inn i dn javascripten slik at den skal følge URL'en som du setter..

 

Det som PHP motoren har problemer med det er og sende en ny header til nettleseren for redirect når du allerede har 50 linjer kode.

Men hvorfor har den da ikke problemer med det dersom jeg benytter alternativet;

header( 'Location: http://localhost/hjemmeside/index.php');

 

Jeg prøvde litt med Ernies løsning, koden ble slik:

<?php //palogin.php

include_once 'toptekst.php';

$loginRedirect = "";
if(isset($_GET['curi'])) $loginRedirect =  $_GET['curi'];
echo "Last URI was: " . $loginRedirect;

if(isset($_POST['bruker']))
{

   $bruker = $_POST['bruker'];
   $pass   = $_POST['pass'];

   if($bruker == "" || $pass == "")
   {
       echo "Vennligst fyll i både brukernavn og passord";
   }
   else

   include_once 'pa_db_login.php';

   {
       $query = "SELECT * FROM brukere WHERE bruker='$bruker' 
                       AND passord='$pass'";

       if(mysql_num_rows(mysql_query($query))==0)
       {
           echo "Ugyldig passord eller brukernavn, prøv igjen";
       }
       else
       {
           $_SESSION['bruker'] = $bruker;
           $_SESSION['pass']   = $pass;
           //header( 'Location: http://localhost/hjemmeside/index.php');
           //header("Location:" . $_SESSION['loginRedirect']);
           echo "Du blir nå sendt til " . $loginRedirect;
           header("location:" . $loginRedirect);
           //echo "Du er logget inn som " . $bruker;
       }
   }
}

if(!$_SESSION)
{
echo <<<_END
<form method='post' action='palogin.php'>
Brukernavn <input type='text' maxlength='16' name='bruker' "<br/>
Passord       <input type='password' maxlength='16' name='pass' <br/>
<input type='submit' value='Logg inn'>
_END;
}
?>

Dersom dere ser den øverste delen av koden så fungerer den. Ved hjelp av

$loginRedirect =  $_GET['curi'];

Får jeg satt variablen $loginRedirect (det blir verifisert ved utskriften), men når jeg prøver å benytte den variabeln for å sende brukeren til forrige side ved hjelp av:

header("location:" . $loginRedirect);

så fungerer ikke det fordi $loginRedirect ikke har noen verdi i den delen av koden!?

Det er tydeligvis noe grunnleggende som jeg missforstått her, jeg trodde at når en variabel ble definert utenfor en funksjon så ville den ha globalt scope??

Endret av PelleP
Lenke til kommentar

Du kan jo bruke output buffering

 


<?php

ob_start();

$loginRedirect = "http://www.php.net";

echo "Du blir nå sendt til " . $loginRedirect;

header("location:" . $loginRedirect);

ob_end_flush();

?>

Takk for tipset, men jeg fikk ikke det heller til å fungere. Derimot så fungerte det når jeg sendte variabelen videre som et felt i dialogskjemaet, altså linjen:

<input type='hidden' name='loginRedirect' value='$loginRedirect'>

Hele koden ser nå slik ut:

<?php //palogin.php

include_once 'toptekst.php';

global $loginRedirect;

if(isset($_GET['curi'])) $loginRedirect =  $_GET['curi'];
echo "Last URI was: " . $loginRedirect . "<br/>";

if(isset($_POST['bruker']))
{

   $bruker = $_POST['bruker'];
   $pass   = $_POST['pass'];
   $loginRedirect = $_POST['loginRedirect'];    

   if($bruker == "" || $pass == "")
   {
       echo "Vennligst fyll i både brukernavn og passord";
   }
   else

   include_once 'pa_db_login.php';

   {
       $query = "SELECT * FROM brukere WHERE bruker='$bruker'
                       AND passord='$pass'";

       if(mysql_num_rows(mysql_query($query))==0)
       {
           echo "Ugyldig passord eller brukernavn, prøv igjen";
       }
       else
       {
           $_SESSION['bruker'] = $bruker;
           $_SESSION['pass']   = $pass;
           //header( 'Location: http://localhost/hjemmeside/index.php');
           //header("Location:" . $_SESSION['loginRedirect']);            
           header("location:" . $loginRedirect);
           //echo "Du er logget inn som " . $bruker;
       }
   }
}

if(!$_SESSION)
{
echo <<<_END
<form method='post' action='palogin.php'>
Brukernavn <input type='text' maxlength='16' name='bruker' "<br/>
Passord       <input type='password' maxlength='16' name='pass' <br/>
<input type='hidden' name='loginRedirect' value='$loginRedirect'>
<input type='submit' value='Logg inn'>
_END;
}
?>

Jeg er sikker på et det finnes en enklere måte å gjøre det på, men uansett så har dette vært svært lærerikt. [$_SERVER['REQUEST_URI'] var løsningen, Ekstrapoeng til Ernie! :)

Lenke til kommentar
  • 2 uker senere...

Dette er det du trenger:

 

echo "<META HTTP-EQUIV='Refresh' Content='0; URL=DIN_URL.php'>";

 

Det blir sagt flere ganger at en ikke skal bruke meta midt i siden, men bare i header. Dette er simpelthen fordi META er laget for å gi ut informasjon om websiden. Men, å bruke meta for å lage en "refresher/vidrefører" på denne måten er IKKE et problem.

Endret av slacky
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...