Php 应用排序后,复选框属性丢失
我在一个网站上工作,该网站显示一些从数据库读取的数据。在这个数据上,我想实现排序和过滤选项。 该网页的特色包括:Php 应用排序后,复选框属性丢失,php,html,checkbox,radio-button,Php,Html,Checkbox,Radio Button,我在一个网站上工作,该网站显示一些从数据库读取的数据。在这个数据上,我想实现排序和过滤选项。 该网页的特色包括: 每次应用过滤器时,页面都会再次加载,其中它会构建查询并再次从数据库所在的服务器检索值 显示过滤结果后,将保留复选框的属性 我无法实现的功能包括: 显示结果后,我想根据用户输入对其进行排序。但是,我面临的问题是,每次用户在选择排序单选按钮后单击“应用”,复选框的属性都会丢失。因此,再次生成的查询无法识别筛选选项 这是代码。我正在附加filter和sort div。在查询构建等方
- 每次应用过滤器时,页面都会再次加载,其中它会构建查询并再次从数据库所在的服务器检索值
- 显示过滤结果后,将保留复选框的属性
- 显示结果后,我想根据用户输入对其进行排序。但是,我面临的问题是,每次用户在选择排序单选按钮后单击“应用”,复选框的属性都会丢失。因此,再次生成的查询无法识别筛选选项
<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>
筛选依据:
你使用的是两种不同的形式,所以
当您提交Sort
表单时,它只发布您的单选名称=“Sort”
和submit按钮名称=“Sort\u按钮”
为什么单选按钮的属性会保留,但复选框的属性会丢失
使用单一表单来保留chceckbox的属性。正如你所说,你对网页设计还不熟悉,有一个观察:仅仅为了输出表单而对数据库进行5次查询是非常多的,你应该尽可能少地调用数据库,特别是如果你一直在调用同一个表的话。在您的例子中,我将制定一个更好的sql查询,将信息放入1个数组,并在php中对数组值进行过滤/排序,这样会更快、更容易进行查询modify@aleation谢谢你的提示!我现在会处理的,谢谢。如果我将form元素分开,但名称和id相同,这难道不够吗?我正在这样做,但不起作用(