首页 > 解决方案 > 为什么我的页面使用表单过滤器冻结

问题描述

我在表单页面上设置了过滤器,导致页面冻结。有两个带有复选框的过滤器。只要我只选择一列中的复选框就可以了。但是,一旦我尝试单击另一个过滤器列中的复选框,页面就会冻结。代码如下。谁能看到我做错了什么?

<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 
            $sect = [
                // [ 'room' => '000', 'title' => 'All' ],
                [ 'room' => '1', 'title' => 'Up Stairs' ],
                [ 'room' => '23', 'title' => 'Down Stairs' ],
                [ 'room' => '347', 'title' => 'Basement' ],
            ];
            
            $room = [
                // [ "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['section']) );
                    
                    ?>
                    type="checkbox" name="sections[]" value="<?php echo $dept["room"];?>" />
                    <?php echo $dept["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['roles']) && in_array($room["value"], $_GET['rooms']) );
                
                ?>
                type="checkbox" name="rooms[]" value="<?php echo $role["value"];?>" />
                <?php echo $role["label"];?>
            </label>
        <?php endforeach; ?>
        </div>
        <hr />


        
        </form>

标签: php

解决方案


对于您的情况,您已经定义了 $sect$room,但是您正在使用:

foreach($sects as $sect) 

foreach($rooms as $room)

相反,您应该使用类似以下的方法来进行迭代:

foreach($sect as $indsect) 

foreach($room as $indroom)

之后,您可以使用 $indsect 和 $indroom 作为数组在迭代期间进一步处理您想要的内容。

因此,结构应该是这样的:

<form class="filters" action="">

<div>
<h4>Sections</h4>
<?php 
            $sect = [
                [ 'room' => '1', 'title' => 'Up Stairs' ],
                [ 'room' => '23', 'title' => 'Down Stairs' ],
                [ 'room' => '347', 'title' => 'Basement' ],
            ];
            
            $room = [
                [ "value" => 'Bathroom'  , "label" => 'bathroom' ],
                [ "value" => 'Closet'    , "label" => 'closet' ],
                [ "value" => 'Supplies', "label" => 'supplies' ],
            ];

foreach($sect as $indsection) : ?>
<?php 
    /// do whatever you want in the iteration, like:
    echo $indsection['room']; 
    echo "<br>";
?>
            
<?php endforeach; ?>
</div>

<div>
<h4>Room Types:</h4>
<?php foreach($room as $indroom) : ?>
            
<?php 
    /// do whatever you want in the iteration, like:
    echo $indroom['value']; 
    echo "<br>";
?>

<?php endforeach; ?>
 
</div>
<br>
<hr />
</form>

推荐阅读