2011-11-05 68 views
0

在服務器端驗證PHP表單的正確方法是什麼?網上有大量的例子,表單的動作本身,但如果我的表單的動作是另一個.php文件呢?PHP服務器驗證(調用不同的頁面)

例如,我在page1.php上有一個表單元素。這種形式的行爲是page2.php。我知道如何在客戶端進行驗證,但是如何在服務器端驗證此表單?

+0

您能否提供更多信息?基本上,您可以訪問目標頁面中的POST和GET-varaibles。 '$ _POST ['input_name']/*或*/$ _GET ['input_name']'和你的函數中的這些值。 – Smamatti

+0

不知道還有更多我可以說。看看我對另一位海報的回答的回覆。我在那裏提供了更多信息。 – carlg

+0

[防止用戶使用後退按鈕,警告或禁用任何插入]的可能的重複(http://stackoverflow.com/questions/5180143/prevent-user-to-use-back-button-with-warning-or-disable -any-insert) –

回答

0

始終在服務器端進行驗證。客戶端驗證僅僅是爲了響應;服務器端實際上有助於保護服務器免受攻擊,並有助於確保存儲機制/腳本操作中的數據有效性。

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 
} 

?> 
+0

是的,我覺得我可以做到這一點。但我想讓用戶有機會重新輸入page1.php中的信息,也不會丟失他/她輸入的任何原始信息。在page2.php上驗證不允許我這樣做,除非我將表單值傳遞迴page1.php。 – carlg

+0

我相信使用'history.back()'可以保留表單字段(不確定這一點)。或者,您可以將'page1.php'放入'page2.php'錯誤結果中並重新填充。 –

+0

@ColShrapnel - 哎,我猜怎麼着?現在是什麼? –

0

如果我的表單的動作是另一個PHP文件?

簡單。只是把它變成形式本身。

+0

你錯誤地描述了OP所要求的內容。 –

+0

謝謝,看來你是對的。 –