我有page1.php,它使用表单发送以下数据:
<form action="page2.php" method="post">
<input type="text" name="f1">
<input type="text" name="f2">
<input type="text" name="f3">
<input type="text" name="f4">
<input type="submit" value="submit">
</form>
在page2.php上,我做了一些基本的验证,所以看到表单实际上已经提交并输入了所有数据:
<?php
if($_SERVER['REQUEST_METHOD'] != "POST" || empty($_POST["f1"]) || empty($_POST["f2"]) || empty($_POST["f3"]) || empty($_POST["f4"]))
{
$missing_input = array();
if (empty($_POST["f1"]))
{
$missing_input[] = "field1";
}
if (empty($_POST["f2"]))
{
$missing_input[] = "field2";
}
if (empty($_POST["f3"]))
{
$missing_input[] = "field3";
}
if (empty($_POST["f4"]))
{
$missing_input[] = "field4";
}
die("Error: " . implode(", ", $missing_input)");
}
?>
问题是,当在page1.php表单中引入新的POST字段时,上述情况非常难看,需要重新工作。如何更好地对此表单验证进行编码?
答案 0 :(得分:2)
这适用于您在表单中放置的任意数量的字段
if ($_SERVER['REQUEST_METHOD'] != "POST") {
die("Improper request method");
}
if (!empty($_POST)) {
foreach ($_POST as $key => $field) {
if (strlen($field) === 0) {
$missing_input[] = $key;
}
}
}
if (!empty($missing_input)) {
die("Error: " . implode(", ", $missing_input)");
}
答案 1 :(得分:2)
您可以使用带变量保持字段名的简单循环:
<?php
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fieldnames = array(
'f1' => 'field1',
'f2' => 'field2'
'f3' => 'field3'
'f4' => 'field4'
);
$missing_input = $array();
foreach ($fieldnames as $code => $label)
{
if (empty($_POST[$code]))
{
$missing_input[] = $label;
}
}
//Display errors nicely
if (count($missing_input) > 0):?>
<p>The following fields are required :</p>
<ul>
<?php foreach ($missing_input as $field): ?>
<li><?php echo $field ?></li>
<?php endforeach; ?>
</ul>
<?php endif;
}
答案 2 :(得分:1)
将f1
,f2
等存储在数组中,并使用for语句迭代数组。
示例:
if($_SERVER['REQUEST_METHOD'] != "POST")
die("Error: Wrong method");
$fields = array("f1", "f2", "f3", "f4");
$field_names = array("field1", "field2", "field3", "field4");
$length = count($fields);
$missing_input = array();
for($i = 0; $i < $length; $i++)
if(empty($_POST[$fields[$i]]))
$missing_input[] = $field_names[$i];
if(!empty($missing_input))
die("Error: " . implode(", ", $missing_input)");
注意:以上是未经测试的。
答案 3 :(得分:1)
你应该看看使用像zend或yii这样的框架。简短的回答是,如果您不喜欢这样做,您必须编写一个类或对象来执行此操作。
答案 4 :(得分:0)
以上感觉非常难看
这是错误的感觉。
如果你只需要检查字段是否为空,那么你当然可以做一些愚蠢的循环。
在现实生活中,对不同的字段有不同的检查,因此,您必须依次手动编写所有字段。它没有任何问题。
我在这里看到的唯一问题是第一行的冗余检查。为什么所有这些“||空”呢?