实现PHP搜索过滤器表单的设计模式

用户名

我正在用PHP编写的网站上的搜索功能中实现过滤器。

我的目标是使其易于管理,因为在不久的将来该项目的规模将大大增加。现在,搜索页面上有一个带有一些输入字段的php,php通过检查表单按钮的名称是否在$ _POST数组内来检查表单是否已提交。在此搜索页面的右侧,有一个实际搜索结果的列表,一个foreach循环的输出在打印到屏幕上的项目列表上。为了清楚起见,我已经编写了一些代码来解释它的作用,并且还展示了我尝试提出的自己的方法:

    <?php
    $arrayToDisplay = array(
            array("id"=>0,"name"=>"first","lastname"=>"last"),
            array("id"=>1,"name"=>"first","lastname"=>"last"),
    );

    $acceptedName = "";


    if(isset($_POST['buttonName'])) {
        if(isset($_POST['name'])) {
            $acceptedName = sanitize($_POST['name']);
        }
    }
?>

<form>
<input type="text" name="name">
<input type="submit" name="buttonName">
</form>

<?php


    foreach($arrayToDisplay as $person) {
            if(exists($acceptedName) && $acceptedName != "") {
                if($person["name" == $acceptedname) {
                    echo $person["id"]."  ".$person["name"];
                }       
            }
            else {
                echo $person["id"]."  ".$person["name"];
            }

    }
?>

这可以处理一个值,并按名称过滤。但是最终这些人员对象将具有近50个属性,并且搜索过滤器不仅必须能够按名称过滤列表,而且还必须能够过滤所有人员属性。该解决方案是无法维持的。

是否存在现有的设计模式,可以在这种情况下使用?

水loo

有很多解决此问题的方法,有人认为您可以/应该键入每个表单元素及其对应的处理程序,因为如果要使用文本框,选择列表,单选按钮等,这样将更易于维护。 ,您提到的只是使用文本框,因此这是使用单个数组驱动整个应用程序的方法。

  • 您没有提到您是否打算使用SQL来驱动搜索,所以我假设您将使用它。
  • 您可以使用单个数组来驱动HTML表单和由传入值生成的查询。

<?php

// This array will drive your form and your query.
$columns = [
    'firstname',
    'lastname',
    'email',
    'address_1',
    'address_2',
    'city'
];

// The form was submitted.
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Match posted data to the `$columns` array and filter out any empty values.
    $postedData = array_filter(array_intersect_key($_POST, array_flip($columns)));

    // We have at least 1 search criteria to use.
    if (!empty($postedData)) {

        // Generate a list of columns for a WHERE clause. Ex. [`address_1 LIKE ?`, `name LIKE ?`]
        $terms = array_map(function ($val) {
            return "$val LIKE ? ";
        }, array_keys($postedData));

        // Generate a list of values wrapped in percent signs. Ex. [`123 King St.`, `%tony%`]
        $values = array_map(function ($val) {
            return "%$val%";
        }, $postedData);

        // Change this to `AND ` if needed.
        $query = 'SELECT * FROM table WHERE ' . implode('OR ', $terms);

        // Just showing you what the generated query and data looks like.
        var_dump([
            $query,
            array_values($values)
        ]);

        // Finally, use them to drive your query.
        // $sql = $connection->prepare($query);
        // $sql->execute(array_values($values));
    }
}

?>

<form method="post">
    <?php foreach ($columns as $column): ?>
        <label>
            <input type="text" name="<?php echo $column; ?>" placeholder="<?php echo $column; ?>">
        </label>

        <br>
    <?php endforeach; ?>

    <input type="submit" value="Search">
</form>

样本输出

array (size=2)
  0 => string 'SELECT * FROM table WHERE firstname LIKE ? OR email LIKE ? ' (length=59)
  1 => 
    array (size=2)
      0 => string '%Tony%' (length=6)
      1 => string '%[email protected]%' (length=16)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在php中实现多个搜索过滤器

来自分类Dev

我如何实现AND搜索过滤器

来自分类Dev

PHP Codeigniter 高级搜索过滤器

来自分类Dev

如何设计RESTful高级搜索/过滤器

来自分类Dev

正确实施过滤器(标准)设计模式

来自分类Dev

如何使用 Spring + Hibernate + MySQL 实现搜索过滤器?

来自分类Dev

多选搜索过滤器

来自分类Dev

错误的搜索过滤器

来自分类Dev

如何使用PHP和MySQL创建搜索“过滤器”

来自分类Dev

php / mysql搜索表,过滤器数量未知

来自分类Dev

如何为php中的搜索创建过滤器

来自分类Dev

php中多维数组中的搜索过滤器

来自分类Dev

在php中具有特定模式的过滤器数组

来自分类Dev

搜索过滤器中具有通配符模式的嵌套组的 Active Directory 搜索查询

来自分类Dev

面向对象的搜索历史记录和过滤器设计

来自分类Dev

设计模式,用于编写用于使用node.js上传图像的过滤器列表

来自分类Dev

在Java中封装自定义过滤器的设计模式

来自分类Dev

设计模式,用于编写用于使用node.js上传图像的过滤器列表

来自分类Dev

如何使用lucene.net使用多个过滤器实现搜索

来自分类Dev

为从服务器检索为JSON的数据实现搜索过滤器

来自分类Dev

通过控制器之间共享范围实现搜索过滤器结果的问题

来自分类Dev

android 中搜索过滤器屏幕的最佳 UX 模式是什么?

来自分类Dev

如何用Typescript实现过滤器?

来自分类Dev

如何实现匹配的过滤器

来自分类Dev

在Matlab中实现过滤器

来自分类Dev

Weka StringToWordVector过滤器-Java实现

来自分类Dev

Sobel过滤器的Scala实现

来自分类Dev

如何实现Room LiveData过滤器

来自分类Dev

懒惰过滤器在Clojure中的实现

Related 相关文章

热门标签

归档