表单过滤器页面冻结问题求助:单列复选框勾选正常,跨列勾选即无响应
问题原因
你的代码存在多处变量名、参数名拼写不匹配的错误,触发PHP运行报错后和你绑定的复选框自动提交逻辑形成死循环,最终导致页面冻结,具体错误如下:
- 遍历变量名不存在:你定义的区域数组是
$sect,但循环写的是foreach($sects as $sect),遍历了未定义的$sects变量;同理你定义的房型数组是$room,但循环写的是foreach($rooms as $room),遍历了未定义的$rooms变量。 - 取值变量名错乱:区域循环内取值用了未定义的
$dept变量,应该用循环当前项$sect;房型循环内取值用了未定义的$role变量,应该用循环当前项$room。 - 参数名不匹配:区域复选框提交的参数名是
sections[],但你in_array判断时写的是$_GET['section'](少了末尾的s);房型复选框提交的参数名是rooms[],但你isset判断时写的是isset($_GET['roles']),和实际参数完全不匹配。
修正后代码
<form class="filters" action=""> <!-- <select name="orderby" id="orderby"> <option value="date"> New To Old </option> <option value="title"> Alphabetical </option> </select> --> <div> <!-- <input type="hidden" name="orderby" value="title" /> <input type="hidden" name="order" value="ASC" /> --> <h4>Sections</h4> <?php $sects = [ // [ 'room' => '000', 'title' => 'All' ], [ 'room' => '1', 'title' => 'Up Stairs' ], [ 'room' => '23', 'title' => 'Down Stairs' ], [ 'room' => '347', 'title' => 'Basement' ], ]; $rooms = [ // [ "value" => 'All' , "label" => 'All' ], [ "value" => 'Bathroom' , "label" => 'bathroom' ], [ "value" => 'Closet' , "label" => 'closet' ], [ "value" => 'Supplies', "label" => 'supplies' ], ]; foreach($sects as $sect) : ?> <label> <input class="section-checkbox" <?php echo checked( isset($_GET['sections']) && in_array($sect["room"], $_GET['sections']) ); ?> type="checkbox" name="sections[]" value="<?php echo $sect["room"];?>" /> <?php echo $sect["title"];?> </label> <?php endforeach; ?> </div> <div> <h4>Room Types:</h4> <?php foreach($rooms as $room) : ?> <label> <input class="role-checkbox" <?php echo checked( isset($_GET['rooms']) && in_array($room["value"], $_GET['rooms']) ); ?> type="checkbox" name="rooms[]" value="<?php echo $room["value"];?>" /> <?php echo $room["label"];?> </label> <?php endforeach; ?> </div> <hr /> </form>
内容的提问来源于stack exchange,提问作者paulwk
相关产品推荐
相关产品推荐

