为什么我的代码echo我的post变量,但仍然给我为foreach()警告提供的无效参数


why does my code echo my post variables but still give me Invalid argument supplied for foreach() warnings?

我得到两个警告警告:为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
  }
}

虽然我不会太担心。这只是一种更简洁的编写代码的方式。

相关文章: