【问题标题】:Checkbox property lost after sort is applied应用排序后复选框属性丢失
【发布时间】:2014-04-05 16:46:54
【问题描述】:

我正在开发一个网站,该网站显示从数据库中读取的一些数据。在这个数据上,我想实现排序和过滤选项。 该网页的特点是:

  • 每次应用过滤器时,都会再次加载页面,在其中构建查询并再次从数据库所在的服务器检索值。
  • 显示过滤结果后,复选框的属性将被保留。

我无法实现的功能是:

  • 显示结果后,我想根据用户输入对其进行排序。但是,我面临的问题是,每次用户在选择排序单选按钮后单击“应用”时,复选框的属性都会丢失。因此,再次构建的查询无法识别过滤器选项。

这里是代码。我正在附加过滤器和排序 div。周围还有很多事情发生,例如查询构建,但我觉得问题根源于以下代码。我是 php 和 html 的新手,还在学习网页设计的基础知识。

<div style="float: left;margin-left: -175px;" class="box2">
        <h2>Filter by :</h2>
    <form id="ContactForm" name="filter_form" action="<?php echo $_SERVER['PHP_SELF'];?>" method ="post">
        <h3>Location</h3>
        <?php
            $query = "Select DISTINCT LOCATION from venue_list";
            $result = mysqli_query($con,$query);
            ?>
            <ul>
            <?php
                while($row = mysqli_fetch_array($result))
                {
                    $location = $row['LOCATION'];
                ?>
                <li>
                    <input type="checkbox" id="f1" name="location[]" value="<?php echo $location?>" <?php if (isset($_POST['location'])){echo (in_array($location,$_POST['location']) ? 'checked' : '');}?>/>
                    <label for="f1"><?php echo $location?></label>
                </li>
                <?php
                }
            ?>
            </ul>
        <br>
        <h3>Party Type</h3>
        <?php
            $query = "Select DISTINCT PARTY_TYPE from venue_list";
            $result = mysqli_query($con,$query);
            ?>
            <ul>
            <?php
                while($row = mysqli_fetch_array($result))
                {
                    $party_type = $row['PARTY_TYPE'];
                ?>
                <li>
                    <input type="checkbox" id="f2" name="party_type[]" value="<?php echo $party_type?>" <?php if (isset($_POST['party_type'])){echo (in_array($party_type,$_POST['party_type']) ? 'checked' : '');}?>/>
                    <label for="f2"><?php echo $party_type?></label>
                </li>
                <?php
                }
            ?>
            </ul>
        <br><h3>Genre</h3>
        <?php
            $query = "Select DISTINCT GENRE from venue_list";
            $result = mysqli_query($con,$query);
            ?>
            <ul>
            <?php
                while($row = mysqli_fetch_array($result))
                {
                    $genre = $row['GENRE'];
                ?>
                <li>
                    <input type="checkbox" id="f3" name="genre[]" value="<?php echo $genre?>" <?php if (isset($_POST['genre'])){echo (in_array($genre,$_POST['genre']) ? 'checked' : '');}?>/>
                    <label for="f3"><?php echo $genre?></label>
                </li>
                <?php
                }
            ?>
            </ul>
        <br>
        <h3>Happy Hours</h3>
        <?php
            $query = "Select DISTINCT HAPPY_HOURS from venue_list where HAPPY_HOURS like '%M%'";
            $result = mysqli_query($con,$query);
            ?>
            <ul>
            <?php
                while($row = mysqli_fetch_array($result))
                {
                    $happy_hours = $row['HAPPY_HOURS'];
                ?>
                <li>
                    <input type="checkbox" id="f4" name="happy_hours[]" value="<?php echo $happy_hours?>" <?php if (isset($_POST['happy_hours'])){echo (in_array($happy_hours,$_POST['happy_hours']) ? 'checked' : '');}?>/>
                    <label for="f4"><?php echo $happy_hours?></label>
                </li>
                <?php
                }
            ?>
            </ul>
        <br>
        <h3>Outdoor/Rooftop</h3>
        <?php
            $query = "Select DISTINCT OUTDOOR_ROOFTOP from venue_list";
            $result = mysqli_query($con,$query);
            ?>
            <ul>
            <?php
                $i=0;
                while($row = mysqli_fetch_array($result))
                {
                    $outdoor_rooftop = $row['OUTDOOR_ROOFTOP'];
                ?>
                <li>
                    <input type="checkbox" id="f5" name="outdoor_rooftop[]" value="<?php echo $outdoor_rooftop?>" <?php if (isset($_POST['outdoor_rooftop'])){echo (in_array($location,$_POST['outdoor_rooftop']) ? 'checked' : '');}?>/>
                    <label for="f5"><?php echo $outdoor_rooftop?></label>
                </li>
                <?php
                $i=$i+1;
                }
            ?>
            </ul>
        <br><br><br>
        <input name="filter_button" type="submit"  value="Apply"  id="filter_button"  class="button"/>
    </form>
</div>

<div style="float: right;margin-right: -100px;" class="box2">
    <h2>Sort by :</h2>
    <form id="ContactForm" name="sort_form" action="<?php echo $_SERVER['PHP_SELF'];?>" method ="post">
        <input type="radio" id="s1" name="sort" value="Name" <?php if (isset($_POST['sort'])){echo 'checked';}?>/>
        <label for="f1"><?php echo 'Name'?></label>
        <input name="sort_button" type="submit"  value="Apply"  id="sort_button"  class="button"/>
    </form>
</div>

奇怪的是,单选按钮的属性被保留,但当单击“排序”窗格中的应用时,复选框的属性会丢失。急切地期待问题的解决方案。

【问题讨论】:

  • 正如您所说,您是网页设计的新手,有一个观察结果:为了输出一个表单而对数据库进行 5 次查询很多,您应该尽可能少地调用数据库,特别是如果您一直在调用同一张桌子。在您的情况下,我会制定一个更好的 sql 查询,将信息放入 1 个数组中,并在 php 中过滤/排序数组值,这样会更快,更容易修改
  • @aleation 感谢您的提示!现在将开始工作。

标签: php html checkbox radio-button


【解决方案1】:

你使用了两种不同的形式,所以

当您提交Sort 表单时,它只会发布您的radio name="sort"submit button name="sort_button"

为什么单选按钮的属性被保留,而复选框的属性却丢失了。

使用单一形式保留复选框的属性。

【讨论】:

  • 谢谢。如果我将表单元素分开但名称和 ID 相同,这还不够吗?我正在这样做,但它不起作用。 :(
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多