假设我有这样的表格:
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"
字段的名称和值?
答案 0 :(得分:2)
您可以在文本输入字段之前添加说明符字符串到文本输入字段,例如text-125
,text-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。请阅读以下内容 有关更多信息的布尔值。使用===运算符测试 该函数的返回值。