php - 使用多个搜索词进行搜索

标签 php html mysql sql

我想要一个搜索表单来搜索我的整个数据库。搜索表单应由多个输入和选择标签组成。

Atm 在提交后向我显示列和行的所有可能的组合。

这里是搜索表单部分:

<div style="width:1420px" class="wmfg_layout_2">
    <form action="xxx.php" method="post">
        <ul class="wmfg_questions">
            <li class="wmfg_q">
            <label class="wmfg_label">Suchkriterien auswählen</label>
                <table class="wmfg_answers">

                    <tr class="wmfg_a">
                    <th>

                        <td><label class="wmfg_label_a" for="chk_search1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td>
                        <td><input type="text" name="search1" size="25"></td>

        </th>
                    <th>

                        <td><label class="wmfg_label_a" for="chk_search2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td>
                        <td><input type="text" name="search2" size="25"></td>

        </th>
        <th>

                    <td><label class="wmfg_label_a" for="chk_search3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td>
                    <td>

                    <select name="search3" size="1">
                    <option disabled selected value> </option>;

            <?php
            foreach($result as $m)
            {

            echo "<option value=\"" . $m['resultID'] . "\">" .$m['result'] . "</option>";

            }
        ?>

        </td>
        </select>

                    </th>

        <th>
                    <td><label class="wmfg_label_a" for="chk_search4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td>
                    <td>

                    <select name="search4" size="1">
                    <option disabled selected value> </option>;

            <?php
            foreach($result2 as $m)
            {

            echo "<option value=\"" . $m['result2ID'] . "\">" .$m['result2'] . "</option>";

            }
        ?>


                    </th>
                    <th>

                    <td><label class="wmfg_label_a" for="chk_search5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;search&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label></td>
                    <td>

                    <select name="search5" size="1">
                    <option disabled selected value> </option>;

            <?php
            foreach($result3 as $m)
            {

            echo "<option value=\"" . $m['resul3ID'] . "\">" .$m['result3'] . "</option>";

            }
        ?>

        </tr>
                    </th>

                    </table>
        </td>
        </select>

                    </th>
                            </li>
                            <li class='wmfg_qEnd'>
                                <input type='submit' name='suche' value='Anfrage senden'>
                            </li>
                        </ul>

                </tr>
    </form>

</div>

总是相同的结果,当我使用例如搜索和搜索1或仅搜索5等并提交时,它向我显示所有列和行组合作为结果,而不是当我搜索关键字时我想要的行 我想我必须分割搜索词并用条件回显它,但不知道如何。 这是php部分代码:

<?php
        $search1=$_POST['search1'];
        $search2=$_POST['search2'];
        $search3=$_POST['search3'];
        $search4=$_POST['search4'];
        $search5=$_POST['search5'];
        $search = $connection->query("SELECT col1, col2, col3, col4, col5, col5, col6, col7, col8 FROM table1, table2, table3
        WHERE table1.col1 LIKE '%".$search1."%'
        OR table1.col2 LIKE '%".$search2."%'
        OR table1.col3 LIKE '".$search3."'
        OR table1.col4 LIKE '".$search4."'
        OR table1.col5 LIKE '".$search5."'");



    $search->execute();
    $result = $search->fetchAll(PDO::FETCH_ASSOC);


    if (isset($_POST['search1'])
        or isset($_POST['search2'])
        or isset($_POST['search3'])
        or isset($_POST['search4'])
        or isset($_POST['search5'])){ 



            foreach ($result as $row2) {
                echo "<tr>";
                echo "<td>".$row2['col1']."</td>";
                echo "<td>".$row2['col2']."</td>";
                echo "<td>".$row2['col3']."</td>";
                echo "<td>".$row2['col4']."</td>";
                echo "<td>".$row2['col5']."</td>";
                echo "<td>".$row2['col6']."</td>";
                echo "<td>".$row2['col7']."</td>";
                echo "<td>".$row2['col8']."</td>";

                echo "</tr>";
            }
        }


    $connection = null;
?>

调用查询的 PHP 代码的第二部分。

这是 table1 的示例表,只是为了便于理解而减少了列数,它具有更多的列和行。

表1

+-------+------+-----------+-----------+----------+
| PK_ID | name | FK_ID_TB2 | FK_ID_TB3 |  status  |
+-------+------+-----------+-----------+----------+
|     1 | TC   |         1 |         1 | on hold  |
|     2 | HTS  |         2 |         2 | finished |
|     3 | HTOL |         3 |         3 | on going |
+-------+------+-----------+-----------+----------+

这是表2

+-------+------------+
| PK2_ID| technology |
+-------+------------+
|     1 | bla        |
|     2 | bli        |
|     3 | blubb      |
+-------+------------+

这里是表3

+-------+------------+
| PK3_ID| assignment |
+-------+------------+
|     1 | assign1    |
|     2 | assign2    |
|     3 | assign3    |
+-------+------------+

我有 5 种过滤器搜索条目的机制 - 2 个输入表单字段和 3 个选择。当我提交时,我想显示符合我输入条件的所有记录。

例如,当我搜索“TC”时,结果应该是:

+-------+------+-----------+-----------+----------+
| PK_ID | name | technology | FK_ID_TB3 |  status  |
+-------+------+-----------+-----------+----------+
|     1 | TC   |        bla |    assign | on hold  |
+-------+------+-----------+-----------+----------+

当我搜索“TC”和“ongoing”时,它应该显示 row1 和 row3 等。

这个问题可以理解吗?谢谢提前的帮助。祝你有美好的一天。

最佳答案

在这里我更新我的答案您可以使用 LOCATE instedof % 并检查下面的空值检查代码:

 if(!isset($_POST['search1']))
   $_POST['search1']='';


   if(!isset($_POST['search2']))
   $_POST['search2']='';


    if($_POST['search1'] == '')
             $search1='';
     else 
             $search1=" LOCATE('".$_POST['search1']."',t1.name)>0 OR "

  if($_POST['search2'] == '' )
             $search2='';
     else 
             $search2=" LOCATE('".$_POST['search2']."',t1.status)>0 OR "



                $search3=$_POST['search3'];
                $search4=$_POST['search4'];




    $connection->query("
    SELECT t1.PK_ID , t1.name , t2.technology, t3.assignment, t1.status FROM table1 t1, table2 t2, table3 t3
            WHERE 
              t1.FK_ID_TB2=t2.PK2_ID 
            AND
               t1.FK_ID_TB2=t3.PK3_ID 
            AND
            (
               ".$search1."
               ".$search2."
             t2.technology = '".$search3."'
            OR t3.assignment = '".$search4."'

            )");

这里的例子取决于你的值(value)观 http://sqlfiddle.com/#!9/027509/1

关于php - 使用多个搜索词进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262775/

相关文章:

php - 用于 API 的 Laravel 中间件身份验证

html - XMLHttpRequest 到 web 服务在 web worker 中不起作用

javascript - Ionic 2 - menuClose On Image Click

mysql - 根据另一列匹配将表中的一列插入到另一列

mysql锁定读取(用于更新和锁定共享模式并不能真正满足我想要的目的)

php - 回显 mysql_num_rows 的所有行

php - 更改 SoapClient 选项

javascript - 鼠标悬停在 jquery 上更改图片时的延迟

mysql - 多线程访问MySQL错误

php - MySQL 错误 1064