PHP仅在表单文本字段中循环

时间:2018-12-02 06:57:31

标签: php

假设我有这样的表格:

echo "<form action='form_rec.php' method='post'>";

//These fields are dynamically generated du5, du6 etc...
echo '<input type="text" name="du1" value="125"><br>';
echo '<input type="text" name="du2" value="326"><br>';
echo '<input type="text" name="du3" value="090"><br>';
echo '<input type="text" name="du4" value="425"><br>';

echo "<input type='hidden' name='input' value='key'>";
echo "<input type='submit' class='button' name='submit' value='submit'>";
echo "</form>";

如何使用php仅遍历type="text"字段。我想要实现的输出是:

du1 125
du2 326
du3 090
du4 425

我目前正在这样做:

foreach($_POST as $key =>$value){
    echo $key.' '.$value.'<br>';
}

但是会输出隐藏键以及提交按钮的值

du1 125
du2 326
du3 090
du4 425
input key
submit submit

如何仅获取type="text"字段的名称和值?

2 个答案:

答案 0 :(得分:2)

您可以在文本输入字段之前添加说明符字符串到文本输入字段,例如text-125text-090 ...或使用数组:

echo '<input type="text" name="du[]" value="125"><br>';
echo '<input type="text" name="du[]" value="326"><br>';
echo '<input type="text" name="du[]" value="090"><br>';
echo '<input type="text" name="du[]" value="425"><br>';

否则,应该使用例如preg_match()

foreach($_POST as $key => $value) {
    if (preg_match('~^du\d*$~', $key))
        echo "{$key} {$value}<br>";
}

答案 1 :(得分:0)

由于所有文本输入名称都有一个公共子字符串('du'),因此可以使用 strpos 检查该子字符串是否存在,即$ key是否具有子字符串'du'。指输入文本,否则不引用。

尝试一下:

foreach($_POST as $key =>$value){
    $myString = 'du'; //the substring common to all the text elements (du1,du2,du3,du4)
    if (strpos($key, $myString) === 0){ //strpos finds the position of a substring in a string ('du' position is at offset zero)
        echo $key.' '.$value.'<br>';
    }
}

在这种情况下,strpos将为输入$ key返回零(因为零是子字符串'du'的偏移量),并且对于隐藏的输入$ key将返回FALSE并提交输入$ key(因为子字符串'du'为不存在)。

此解决方案允许您不更改输入名称。

请注意使用 === , 使用==不会排除隐藏输入和提交输入的FALSE结果 实际上FALSE == 0将返回TRUE

PHP: strpos manual 中查看此注释:

  

警告   此函数可以返回布尔FALSE,但也可以返回   非布尔值,其值为FALSE。请阅读以下内容   有关更多信息的布尔值。使用===运算符测试   该函数的返回值。