Php 如何从不同的搜索字段输出信息?
我有以下带有三个搜索字段的表单。 两个文本输入(关键字和距离)和一个下拉列表(运输) 我的搜索功能使用关键字文本输入,但不使用其他两个字段。我可以看到,当我“echo”时,数据正在输出,但它实际上不会搜索这些术语Php 如何从不同的搜索字段输出信息?,php,mysql,forms,search,Php,Mysql,Forms,Search,我有以下带有三个搜索字段的表单。 两个文本输入(关键字和距离)和一个下拉列表(运输) 我的搜索功能使用关键字文本输入,但不使用其他两个字段。我可以看到,当我“echo”时,数据正在输出,但它实际上不会搜索这些术语 <form action="searchresults.php" method="POST"> <h3> Keyword </h3> <input type="text" name="keyword-search">
<form action="searchresults.php" method="POST">
<h3> Keyword </h3>
<input type="text" name="keyword-search">
<h3> Primary Function </h3>
<?php
$sql = "SELECT pf_id, primary_function FROM primary_function ORDER BY pf_id;";
$result = mysqli_query($conn, $sql);
echo "<select name='function-search' id = 'function-search'>";
echo '<option value=""></option>';
while ($row = mysqli_fetch_assoc($result)) {
unset($id, $name);
$id = $row['pf_id'];
$name = $row['primary_function'];
echo '<option value="'.$name.'">'.$name.'</option>';
}
echo "</select>";
?>
<h3> Distance </h3>
within <input type="text" name="distance-search"> miles of PCC
<br>
<button type="submit" name="submit-search">Search</button>
</form>
关键词
主要功能
距离
在PCC的英里范围内
搜寻
以下是将数据推送到的位置
<?php
if (isset($_POST['submit-search'])) {
$functionSearch = mysqli_real_escape_string($conn, $_POST['function-search']);
$keySearch = mysqli_real_escape_string($conn, $_POST['keyword-search']);
$distanceSearch = mysqli_real_escape_string($conn, $_POST['distance-search']);
$sql = "SELECT * FROM resource WHERE resource_name LIKE '%$keySearch%'
OR description LIKE '%$keySearch%' OR username LIKE '%$keySearch%'
OR primary_function LIKE '%$keySearch%'
OR distance_in_miles LIKE '%$keySearch%'
ORDER BY distance_in_miles";
$result = mysqli_query($conn, $sql);
$queryResult = mysqli_num_rows($result);
// Checking for search result page errors
//echo $result;
echo $queryResult;
// echo $functionSearch;
if ($queryResult > 0){
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>". $row['resource_id'] ."</td><td>". $row['resource_name'] ."</td><td>". $row['username'] ."</td><td>". "$" .$row['cost_in_usd'] ."/". $row['cost_per'] ."</td><td>". $row['distance_in_miles'] ."</td></tr>";
} echo "</table>";
} else {
echo "<br>No results matching your search";
}
}
?>
旁注:此注释太长 我将删除
foreach
循环,并使用单独的变量
现在,您的foreach
将在每个类似的查询中显示类似于search1search2search3
的内容,这本身不会引发错误,只是(可能)不会匹配任何内容
下面是一个示例,用您选择的标准/帖子替换$search\x
:
$sql = "SELECT * FROM resource WHERE resource_name LIKE '%$search_1%'
OR description LIKE '%$search_2%' OR username LIKE '%$search_3%'
OR primary_function LIKE '%$search_4%'
OR distance_in_miles LIKE '%$search_5%'
ORDER BY distance_in_miles";
$result = mysqli_query($conn, $sql);
if(!$result){
// handle no results/failure here
}
您可能还需要在两端、开头和/或结尾使用一个%
旁注:如注释所述,任何类型的循环功能均应使用适当的支撑
顺便说一句,我建议你用事先准备好的声明来代替real\u escape\u string()
foreach循环中没有弯曲的括号,因此它只循环sql分配。此处似乎缺少代码。主要是为了一种形式。谢谢。查看启用错误报告和在查询上使用mysqli\u error($conn)
是否有任何问题,同时查看HTML源代码,该源代码还将显示与查询一起使用的表单中的内容。您也可以回显您的查询以查看传入(或不传入)的内容。好的,这就是我认为的问题所在,我会尝试删除您传入变量的数组,并指定不同的变量。@How thegodschill我在下面的“答案”区域为您发布了一些内容。评论时间太长了。我希望这有帮助。我感谢你的帮助。所以我调整了代码。此时,我只能让“%keySearch%”对$sql函数中的所有五个变量正常工作。如果我添加$functionSearch或$distanceSearch,函数仍然无法在搜索中识别它们。@howthegodschill(welcome)-Hmm…,我很难理解为什么会这样。查询(或输入)或记录值中可能引入了空格,或者区分大小写,或者可能是两者的组合。如果输入过程中引入了空格,请尝试使用trim()
。如果这些都不是问题,那么我会感到困惑(哈哈)。还可以尝试使用答案中提到的%
。@how godschill另一件事可能是某些值与(某些)列类型不匹配。其中一列的距离表示整数而不是字符串。