【问题标题】:How to prevent a "space" from searching MySQL database?如何防止“空格”搜索 MySQL 数据库?
【发布时间】:2011-11-04 00:57:41
【问题描述】:

目前,当有人只是按空格键并按 Enter 键时,它将转到下一页但不搜索任何内容 - 我想完全阻止搜索。实现这一目标的最佳方法是什么?我不想阻止使用空格(即:我该如何解决这个问题?) - 我只是不希望空格本身允许搜索。

【问题讨论】:

  • 去除空格?
  • 显示一些代码——当你这么含糊的时候,没有人能帮上忙。
  • 呃什么?给我们一些代码,我的水晶球目前正在修理店里。

标签: php javascript mysql search


【解决方案1】:

将您的查询变量包装在 empty 条件中:

if(!empty(trim($_POST['searchterm']))
{
   // do search
}

【讨论】:

  • 最好是防止表单在客户端提交。我认为 OP 确实牢记这一点,因为他标记了 javascript。当然,为了强制执行该策略,服务器端也应该检查,但是如果在不必要的情况下(应该占流量的 99%)进行额外检查,是否超过了在它看到的情况下的使用,这也是值得怀疑的,因为还有伤害不大。
  • 单独的客户端验证可以被回避。您还需要后端检查。
  • @gAMBOOKa:我编辑了我的评论,当然可以回避它,但是仅仅为了传递一个“”作为搜索字符串值得付出努力吗?如果存在安全问题,那么服务器端当然也应该检查。
  • @Nobody:你是对的。我只是想向正在阅读的新程序员澄清,不要单独使用客户端验证。
【解决方案2】:

submit (onsubmit) 事件处理程序中使用 JavaScript 并修剪前导空格:

var searchField = document.getElementById('search'); // or whatever the id of the field is
if(searchField.value.replace(/^\s+/, '').length === 0) {
    return false; // or evt.preventDefault().
}

在这里依赖客户端验证应该没问题,因为如果用户想欺骗搜索引擎,那么他们不会介意被带到一个空白页面。如果允许这样做存在实际的服务器端问题,则在服务器端执行相同的检查:

if(!isset($_REQUEST['search']) || !trim($_REQUEST['search'])) {
    // Don't perform the search
}

【讨论】:

    【解决方案3】:

    除了@AlienWebguy 回答之外,您还可以使用 JavaScript 进行客户端验证,以阻止页面甚至到达后端。在客户端AND服务器端进行验证绝对是一个好习惯。

    Live Demo

    form.onsubmit = function(){
        if(input.value.replace(/^\s/,"").length === 0){
          return false;
        }
    }
    

    【讨论】:

    • 你不需要修剪前导和尾随空格;如果一个字符串只包含空格,那么它将是所有前导空格并且没有尾随空格。
    • @gAMBOOKa 哈哈不错的链接,我是这种东西的超级书呆子!
    【解决方案4】:

    只需取字符串,修剪初始和最终空格并检查长度;如果长度为0,则不提交表单。

    【讨论】:

    • 这没关系,但您不应仅依赖客户端检查。
    【解决方案5】:

    如果您在后端使用 php 处理它,您可以使用 trim($input),但为了获得更好的用户体验,请使用 javascript。设置一个表单验证器,这样它就不会提交,除非有空格以外的东西。

    <form onsubmit="return verify()">
        <input id="foo" name="foo" />
        <input type="submit" />c
    </form>
    <script type="text/javascript">
        function verify() {
          if (document.getElementById("foo").value.match(/[^\s]/) == null) {
            alert('only whitespace');
            return false;
          } else {
            alert('found substance');
            return true;
          }
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 2014-06-02
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多