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"字段的名称和值?

在提交表单之前,您可以在文本输入字段前加上说明符字符串,例如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('~^dud*$~', $key))
echo "{$key} {$value}<br>";
}

因为所有文本输入名称都有一个公共子字符串('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和提交输入$key(因为子字符串"du"不存在(返回FALSE。

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

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

请从PHP:strpos手册:中查看此注释

警告此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。请阅读布尔值可获取更多信息。使用===运算符测试此函数的返回值。

最新更新