第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

實(shí)現(xiàn)PHP搜索過濾表單的設(shè)計(jì)模式

實(shí)現(xiàn)PHP搜索過濾表單的設(shè)計(jì)模式

PHP
森林海 2022-05-27 10:22:42
我正在用 PHP 編寫的網(wǎng)站上的搜索功能中實(shí)現(xiàn)過濾器。我的目標(biāo)是保持這種可管理性,因?yàn)樵擁?xiàng)目的規(guī)模將在未來一段時(shí)間內(nèi)大幅增長?,F(xiàn)在搜索頁面有一些輸入字段,php 通過檢查表單按鈕的名稱是否在 $_POST 數(shù)組中來檢查表單是否已提交。在這個(gè)搜索頁面的右側(cè),有一個(gè)實(shí)際搜索結(jié)果的列表,它是一個(gè) foreach 循環(huán)在打印到屏幕上的項(xiàng)目列表上的輸出。為了更清楚,我編寫了一些代碼來解釋它的作用,并展示了我自己想出的東西:    <?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"];            }    }?>這可以對(duì)一個(gè)值起作用,按名稱過濾。但最終這些人員對(duì)象將具有近 50 個(gè)屬性,搜索過濾器不僅要能夠按名稱過濾列表,還必須能夠過濾各種人員屬性。這個(gè)解決方案是不可維護(hù)的。是否存在一種現(xiàn)有的設(shè)計(jì)模式,可以在這種情況下使用?
查看完整描述

1 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

有很多方法可以解決這個(gè)問題,有些人認(rèn)為您可以/應(yīng)該輸入每個(gè)表單元素及其相應(yīng)的處理程序,因?yàn)槿绻胧褂梦谋究?、選擇列表、單選按鈕等,它會(huì)更容易維護(hù)。也就是說,您提到簡單地使用文本框,所以這里有一種使用單個(gè)數(shù)組來驅(qū)動(dòng)整個(gè)應(yīng)用程序的方法。

  • 你沒有提到你是否打算使用 SQL 來驅(qū)動(dòng)你的搜索,所以我假設(shè)你會(huì)使用它。

  • 您可以使用單個(gè)數(shù)組來驅(qū)動(dòng) 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 '%tony@email.com%' (length=16)


查看完整回答
反對(duì) 回復(fù) 2022-05-27
  • 1 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)