我得到两个警告警告:为foreach()提供了无效参数,但我仍然检索到预期的post变量。我哪里做错了?它说警告是关于第7行的,在这种情况下,这是开始的行;Foreach ($value as $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/>"
?>
一些表单控件没有以[]
结尾的名称,因此不是数组。
你不能在字符串上循环。
您应该单独提取提交数据的每个值,并且只循环遍历服务。
问题是,有一个非常真实的可能性,不是所有的项目在你的$_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/>"
?>
尝试将foreach循环包装在if语句中以检查数组是否为数组。例如:
if (is_array($services)) {
foreach ($services as $option) {
// Some code
}
}
虽然我不会太担心。这只是一种更简洁的编写代码的方式。