可能重复:
More concise way to check to see if an array contains only numbers (integers)
PHP checking if empty fields
我有提交10个字段的表单,其中7个应该填写,以下是我现在用PHP来解决的问题:
if (!$name || !$phone || !$email || !$mobile || !$email || !$state || !$street || ! $city) {
echo '<div class="empty_p">You have empty fields!!!</div>';}
else{
//process order or do something
}
我的问题是:有更简单的方法吗?因为有时候我会检查更多字符串(12-15)
答案 0 :(得分:4)
另一种可能性:
$array = ($name, $email, $mobile);
$valid = true;
foreach($array as $element) {
if(empty($element)){
$valid = false;
}
}
if ($valid){
// complete
} else {
// alert! some element is empty
}
答案 1 :(得分:3)
这样的东西?
foreach($_POST as $key => $value)
{
if (empty($_POST[$key]))
{
echo '<div class="empty_p">'.$_POST[$key].' is empty.</div>';
}
}
答案 2 :(得分:2)
最好具体说明这些数据的预期位置,例如: $_POST
:
if (!isset($_POST['name'], $_POST['phone'], $_POST['email'], $_POST['mobile'], $_POST['state'], $_POST['street'], $_POST['city'])) {
// something is up
}
您可以通过创建包含所需字段名称的数组来缩短此代码:
$required_fields = array('name', 'phone', 'email', 'mobile', 'state', 'street', 'city');
然后可以将“检查存在”代码简化为:
foreach ($required_fields as $f) {
if (!isset($_POST[$f])) {
// something is up
}
}
但是,您应该认真考虑结合存在和验证/清理检查。 PHP提供了一系列filter functions函数,可用于验证和/或清理输入变量。例如,要获得与上面相同的行为:
$required_fields = filter_input_array(INPUT_POST, array(
'name' => FILTER_UNSAFE_RAW,
'email' => FILTER_VALIDATE_EMAIL,
));
if (is_null($required_fields) || in_array(null, $required_fields, true)) {
// some fields are missing
}
存在但验证失败的字段将设置为false
,因此您可以检测到此类事件:
foreach ($required_fields as $name => $value) {
if (false === $value) {
// field $name failed validation (e.g. bad email format)
} elseif (!strlen(trim($value))) {
// field is empty
}
}
答案 3 :(得分:1)
你可以编写Foreach循环
foreach($_POST as $key => $value)
{
if (!isset($_POST[$key]) || empty($_POST[$key])
{
echo '<div class="something">You have empty fields!!!</div>';
}
}
答案 4 :(得分:1)
最好的方法是创建某种形式验证器。但是您可以使用此功能:
<?php
function isAnyEmpty() {
$total = 0;
$args = func_get_args();
foreach($args as $arg)
{
if(empty($arg)) {
return true;
}
}
return false;
}
$var1 = 1;
$var2 = 'test';
$var3 = '';
if(isAnyEmpty($var1, $var2, $var3)) {
echo 'empty fields!';
}
?>
答案 5 :(得分:1)
您可以尝试创建一个可以重复使用且更精确的通用验证类。
一些伪代码:
<?
class validateFields {
$validators = array(
"name" => array(
"empty" => array(
"rule" => "some regex",
"errorMessage" => "name may not be empty"
),
"noNumbers" => array(
"rule" => "some regex",
"errorMessage" => "No numbers are allowed in the name field"
)
),
"otherVariable" => array(
"atLeast50chars" => array(
"rule" => "some regex",
"errorMessage" => "This field must be at least 50 chars"
)
)
);
public function Validate($post){
$errors = array();
foreach($_POST as $key => $value){
if(!array_key_exists($key, $validators)) {
continue;
}
foreach($validators[$key] as $validator) {
if(!preg_match($validator["rule"], $value) {
$errors[$key] = $validator["errorMessage"];
break;
}
}
}
return $errors;
}
}
?>
然后在您的代码中,您可以执行以下操作:
$errors = Validate($_POST);
foreach($error as $errorMessage) {
echo $errorMessage . "</br>";
}
当然你可能会想到这一点,在相关输入字段下方/旁边添加带有类的div,并将$ errorMessage加载到那里。 我确信那里有很多例子:)
答案 6 :(得分:-1)
<input type="text" name="required[first_name]" />
<input type="text" name="required[last_name]" />
...
$required = $_POST['required'];
foreach ($required as $req) {
$req = trim($req);
if (empty($req))
echo 'gotcha!';
}
/ * update * /
OK!伙计们,简单......
您可以使用类型转换来提高安全性,就像我们所有程序员为即将推出的数据所做的那样,例如$id = (int) $_GET['id']
,如$username = (string) addslashes($_POST['username'])
等等......
$required = (array) $_POST['required'];
然后,来自帖子字段的内容让他们来了,这段代码只是寻求它所需要的东西。 这就对了!呃...