2011-11-05 69 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

谢谢,看来你是对的。 –