【发布时间】: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