webForumDet fria alternativet

Skickas tillbaka till den sidan där man loggade in.

PHP

12 svar · 367 visningar · startad av jiggan

Medlem sedan juni 2003175 inlägg
Frågan#1

Jag har ett litet problem...Jag har inloggningsformulär på en massa ställen på min sidan. När man har angett ett användarnamn och lösenord vill jag att man ska komma tillbaka till exakt den sidan man var på. Hur löser jag detta enklast? Ibland loggar man in ifrån forumet där man kanske är inne och läser ett inlägg och ibland loggar man in från förstasidan. Hur gör jag för att komma tillbaka till exakt det stället där man var?

Medlem sedan aug. 20002 975 inlägg
#2

Skicka med adressen till sidan som en hidden fält i formuläret, typ

<input type="hidden" name="return" value="<?php echo $_SERVER['PHP_SELF'] ?>" />

Och sedan i PHP-skriptet som tar hand om det postade formuläret:

header("Location: ".$_POST['return']);
Medlem sedan juni 2003175 inlägg
#3

Thnx! :P

Medlem sedan juni 2003175 inlägg
#4

Hmm...Det funkade inte riktigt som jag hade tänkt mig...I formuläret ser det ut så här:

<input type="hidden" name="return" value="<?php echo $_SERVER['PHP_SELF'] ?>" />

När man loggat in så ska man ju naturligtvis komma tillbaka till forum.php men kommer istället till login.php?from=forum&section.
Konstigt...
Så här ser min header location ut:

header("Location: ".$_POST['return']."");
Medlem sedan aug. 20002 975 inlägg
#5

Kan du visa lite hur dina skript är uppbyggda, ditt inloggningsformulär samt koden som tar emot det postade formuläret ?

Medlem sedan juni 2003175 inlägg
#6

Jag ändrade i formuläret nu men jag kommer bara tillbaka till login.php
Så här ser mitt formulär ut:

<form action="login.php" method="post" name="login">
<b>Användarnamn</b>
<input type="text" name="nick" size="20">
<b>Lösenord</b>
<input type="password" name="pass" size="20">
<input type="hidden" name="return" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
<br>
<br>
<br>
<input type="submit" value="Logga in">

Och här är login.php:

$link = mysql_connect("chopin.1go.dk", "free51911", "jiggan");
mysql_select_db("free51911", $link);
$sql = "SELECT id FROM members WHERE nick = '". $_POST['nick'] ."' AND pass = '". $_POST['pass'] ."'";
$resultat = mysql_query($sql, $link) or die (mysql_error());
if((mysql_num_rows($resultat)==0))
{
	header("Location: ".$_POST['return']."");

}
else
{
	header("Location: ".$_POST['return']."");
}
Medlem sedan aug. 20002 975 inlägg
#7

Du måste väl på något sätt markera att inloggningen är med rätt uppgifter, t.ex. genom att sätta en sessionsvariabel eller motsvarande, annars lär du väl aldrig bli inloggad.

De flesta webbservrar lämnar ett värde på $_SERVER['PHP_SELF'], men det finns några som inte gör det.
Om du tar Visa->Källa i webbläsaren, hur ser då HTML-koden ut för ditt inloggningsformulär ?

Medlem sedan juni 2003175 inlägg
#8

Japp men så långt har jag inte kommit än...Jag vill bara få detta att funka. HTML-koden för formuläret ser ut så här:
<input type="hidden" name="return" value="/forum.php" />
Så det verkar ju funka men man kommer inte tillbaka igen!

Medlem sedan aug. 20002 975 inlägg
#9

Med den koden du visat kan du aldrig få login.php?from=forum§ion i adressfältet. Du måste ha någon annan kod som ger detta.

header() är en header, och i likhet med andra headers måste den sättas innan du skickar någon output till webbläsaren.

Lägg följande överst i login.php för att se om du får något felmeddelande:

<?php

error_reporting(E_ALL);
ini_set("display_errors", "1");
Medlem sedan juni 2003175 inlägg
#10

Jag hade missat att ta bort det sen jag testade en sak med formuläret...Men nu funkar det nästan...Jag kommer tillbaka men bara till forum.php även om jag loggade in ifrån forum.php?section=1
Vad är då fel?

Medlem sedan aug. 20002 975 inlägg
#11

Då använder du dig av $_SERVER['REQUEST_URI'] istället för $_SERVER['PHP_SELF'].

Har du inte REQUEST_URI på din server kan du skapa den med

$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
Medlem sedan okt. 2004392 inlägg
#12

Man kan använda

<script>history.back(1);</script>

på så vis slippa göra en post som heter return över allt och på så vis slipper man också skriva $_SERVER['REQUEST_URI'] över allt, och sist men inte minst, på så vis slipper man använda header(); funktionen ;)...

Medlem sedan mars 20025 907 inlägg
#13

Snakes skrev:

Man kan använda

<script>history.back(1);</script>

på så vis slippa göra en post som heter return över allt och på så vis slipper man också skriva $_SERVER['REQUEST_URI'] över allt, och sist men inte minst, på så vis slipper man använda header(); funktionen ;)...

Är det något fel på header()? Är det bättre att man blir beroende av att besökaren har javascript aktiverat (vilket inte är helt ovanligt att besökare inte har idag)?

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)