当我按空格键时,它会转储整个数据库


when I push the space bar, it dumps the full database

我有这个代码:

$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']}
                    &raquo <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),即使两个有点不稳定(搜索eeea)。您设置阈值的位置将需要您的一些分析——例如,您可以决定确保它至少有一个元音和一个辅音。

另一种选择,也是我更喜欢的选择,是仍然允许他们输入他们喜欢的任何内容,但限制您提供给他们的内容,例如通过添加limit 250或等效的查询。

你甚至可以告诉他们:

您对"金·卡戴珊"的搜索返回了 3,141,592,653,589 件商品。
仅显示前 250 个。

我更喜欢这个的原因是因为它绝不限制他们可以输入的内容(你很可能会弄错规则),但它让他们有责任确保它不会从你的数据库中获取所有内容。

这也将阻止人们批发抓取您的网站,谁知道呢,如果您倾向于这种方式,也许您可以在增加限制的情况下提供付费服务:-)