Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我按下空格键时,它会转储整个数据库_Javascript_Php_Ajax - Fatal编程技术网

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

Javascript 当我按下空格键时,它会转储整个数据库,javascript,php,ajax,Javascript,Php,Ajax,我有以下代码: $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_fetc

我有以下代码:

$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");
    }   

好吧,因为所有多词新闻标题都可能包含空格,这正是我所期望的

如果你不想这样,我认为有两种可能性

第一种方法是捕获输入值,这样就不允许不包含合适的搜索字符串的输入。您已经在为空字符串执行此操作,但可能需要将其展开一点

例如,字母字符的最小数量。一个字母字符仍然可以让你获得很多文章(搜索
e
),即使是两个字母字符也有点不确定(搜索
ee
ea
)。设置阈值的地方需要对您的部分进行一些分析——例如,您可以决定确保它至少有一个元音和一个辅音

另一个选择,也是我更喜欢的,是仍然允许他们输入他们喜欢的内容,但限制您给他们的内容,例如添加
limit 250
或与您的查询等效的内容

你甚至可以告诉他们:

您对“Kim Kardashian”的搜索返回了3141592653589个项目。
只显示前250个

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


这也将阻止人们对你的网站进行大规模的清理,谁知道呢,如果你倾向于这样做的话,也许你可以在限制增加的地方提供付费服务:-)

修剪字符串以移除周围的空间

function showResult(str) {
    str = str.trim();
    ...
}

因此,您所做的是说“标题包含某些内容”,并让用户指定“某些内容”

其中“%”表示标题包含空格的位置

您不想要标题中包含空格的内容吗?然后从搜索字符串中去掉空格。正如另一位用户所建议的,尝试使用trim()函数仅从末尾删除空格(从而仅完全删除空格字符查询)

另外,您可能不想选择*而只选择几列


p.S.是你的朋友。此外,还有一些不错的javascript框架和库可以为您解决很多问题。

不使用mysqli或pdo,您就完蛋了。哦,空间是您的最小问题。要扩展@epascarello的评论,您需要阅读和。如果像这里所做的那样在查询中使用未初始化的用户提供的数据,那么您只是要求某人窃取、修改和/或删除数据库中的数据。我还建议学习有关攻击的知识。XSS和SQL注入可能是任何网站都会面临的两种最常见的攻击类型。在JavaScript代码中将str.length==0更改为str.trim().length==0应该可以解决当前的问题;不过,您还有更重要的事情要做。@paxdiablo
if(str.length==0)
块从函数返回而不执行查询。
function showResult(str) {
    str = str.trim();
    ...
}