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

时间:2014-05-08 22:10:01

标签: php

我收到两个警告警告:为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/>"

 ?>

3 个答案:

答案 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
  }

}

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