我有这个代码:
$q = mysql_real_escape_string($_GET["q"]);
$result = mysql_query("SELECT * FROM articles WHERE news_title LIKE '%{$q}%'") or die(mysql_error());
$tablecount = 0;
if(mysql_num_rows($result) != 0){
while($staff = mysql_fetch_array($result)){
echo("
{$staff['news_month']}
{$staff['news_day']}
{$staff['news_year']}
» <a href='"entry/{$staff['id']}'">{$staff['news_title']}</a><br />
");
}
} else {
echo("Error");
}
因此,当我按下"空格键"时,它会转储我数据库中的所有内容。我被困在如何不允许按空格键清空数据,但再次,我被卡住了!
这是我的JavaScript:
function showResult(str){
if (str.length==0){
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch").style.border="0px";
return;
}
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("livesearch").innerHTML=xmlhttp.responseText;
document.getElementById("livesearch").style.border="0px solid #A5ACB2";
}
}
xmlhttp.open("GET","_lib/_php/livesearch.php?q="+str,true);
xmlhttp.send();
}
修剪字符串以删除周围的空格。
function showResult(str) {
str = str.trim();
...
}
所以你所做的是说"标题包含某些内容的地方",并让用户指定"某些内容"
因此,其中"% %"表示标题包含空格的位置。
您不想要标题中包含空格的东西吗? 然后从搜索字符串中删除空格。 正如另一位用户建议的那样,尝试使用 trim() 函数仅从末尾删除空格(从而完全删除仅空格字符查询)。
另外,也许您不想选择 *,而只想选择几列?
附言 http://laravel.com 是你的朋友。 此外,还有一些不错的JavaScript框架和库可以为您解决许多问题。
好吧,由于所有多词新闻标题都可能包含空格,这正是我所期望的。
如果你不希望这种情况发生,我认为有两种可能性。
第一种是捕获输入值,使其不允许不包含体面搜索字符串的输入。您已经在对空字符串执行此操作,但您可能希望稍微扩展它。
例如,字母字符的最小数量。一个字母字符仍然可以让你得到很多文章(搜索e
),即使两个有点不稳定(搜索ee
或ea
)。您设置阈值的位置将需要您的一些分析——例如,您可以决定确保它至少有一个元音和一个辅音。
另一种选择,也是我更喜欢的选择,是仍然允许他们输入他们喜欢的任何内容,但限制您提供给他们的内容,例如通过添加limit 250
或等效的查询。
你甚至可以告诉他们:
您对"金·卡戴珊"的搜索返回了 3,141,592,653,589 件商品。
仅显示前 250 个。
我更喜欢这个的原因是因为它绝不限制他们可以输入的内容(你很可能会弄错规则),但它让他们有责任确保它不会从你的数据库中获取所有内容。
这也将阻止人们批发抓取您的网站,谁知道呢,如果您倾向于这种方式,也许您可以在增加限制的情况下提供付费服务:-)