【问题标题】:PHP select filterPHP选择过滤器
【发布时间】:2016-05-04 20:06:23
【问题描述】:

我有一个包含人员列表的页面。

现在我想用下拉选择过滤它们。

这是我的代码:

<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 过滤器。

这一行: echo '&lt;option selected="selected" value="All"&gt;'. $filterTitle . '&lt;/option&gt;';

是一个附加选项,值为“All”,其他选项来自“specialties”表。

第二部分是从“团队”表中提取的内容。 我将“专业”表中的类别与“团队”表相关联。

在我的自定义 CMS 的管理区域中,一切正常,当我更改“专业”类别时,它成功保存在数据库中。

目前页面显示所有字段,但我没有过滤功能。

如何过滤内容?

我知道我必须使用:

if(isset($_POST['submit'])) {
   //the code inside
}

但我应该使用什么查询来进行此类过滤?

编辑: 通过过滤我的意思是,当我有列表内容并且从顶部开始时,我有一个选择下拉和搜索按钮。因此,如果我选择让我们说选项中的第一个值并单击提交,它应该只显示内部具有第一个类别值的内容。

在“团队”表中,我有很多字段,这些是连接:

id
specialties_bg
specialties_en

这是“专业”表

id
title_bg
title_en

Title_bg 和 title_en 具有所有选项值,id 是连接。

该网站是多语言的,这就是为什么我有两个不同语言的字段。

【问题讨论】:

  • 过滤是什么意思能具体解释一下你要过滤什么吗???
  • $id = $row['id']; 时,将值设置为 $search 而不是 $id
  • @Umair Shah Yousafzai 我的意思是当你有一个列表页面时,有一个搜索下拉菜单,当你从下拉菜单中选择一个并单击提交时,它应该过滤内容。它就像一个搜索引擎,但不是搜索词,而是选择值。
  • @user2519032 :啊哈......你的意思是你的内容存储在哪里?我的意思是在一个数组中或者从哪里来???
  • 内容存储在数据库中的“团队”表中。在该表上,有一个与“Specialties”表相关的“specialty”字段及其 ID,我正在建立联系。

标签: php mysql filter


【解决方案1】:

检查以下代码。如果表单已提交,则向查询添加条件。

$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 注入。

【讨论】:

  • 我刚刚试过你的例子。这行$query.= ' WHERE specialties_en="'.trim($_POST['specialties']).'"; 有语法错误。另外,您确定可以在 MySQL 查询中使用 PHP 函数吗?
  • 是的,我们可以将 php 与 mysql 一起使用。检查编辑的答案。
  • 我已经使用了您的代码,但是当我选择一些选择选项值并单击提交按钮后它没有做任何事情。它没有任何语法错误。我想我错过了一些东西。另外,当我单击提交按钮时,下拉选择将返回默认值“全部”。这是该页面完整代码的链接:paste.ofcode.org/bKCGiRhgFqMViSyASx2m5w
  • 您的代码不正确。我已编辑。检查这个paste.ofcode.org/pQBhSM7hixHJ6wptGhes2z
  • 非常感谢。它工作得很好!我检查了新代码,也可以看到其他更改。感谢您,我学到了一些非常有价值的东西!
【解决方案2】:

从数据库中获取特定数据:

为了从表中获取所有数据,您可以简单地使用SELECT Query in MySQL as 来做到这一点:

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'];
   }
}
?>

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2011-10-27
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多