2010-05-14 107 views
2

我送登錄狀態=失敗,回到我的登錄page.Here是我的代碼 -傳值到另一個PHP

header("location:index.php?login=fail"); 

但通過URL喜歡 -

http://localhost/303/index.php?login=fail 
發送

有什麼方法可以在不顯示URL的情況下傳遞值?以及如何在第二頁上獲得這個值?

+0

不知道你是否會依賴於可變知道,如果用戶成功loged或沒有,但請記住,你永遠不應該依賴無論是$ _GET還是$ _POST變量,因爲它們都可以被用戶操縱。使用$ _SESSION來存儲那種信息 – 2010-05-14 13:06:39

+0

@Gonçalo什麼樣的信息?簡單的錯誤信息?你在開玩笑 – 2010-05-14 13:15:46

+1

@Shrapnel不,不是簡單的錯誤信息。您用來了解登錄是否成功的信息。我不知道Piyush是否想隱藏登錄變量,所以用戶不能將登錄名更改爲true,並繞過一些「if」...我只是建議他,讓一個var POST贏得' t使用戶難以改變它 – 2010-05-14 21:49:47

回答

1

您通過GET請求,這就是爲什麼它會出現在URL傳遞該值。爲了傳遞一個值而不在URL中顯示它,你想通過一個POST請求來傳遞它。

爲了做到這一點,您不希望將該值「返回」到您的登錄頁面。相反,無論php表單在點擊「登錄」按鈕後處理登錄用戶的過程,都將決定顯示用戶的內容。

<form method="post" action="checkLogin.php"> 
Username: 
<input type="text" name="username" maxlength="25" /> 
Password: 
</td><td><input type="password" name="password" /> 
<input type="submit" name="submit" value="Login"> 
</form> 

爲了:

$_POST['username']; 

將獲得與您通過POST傳遞的名稱爲「用戶名」的價值 -

在PHP後的變量可以通過全局$ _ POST對象來訪問動態保存並向用戶顯示錯誤,可以將它們存儲在會話中,例如有一個名爲「errors.php」的文件。

<?php 
if (isset($_SESSION['errors'])) 
{ 
    echo $_SESSION['errors']; 
} 

unset($_SESSION['errors']) 
?> 

而在你的PHP檢查登錄,這樣做:

session_start(); 
$_SESSION['errors'] = "Invalid username or password."; 

然後重定向到登錄頁面(不傳遞任何變量)和你的表格上總是有這一領域:

<?php include("errors.php"); ?> 

如果您沒有任何錯誤,則不會顯示任何內容,並且登錄頁面看起來很正常。

注意:在任何使用session_start()的php表單中,它都是第一件事。

+2

他要求重定向 – 2010-05-14 12:47:59

+0

但是在標題( - )中我怎樣才能指定method =「Post」? – nectar 2010-05-14 12:54:32

+0

你不會在標題中指定任何東西 - 如果你將它們重定向回登錄頁面或「索引」或其他東西 - 在該頁面上有<?php include(「errors.php」)?>。然後,無論您存儲在會話中的任何錯誤都會顯示在那裏。會話中的值存儲在服務器上,您不需要傳遞它們。 – 2010-05-14 12:55:59

0

其他方法是使用會話隱藏字段但你你在做什麼是很好的目的。您可以在以後檢索這樣的值:

if ($_GET['login'] === 'fail') 
{ 
    // failed....... 
} 
0

有幾種方法來完成你的任務

  • 現代AJAX方式。表單使用AJAX發送。沒有頁面重新加載,直到密碼正確。顯示錯誤。需要JavaScript。
  • Post/Redirect/Get模式。表格使用普通POST發送。沒有錯誤重定向,顯示在適當位置。
  • 會話,當我們存儲的錯誤在會話