我收到两个警告警告:为foreach()提供的参数无效但我仍然检索我预期的post变量。我哪里错了?它说警告是关于第7行,在这种情况下是第7行; foreach($ value为$ k => $ v)
<!------------- quote.php ----------------->
<body>
What services are you interested in? <br/><br/>
<form name="input" action="quote2.php" method="post">
<?php
$services = array('Tree Felling', 'Height Reduction', 'Crown Thinning', 'Deadwooding/Ivy Removal', 'Stump Grinding', 'Other');
foreach ($services as $option) { ?>
<input id="<?= $option ?>" type="checkbox" name="services[]" value="<?= $option ?>" />
<label for="<?= $option ?>"><?= $option ?></label>
<br />
<? }
?>
<br/>
<input name="name" type="text" />NAME</br>
<input name="place" type="text"/>TOWN</br/>
<input type="submit" value="Submit">
</form>
</body>
<!------------ quote2.php -------------->
<?php
echo '<h3>SERVICES REQUIRED</h3>';
foreach ($_POST as $key => $value) {
foreach($value as $k => $v)
{
echo '<p>'.$v.'</p>';
}
}
echo "<hr /><h3>DETAILS</h3>";
echo $name = $_POST['name'];
echo "</br>";
echo $place = $_POST['place'];
echo "<hr/>"
?>
答案 0 :(得分:5)
许多表单控件的名称不以[]
结尾,因此不是数组。
你不能循环一个字符串。
您应该单独提取所提交数据的每个值,并且仅循环服务。
答案 1 :(得分:1)
问题在于,$ _POST数组中的所有项目都不会具有数组类型的值;您根据 quote2.php
中的代码假设一个简单的 is_array()检查将确保只有数组在foreach中迭代,这是编辑后的文件内容:
<!------------ quote2.php -------------->
<?php
echo '<h3>SERVICES REQUIRED</h3>';
foreach ($_POST as $key => $value) {
if (is_array($value)) {
foreach($value as $k => $v)
{
echo '<p>'.$v.'</p>';
}
}
}
echo "<hr /><h3>DETAILS</h3>";
echo $name = $_POST['name'];
echo "</br>";
echo $place = $_POST['place'];
echo "<hr/>"
?>
这应该可以解决问题。
答案 2 :(得分:0)
尝试在if语句中包装foreach循环以检查数组是否为数组。例如:
if (is_array($services)) {
foreach ($services as $option) {
// Some code
}
}
虽然我不会太担心。这只是编写代码的一种更简洁的方法。