提交空搜索字段时如何停止搜索字段返回所有结果?
Posted
技术标签:
【中文标题】提交空搜索字段时如何停止搜索字段返回所有结果?【英文标题】:How to stop search field returning all results when submitting empty search field? 【发布时间】:2011-12-14 22:20:30 【问题描述】:如果我点击我的搜索字段并在不输入任何文本的情况下提交它,我的数据库中的所有数据都会返回。这是如何停止的,所以什么也没有发生?
查看网站:
weezy.co.uk/newresults.php
谢谢!
詹姆斯
<?php
$conn = mysql_connect("cust-mysql-123-02", "uwee_641290_0001", "La0%-Mr4");
if (!$conn)
echo "Unable to connect to DB: " . mysql_error();
exit;
$search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";
if (!mysql_select_db("weezycouk_641290_db1"))
echo "Unable to select mydbname: " . mysql_error();
exit;
$sql = "SELECT name,lastname,email
FROM test_mysql
WHERE name LIKE '%".$search."%' AND lastname LIKE '%".$searchterm."%'";
$result = mysql_query($sql);
if (!$result)
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
if (mysql_num_rows($result) == 0)
echo "No rows found, nothing to print so am exiting";
exit;
while ($row = mysql_fetch_assoc($result))
echo '<br>';
echo '<br>';
echo '<div class="data1">';
echo $row["name"];
echo '</div>';
echo '<br>';
echo '<div class="data2">';
echo $row["lastname"];
echo '</div>';
echo '<br>';
echo '<div class="data3">';
echo $row["email"];
echo '</div>';
mysql_free_result($result);
?>
【问题讨论】:
@AurelioDeRosa 看看他之前的问题; last one,例如。 @DamienPirsy 所以你是说,一块一块地,我们正在做整个应用程序? :) @AurelioDeRosa 当我浏览问题时,我也有同样的想法! 【参考方案1】:您应该在进行查询之前检查它是否为空:
if(empty($_POST['searchterm']))
//don't search and show an error message
else
//proceed as normal, do the query
否则你最终可能会进行如下查询:
WHERE name LIKE('%%')
这真的很昂贵并且会返回所有数据库行
【讨论】:
【参考方案2】:执行此操作的最佳方法 (imo) 是使用简单的 javascript 检查输入是否为空白。
【讨论】:
您不应该仅仅依靠 javascript 进行验证。它应该用于改善用户体验,但数据应该始终在后端进行验证。 我同意。简单的 Javascript 与 Nicola 的空 if 语句混合使用在这里效果最好。【参考方案3】:使用javascript/Jquery
做一些front end
总是明智的。提示用户输入内容的表单验证。
完成后,您还可以使用以下方法检查后端:
if(isset($_POST['searchterm']))
// search for the results.
else
// do nothing or show proper message
【讨论】:
【参考方案4】:我认为最好的方法是在搜索框为空时禁用客户端的提交按钮。
你可以这样做:
$(document).ready(function()
$('#searchBox').keyup(function()
if($(this).val() == '')
$('#searchButton').attr('disabled', true);
else
$('#searchButton').removeAttr('disabled');
);
);
你的 html 是这样的:
<input type='text' id="searchBox" />
<input type='button' id='searchButton' value='search' disabled/>
确保按照 Nicola 的指示在服务器端进行验证。
【讨论】:
【参考方案5】:我在上面的代码中遇到了一些问题。因此,上述代码的以下改进版本可以正常工作:
<form action="searchengine.php" method="POST">
<input type="text" id = "searchbox" name="searchterm" placeholder="Search here">
<input type="submit" id = "searchbutton" value="Search" style="display:none;">
</center>
<script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
$('#searchbox').keyup(function()
if($(this).val() == '')
$('#searchbutton').hide();
else
$('#searchbutton').show();
);
);
</script>
【讨论】:
以上是关于提交空搜索字段时如何停止搜索字段返回所有结果?的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose .find() 通过枚举字段搜索时返回一个空数组