2010-04-12 83 views
2

當密碼輸入錯誤時,許多具有登錄名的網站如何將用戶名字段保留在用戶名字段中。 表單的動作(它在index.php上)是另一個php文件,如果密碼不正確,則使用Header()返回索引並使用GET將錯誤傳遞給它。我可以使用GET將用戶名傳遞迴表單,但這看起來很亂,而且我注意到像SMF論壇這樣的網站有用戶名留在用戶名字段中,沒有亂七八糟的URL。當密碼輸入錯誤時,請在用戶名字段中輸入用戶名字段

+0

爲什麼php不允許你以這種方式使用$ _POST:$ _POST ['username'] =「Joe Blogs」;?這似乎很明顯,並會讓事情變得更容易。 – 2010-04-12 09:58:06

+0

你能給出一個SMF論壇的代碼/ URL的例子嗎?我發現他們發佈到可以隨時訪問表單值的同一個index.php頁面。 – zaf 2010-04-12 13:22:46

回答

1

您可以使用會話。

例如,當一個帖子是不正確的(這會去的文件處理您的職位要求):

$_SESSION['username'] = $_POST['username'];

那麼你的登錄頁面上:

<input type="text" name="username" value="<?php echo @$_SESSION['username']; ?>" />

製作確定你開始會話雖然:http://php.net/session_start

+0

作爲一般規則,我不建議使用會話來達到這種目的:當用戶打開多個選項卡時,最終會導致網站中斷。 – 2010-04-12 10:08:01

+0

會話通過選項卡/窗口進行傳輸。我同意,如果表單發佈給自己,處理表單更容易,但情況並非總是如此。如果驗證失敗,您將如何在不同頁面上傳輸用戶數據? (當然,在數據被顯示之後,你必須小心地清空請求之間的會話數據等) – 2010-04-12 10:58:08

+0

我想不出當前上下文中有什麼問題。我警告不要使用會話作爲表單的一般替代(在預訂網站等某些領域非常流行的技術)的策略。 – 2010-04-12 12:25:15

3

我通常會發現,在顯示錶單的同一腳本中處理表單數據比較容易,只有當我收集到正確的輸入時才能將表單重定向到其他地方。

0

通過GET方法

header("Location: loginpage.php?username=".$_REQUEST['username']); 

和表單頁面u能訪問它想:

<input type="text" name="username" value=<?php echo $_GET['username']?> 
+0

非常糟糕,因爲您可能會接受XSS和SQL注入攻擊。 – 2010-04-12 09:56:30

+0

引用問題:「我可以使用GET將用戶名傳回表單,但這看起來很亂」 – 2010-04-12 09:59:13

+0

您將如何開放SQl注入,沒有任何提交到數據庫? – 2010-04-12 10:00:07

2

Simples!

<form action="loginpage.php" method="post"> 
    <fieldset> 
    ... 
    <input type="text" name="username" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /> 
    ... 
    </fieldset> 
</form> 

其餘的形式ommitted強調解決方案。

+0

但我如何從login.php獲取用戶名到POST變量中? – 2010-04-12 10:01:04

+0

@Jonathan這就是爲什麼我們把表單放在login.php – 2010-04-12 10:40:38

相關問題