0

多个输入字段,例如

<input type="text" name="row1[]" id="date1">
<input type="text" name="row1[]" id="amount1">
<input type="text" name="row1[]" id="name1">
<input type="text" name="row1[]" id="document1">

想要检查某些字段(不是所有字段)中的字符数是否至少为 1(在示例中不想检查 id="document1" 中的字符数。现在使用此代码

if ( (strlen($_POST['row1'][0]) >= 1) or (strlen($_POST['row1'][1]) >= 1) or (strlen($_POST['row1'][2]) >= 1)) ) {
}

是否可以将代码缩短为(这不是工作代码)?

if ( (strlen($_POST['row1']??want_to_check??) >= 1) ) {
}

并输入类似的内容(也不起作用且不真实)

<input type="text" name="row1[]??want_to_check??" id="date1">
<input type="text" name="row1[]??want_to_check??" id="amount1">
<input type="text" name="row1[]??want_to_check??" id="name1">
<input type="text" name="row1[]??do_not_want_to_check??" id="document1">

仅检查某些字段(不是所有字段)中的字符数

4

3 回答 3

1

一个棘手的速记

if (count(array_filter($_POST['row1'],'trim')) != count($_POST['row1'])) {
    //not all fields are set
}

但总的来说,如果您看到重复 - 您可以确定可以使用循环。看:

if ( (
    strlen($_POST['row1'][0]) >= 1) 
or (strlen($_POST['row1'][1]) >= 1) 
or (strlen($_POST['row1'][2]) >= 1)) ) 

三个重复的运算符,只有计数器变化。我相信你可以为此编写一个循环。你不能吗?

更新

  1. 制作合理的字段名称

    <input type="text" name="row1[date]" id="date1">
    <input type="text" name="row1[amount]" id="amount1">
    <input type="text" name="row1[name]" id="name1">
    <input type="text" name="row1[document]" id="document1">
    
  2. 创建一个包含必填字段名称的数组

    $req = array('date1','amount1','name1');
    
  3. 在循环中检查您对这个数组的输入
于 2013-05-06T05:33:57.733 回答
0

像这样的东西可能会起作用

function checkLength($inputs) {
    foreach($inputs as $input) {
        if(strlen($input) < 1) return false;
    }
    return true;
}

if(checkLength(array($_POST['input1'], $_POST['input2'], $_POST['input3']))) {

}
于 2013-05-06T06:32:00.487 回答
-1

您可以使用循环遍历字段foreach

$field_set = false;
if(!empty($_POST['row1'])){
    foreach($_POST['row1'] as $key => $row){
        //Your code here
        if(trim($_POST['row1']))
            $field_set = true;
    }
} 

如果您有动态数量的字段,这将起作用。

于 2013-05-06T05:42:39.047 回答