PHP内爆功能无法正常工作

时间:2013-11-22 20:56:10

标签: php arrays checkbox implode

所以我尝试使用PHP通过电子邮件发送表单的结果。在我的表格中,我有一堆复选框。当选中组中的至少一个复选框时,以下脚本有效。如果未选中任何复选框,则会收到以下错误:

警告: Implode()[function.implode]:{xxx}数组

上{name of php doc}传递的无效增量

以下是我正在使用的代码示例:

 <?php
 $data = array();
   foreach ($_POST as $key => $value) {
      $data[] = $value;   
   }

 if(!$data[14]) //$data[14] is an array of checkbox values
    {echo 'No User Selection';}
 else
    {echo implode(" | ", $data[14]);} //This is where the error occurs 
 ?>

HTML代码

 <label for="b0" class="left">Item 1</label>
 <input type="checkbox" name="b[0]" id="b0" value="Item 1"/>
 <label for="b1" class="left">Item 2</label>
 <input type="checkbox" name="b[1]" id="b1" value="Item 2"/>
 <label for="b2" class="left">Item 3</label>
 <input type="checkbox" name="b[2]" id="b2" value="Item 3"/>
 ect....

有没有人知道我为什么会收到这个错误?

3 个答案:

答案 0 :(得分:2)

确保变量a)已设置且b)为数组。

$data = array();
foreach ($_POST as $key => $value) {
    $data[] = $value;   
}

if ( !isset($data[14]) || !is_array($data[14]) ) {
     echo 'No User Selection';
} else {
    echo implode(" | ", $data[14]);
}

始终使用isset()正确检查变量,除非您喜欢巨大的错误日志!我还建议使用$ _POST键作为$ data的键,这样当你想要查找特定的$ _POST项时,生活会更加轻松。

答案 1 :(得分:0)

如果未选中该复选框,则不会将其发送到服务器。 我建议你做这样的事情:

<label for="b0" class="left">Item 1</label>
<input type="hidden" name="b[0]" value=""/>
<input type="checkbox" name="b[0]" id="b0" value="Item 1"/>
<label for="b1" class="left">Item 2</label>
<input type="hidden" name="b[1]" value=""/>
<input type="checkbox" name="b[1]" id="b1" value="Item 2"/>
<label for="b2" class="left">Item 3</label>
<input type="hidden" name="b[2]" value=""/>
<input type="checkbox" name="b[2]" id="b2" value="Item 3"/>

这样,您确定始终发送b [0],b [1]等

答案 2 :(得分:0)

您通过创建数据阵列自己造成问题。直接进入POST阵列。其他一切都使问题过于复杂。

<?php

     if(!isset ($_POST['b']) || !is_array($_POST['b'])) {
       echo 'No User Selection';
     } else {
       echo implode(" | ", $_POST['b']);
     }

?>

此外,如果您的表单内容略有变化,或者您想重新排序字段,那么您的幻数14将不再有效。

除非你改变它,否则你的代码将是令人难以置信的脆弱。