我目前正在尝试通过服务器端验证表单,它的工作方式是将所有数据放入数组中,以表单字段作为键,以字段数据作为值,但是我需要检查所有键是否与值相关联,否则我希望停止提交并让用户编辑其详细信息,然后重新提交,是否有快速检查可以运行而不需要分解数组并进行检查,或者在将其放入数组之前使用开关或大量if语句进行检查?
验证数组中的每个元素?
原标题:
最佳回答
有一个选择是两者兼而有之。
使用字段名作为键来创建一个分离的字段选项数组。
$fieldTypes = array( nameFirst => name ,
nameLast => name ,
phone => phone ,
email => email );
foreach($input as $key => $value) {
switch($fieldTypes[$key]) {
case name :
//run $value against name validation
break;
case phone :
//run $value against phone validation
break;
case email :
//run $value against email validation
break;
default:
//code here for unknown type
}
}
现在,它可以以任何方式使用,并很容易扩展,以包括字段是否必需或错误消息等信息。通过将$fieldTypes
数组转换为多维数组,或包含数据的对象数组。
如果您决定添加一个字段,可以不用更改太多验证代码。
问题回答
Sico87,
更多的情况下,您不想同时测试所有字段。例如,您可能有一个联系人字段,其中包含一个不是强制性的电话号码条目选项,因此因此原因拒绝提交可能会有问题。
在很多情况下,单独测试您的领域会更容易,这样您就可以给每个领域都特别关注它所需的注意事项。您想要特别关注电子邮件地址,以及特别关注生日。
长期来看,平等对待所有人可能会引起非常严重的问题。
function fieldEmpty($value) {
return trim($value) == ;
}
if (count(array_filter($array, fieldEmpty ))) {
die( bad );
}
这个怎么样? (Zhè ge zěn me yàng?)
<?php
$arrayFilled = true;
foreach($array as $key=>$value) {
$arrayFilled = trim($value) == ? false : $arrayFilled;
if($arrayFilled === false) { break; }
}
if($arrayFilled === false) {
echo "missing data";
}
else {
echo "filled array";
}
你可能需要检查的不仅仅是空字符串,但我会留给你。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding