首先说一下语法
前端要将input框的名字设置统一,然后后面跟一个 "[]"数组的标记;
后台接收数据将数据处理用的语法是input("timeid/a"); 这样就可以将前端传过来的数组进行处理;
我用的是layui框架可能有些区别
效果: 这是数据库存储选中后的效果
前端代码:
<!-- 编辑页面 -->
<div class="layui-form-item">
<label class="layui-form-label">时间区间:</label>
<div class="layui-input-block">
{foreach name="all" item="v" empty="$empty"}
<input type="checkbox" name="timeid[]" value="{$v.id}" title="{$v.begin} ~ {$v.finish}" {if $v.pitch
eq 1}checked {/if}><br>
{/foreach}
</div>
</div>
控制器:
//景点/更改
public function up()
{
$all = Db::name( 'time' )->order( 'begin' )->select(); //查找图二
$scenic = Db::name( 'scenic' )->where( 'id', $up )->find(); //解析图一中的timeid
$timeid = explode( ',', $scenic['timeid'] );//将字符串转换为数组1,2,3,4 转数组
//-----
foreach ( $all as $key => $value ) {
$all[$key]['pitch'] = 0;
//当pitch为0的时候我们就不默认选中
for ( $i = 0; $i <count( $timeid ) ; $i++ ) {
if ( $timeid[$i] == $value['id'] ) {
$all[$key]['pitch'] = 1;
//当pitch为1的时候我就默认选上
}
}
}
$this->assign( 'scenic', $scenic );
$this->assign( 'all', $all );
return $this->fetch( 'add' );
}
时间段id: (图一)
对应的时间表: (图二)