webForumDet fria alternativet

Sessioner, GET och redirect

PHP

5 svar · 290 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Nu har jag ett intressant problem. Jag fattar som vanligt ingenting, men förhoppningsvis gör nån annan det.... :l

Jag har två filer som använder sessionsvariabler. Den ena login.php loggar in, den andra my.php kräver att man är inloggad. Själva inloggningen fungerar, så länge jag loggar in och ut och hoppar mellan dessa två filer rakt upp och ner är det grönt.

Men... om man anländer till my.php utan att vara inloggad så händer följande:

 
if (!isIn()) {
   header("Location: login.php?go=cp");
}

Då hamnar man i login och URL:n är login.php?go=cp som den borde vara. Sedan loggar jag in, då körs en funktion i login som kollar att allt är OK, man finns i db:n osv, och sätter sessionsvariabler om allt är grönt, sedan kommer man till följande:

 
if (wasChosenGET("go", "cp")) header("Location: my.php");
else header("Location: message.php?mess=Successfully logged in!");

//där funktionen är
function wasChosenGET($name, $val) {
   return (isSet($_GET["$name"]) && $_GET["$name"] == $val);
}

Som URL:n ser ut borde jag hamna i my tycker jag.
Men det gör jag inte!!! Jag hamnar i message!?!?!? :q VARFÖR?

Däremot fungerar följande: om jag går till login med URL:n
login.php?go=out så blir jag utloggad - på följande kod:

if (isIn() && wasChosenGET("go", "out")) {
   logout(); }

Var är skillnaden??? :q :x

RED: Rättade parentesfel

Medlem sedan aug. 20002 975 inlägg
#2

Du går till login.php?go=cp.
Där får du upp ett inloggningsformulär.
När du postar detta formulär är det den URL du har i din action som skickas.

Finns inte go=cp i din action kommer skriptet du postar till sedan att gå till message.

Du måste alltså via dina GET-variabler styra adressen i action.

Medlem sedan mars 20034 471 inlägg
#3

Ååååh! Så fast att det ser ut så här:

$me = $_SERVER['PHP_SELF'];
<form method="POST" name="LoginForm" action="$me" >

Så följer inte GET-variablerna med? :q Stämmer det?

Tydligen... just testat.

TACK, Matte! Tusen tack! :birp

Medlem sedan juni 20034 013 inlägg
#4

Det enkla sättet att kolla upp om det stämmer är ju att titta i sidans html-kod i webbläsaren. Eller att skriva echo($me); i koden.

GET-variablerna finns i $_SERVER['QUERY_STRING']

Medlem sedan aug. 20002 975 inlägg
#5

aasah skrev:

Så följer inte GET-variablerna med? :q Stämmer det?

Nej, det gör de inte.

Om du har REQUEST_URI på din server kan du skriva:

$me = $_SERVER['REQUEST_URI'];

Annars får du som tydal säger skriva:

$me = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
Medlem sedan mars 20034 471 inlägg
#6

Matte skrev:

...Om du har REQUEST_URI på din server kan du skriva:

$me = $_SERVER['REQUEST_URI'];

Annars får du som tydal säger skriva:

$me = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];

Smart. :) Bra att veta i framtiden. Löste det simpelt nu eftersom det bara är go som kan sättas med tillägget:

if (isSet($_GET["go"])) $me .= "?go=".$_GET["go"];

Tack än en gång! :) Glömde uppdatera tråden så ursprungliga tacket är högre upp...

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)