在服务器端验证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) –