我有一个包含人员列表的页面。
现在我想用下拉选择来过滤它们。
这是我的代码:
<main>
<div class="wrapper">
<div class="team-list">
<h3><?php echo $teamTitle; ?></h3>
<div class="filter">
<label for="filter"><?php echo $specialtiesTitle; ?></label>
<form action="" method="post">
<div class="form-item">
<select name="specialties">
<?php
$query = "SELECT * FROM specialties";
$result = mysqli_query($connection, $query);
echo '<option selected="selected" value="All">'. $filterTitle . '</option>';
while($row = mysqli_fetch_assoc($result)) {
$id = $row['id'];
$title = $row['title_'.$lang];
echo '<option value="' . $id . '">' . $title . '</option>';
}
?>
</select>
</div>
<div class="form-item">
<input class="form-submit" type="submit" name="submit" value="<?php echo $filterSubmit; ?>">
</div>
</form>
</div>
<div class="content">
<?php
$query = "SELECT * FROM team";
$result = mysqli_query($connection, $query);
while($row = mysqli_fetch_assoc($result)) {
$id = $row['id'];
$image = $row['image'];
$title = $row['title_'.$lang];
echo '<div class="row">';
echo '<div class="image"><img src="/uploads/' . $image . '"></div>';
echo '<a class="title" href="/team-view?id=' . $id . '">' . $title . '</a>';
echo '<a class="more" href="/team-view?id=' . $id . '">' . $teamMore . '</a>';
echo '</div>';
}
?>
</div>
</div>
</div>
</main>
从代码中可以看到,第一部分有一个div过滤器,用于接收来自数据库的select。
此行:echo '<option selected="selected" value="All">'. $filterTitle . '</option>';
是一个附加选项,值为"全部",其他选项来自"专业"表。
第二部分是从"团队"表中提取的内容。我将"专业"表中的类别与"团队"表联系起来。
在我的自定义CMS的管理区域,一切都在工作,当我更改"Specialties"类别时,它会成功保存在数据库中。
现在页面显示所有字段,但我没有过滤功能。
如何过滤内容?
我知道我必须使用:
if(isset($_POST['submit'])) {
//the code inside
}
但是我应该使用什么查询进行这种筛选呢?
编辑:我所说的过滤是指,当我有列表内容时,从顶部我有一个选择下拉列表和搜索按钮。因此,如果我从选项中选择第一个值,然后单击提交,它应该只显示里面有第一个类别值的内容。
在表格"团队"中,我有许多字段,这些是连接:
id
specialties_bg
specialties_en
这是"Specialties"表格
id
title_bg
title_en
Title_bg和Title_en具有所有选项值,id是连接。
这个网站是多语言的,这就是为什么我有两个不同语言的字段。
检查以下代码。如果表单已提交,则向查询添加条件。
$query = "SELECT * FROM team";
// declare the variable
// check if the form is submitted and have a valid search value
if(isset($_POST['submit']) && (trim($_POST['specialties'])!='') && (trim($_POST['specialties'])!='ALL')) {
//add the condition
$query.= " WHERE specialties_en='".trim($_POST['specialties'])."'";
}
您可以根据具有OR条件的语言修改条件。
始终检查sql注入的用户输入。
从数据库获取特定数据:
为了从表中获取所有数据,只需在MySQL
中使用SELECT
查询即可:
SELECT * FROM table;
但现在,您想要过滤整个数据,只需从数据库中获取特定的数据,因此您必须具有唯一的数据,以便将预期数据与其余数据区分开来。
两种方法:
1)使用数据库表中的额外字段(列):
您可以通过在表结构中添加一个额外的字段(列)来实现这一点,比如将包含基于记录的值的字段,以便将它们放入基于集体的组中。
例如:
我有一张表,上面有很多球员的记录,现在我添加了一个栏,即作为体育,所以现在我有了一些独特的东西来过滤球员。所以我可以使用下面的SQL SELECT
查询来获得所有这些玩家:
SELECT * FROM players WHERE sport="sport_name";
2)通过PHP过滤数据:
如果你不想从数据库中获得过滤后的数据,那么你可以在PHP中做同样的过程:
例如:
您已经从players
表中提取了整个数据,现在您想对其进行过滤,这样您就可以按照以下方式进行过滤:
<?php
//Assuming that $results contains the whole fetched data from table
for ($i=0;$i<=count($results);$i++) {
if ($results[$i]['sport'] == "cricket") {
// Can target any sport located in your database
//You can pretty much do anything you want..!
echo $result[$i]['player_name'];
}
}
?>