我想要一个搜索表单来搜索我的整个数据库。搜索表单应由多个输入和选择标签组成。
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"> search1 </label></td>
<td><input type="text" name="search1" size="25"></td>
</th>
<th>
<td><label class="wmfg_label_a" for="chk_search2"> search2 </label></td>
<td><input type="text" name="search2" size="25"></td>
</th>
<th>
<td><label class="wmfg_label_a" for="chk_search3"> Status </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"> search4 </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"> search </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/