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']}
» <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();
...
}