将复选框值传递给数组?

时间:2014-02-26 22:11:38

标签: php arrays checkbox

我已经设置了一组复选框。它们是动态的,因此复选框的数量将根据使用网站的人而不同。复选框的创建方式如下:

<label for="plabackformat-holder-label">Format</label>
  <div class=" playbackformat-holder-<?php echo $num; ?> playbackformat-holder">
    <div class="playback-format-radio-buttons">

    <label for="notset-<?php echo $num; ?>">
        <input type="checkbox" class="playbackformat-holder-radiobutton" value="notset" name="playback_format[<?php echo $second_num; ?>]" id="notset-<?php echo $num; ?>" <?php if($field['playback_format'] == 'notset') { echo 'checked'; } ?>>None
    </label>

    <label for="dvd-<?php echo $num; ?>">
        <input type="checkbox" class="playbackformat-holder-radiobutton" value="dvd" name="playback_format[<?php echo $second_num; ?>]" id="dvd-<?php echo $num; ?>" <?php if($field['playback_format'] == 'dvd') { echo 'checked'; } ?>>DVD
    </label>

    <label for="bluray-<?php echo $num; ?>">
       <input type="checkbox" class="playbackformat-holder-radiobutton" value="bluray" name="playback_format[<?php echo $second_num; ?>]" id="bluray-<?php echo $num; ?>" <?php if($field['playback_format'] == 'bluray') { echo 'checked'; } ?>>Bluray
    </label>    

    <label for="3d-<?php echo $num; ?>">
       <input type="checkbox" class="playbackformat-holder-radiobutton" value="3d" name="playback_format[<?php echo $second_num; ?>]" id="3d-<?php echo $num; ?>" <?php if($field['playback_format'] == '3d') { echo 'checked'; } ?>>3d
    </label><br />

 </div>                     
</div>

我的保存功能是:

$new = array();

for ( $i = 0; $i < $count; $i++ ) {

    $new[$i]['playback_format'] = $playbackFormats[$i];

    }

我一直在阅读这个问题,这似乎是因为我的输入字段不包含唯一的名称。我正在尝试将数据存储到数组中,因此它将是['playback_format'] => dvd,3d,bluray或类似的东西。

现在它只存储最后一个检查值。有没有办法可以使用forloop或其他东西迭代检查值并将它们推入我的数组?

3 个答案:

答案 0 :(得分:1)

什么是$second_num?它是否需要成为输入名称的一部分?

如果你这样做,你可以让PHP将提交的值识别为数组:

<input name="playback_format[<?php echo $second_num; ?>][]">

如果您不需要$second_num作为名称的一部分,只需:

<input name="playback_format[]">

$_POST['playback_format']将是一个包含所有选定选项的数组。

PHP docs中有一节专门针对此行为。

答案 1 :(得分:1)

您可以在每个$second_num html标记中删除“<input name="playback_format[]"/>”。一旦提交表单,这将把所有内容都放入一个数组中。您可以通过将此行添加到页面作为测试来检查。

<?php print_r($_REQUEST['playback_format']); ?>

通常,如果不需要循环,您需要避免任何循环。

希望有助于你正在做的事情。

答案 2 :(得分:1)

复选框在您的示例中具有相同的名称。将其命名为:

<label for="plabackformat-holder-label">Format</label>
  <div class=" playbackformat-holder-<?php echo $num; ?> playbackformat-holder">
    <div class="playback-format-radio-buttons">

    <label for="notset-<?php echo $num; ?>">
        <input type="checkbox" class="playbackformat-holder-radiobutton" value="notset" name="playback_format_notset" id="notset-<?php echo $num; ?>" <?php if($field['playback_format_notset'] == 'notset') { echo 'checked'; } ?>>None
    </label>

    <label for="dvd-<?php echo $num; ?>">
        <input type="checkbox" class="playbackformat-holder-radiobutton" value="dvd" name="playback_format_dvd" id="dvd-<?php echo $num; ?>" <?php if($field['playback_format_dvd'] == 'dvd') { echo 'checked'; } ?>>DVD
    </label>

    <label for="bluray-<?php echo $num; ?>">
       <input type="checkbox" class="playbackformat-holder-radiobutton" value="bluray" name="playback_format_bluray" id="bluray-<?php echo $num; ?>" <?php if($field['playback_format_bluray'] == 'bluray') { echo 'checked'; } ?>>Bluray
    </label>    

    <label for="3d-<?php echo $num; ?>">
       <input type="checkbox" class="playbackformat-holder-radiobutton" value="3d" name="playback_format_3d" id="3d-<?php echo $num; ?>" <?php if($field['playback_format_3d'] == '3d') { echo 'checked'; } ?>>3d
    </label><br />

 </div>                     
</div>

在PHP中试试这个:

//WHen you want to see what is send in Post :
var_dump($_POST);

//So, for get result :
$tab = array();
foreach($_POST as $key =>$value){
    $tab[$key] = $value;
    //Display it
    echo $key . "=" . $value;
}