在服務器端驗證PHP表單的正確方法是什麼?網上有大量的例子,表單的動作本身,但如果我的表單的動作是另一個.php文件呢?PHP服務器驗證(調用不同的頁面)
例如,我在page1.php上有一個表單元素。這種形式的行爲是page2.php。我知道如何在客戶端進行驗證,但是如何在服務器端驗證此表單?
在服務器端驗證PHP表單的正確方法是什麼?網上有大量的例子,表單的動作本身,但如果我的表單的動作是另一個.php文件呢?PHP服務器驗證(調用不同的頁面)
例如,我在page1.php上有一個表單元素。這種形式的行爲是page2.php。我知道如何在客戶端進行驗證,但是如何在服務器端驗證此表單?
始終在服務器端進行驗證。客戶端驗證僅僅是爲了響應;服務器端實際上有助於保護服務器免受攻擊,並有助於確保存儲機制/腳本操作中的數據有效性。
在page2.php
,設置頁面以第一驗證(也許用function validateData()
),並且根據該結果,顯示錯誤和(任選地)一個後退按鈕page1.php
。否則(else
),做任何腳本應該做的事情。
例子:
<?php
function validateMyForm(&$data) {
$errors = array();
$data['name'] = strip_tags($data['name']);
if (!is_string($data['name']) || strlen($data['name']) < 3 || strlen($data['name']) >20) {
$errors[] = 'Name field must be provided (3-20 characters)';
}
return $errors;
}
$errors = validateMyForm($_POST);
if (count($errors)) {
echo "
<h1>Form Errors</h1>
<ul>
<li>
";
echo implode('</li><li>',$errors);
echo '
</li>
</ul>
<p><a href="javascript:history.back()">Go back</a></p>
';
} else {
// do form stuff
}
?>
是的,我覺得我可以做到這一點。但我想讓用戶有機會重新輸入page1.php中的信息,也不會丟失他/她輸入的任何原始信息。在page2.php上驗證不允許我這樣做,除非我將表單值傳遞迴page1.php。 – carlg
我相信使用'history.back()'可以保留表單字段(不確定這一點)。或者,您可以將'page1.php'放入'page2.php'錯誤結果中並重新填充。 –
@ColShrapnel - 哎,我猜怎麼着?現在是什麼? –
如果我的表單的動作是另一個PHP文件?
簡單。只是把它變成形式本身。
你錯誤地描述了OP所要求的內容。 –
謝謝,看來你是對的。 –
您能否提供更多信息?基本上,您可以訪問目標頁面中的POST和GET-varaibles。 '$ _POST ['input_name']/*或*/$ _GET ['input_name']'和你的函數中的這些值。 – Smamatti
不知道還有更多我可以說。看看我對另一位海報的回答的回覆。我在那裏提供了更多信息。 – carlg
[防止用戶使用後退按鈕,警告或禁用任何插入]的可能的重複(http://stackoverflow.com/questions/5180143/prevent-user-to-use-back-button-with-warning-or-disable -any-insert) –