【问题标题】:How to stop search field returning all results when submitting empty search field?提交空搜索字段时如何停止搜索字段返回所有结果?
【发布时间】:2011-12-14 22:20:30
【问题描述】:

如果我点击我的搜索字段并在不输入任何文本的情况下提交它,我的数据库中的所有数据都会返回。这是如何停止的,所以什么也没有发生?

查看网站:

weezy.co.uk/newresults.php

谢谢!

詹姆斯

 <?php

    $conn = mysql_connect("cust-mysql-123-02", "uwee_641290_0001", "La0%-Mr4");

    if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
    }

    {

      $search = "%" . $_POST["search"] . "%";
    $searchterm = "%" . $_POST["searchterm"] . "%";

    }

    if (!mysql_select_db("weezycouk_641290_db1")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
    }

    $sql = "SELECT name,lastname,email 
    FROM   test_mysql
    WHERE  name LIKE '%".$search."%' AND lastname LIKE '%".$searchterm."%'";

    $result = mysql_query($sql);

    if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
    }

    if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
    }


while ($row = mysql_fetch_assoc($result)) {
    echo '<br>';
    echo '<br>';
    echo '<div class="data1">';
    echo $row["name"];
    echo '</div>';
    echo '<br>';
    echo '<div class="data2">';
    echo $row["lastname"];
    echo '</div>';
    echo '<br>';
    echo '<div class="data3">';
    echo $row["email"];
    echo '</div>';
    }

    mysql_free_result($result);

    ?>

【问题讨论】:

  • @AurelioDeRosa 看看他之前的问题; last one,例如。
  • @DamienPirsy 所以你是说,一块一块地,我们正在做整个应用程序? :)
  • @AurelioDeRosa 当我浏览问题时,我也有同样的想法!

标签: php mysql html forms


【解决方案1】:

您应该在进行查询之前检查它是否为空:

if(empty($_POST['searchterm'])){
    //don't search and show an error message
}else{
   //proceed as normal, do the query
}

否则你最终可能会进行如下查询:

WHERE name LIKE('%%')

这真的很昂贵并且会返回所有数据库行

【讨论】:

    【解决方案2】:

    执行此操作的最佳方法 (imo) 是使用简单的 javascript 检查输入是否为空白。

    【讨论】:

    • 您不应该仅仅依靠 javascript 进行验证。它应该用于改善用户体验,但数据应该始终在后端进行验证。
    • 我同意。简单的 Javascript 与 Nicola 的空 if 语句混合使用在这里效果最好。
    【解决方案3】:

    使用javascript/Jquery 做一些front end 总是明智的。提示用户输入内容的表单验证。

    完成后,您还可以使用以下方法检查后端:

    if(isset($_POST['searchterm'])){
        // search for the results.
    }else{
       // do nothing or show proper message
    }
    

    【讨论】:

      【解决方案4】:

      我认为最好的方法是在搜索框为空时禁用客户端的提交按钮。

      你可以这样做:

      $(document).ready(function()
      {
         $('#searchBox').keyup(function() 
         {
            if($(this).val() == '')
            {
              $('#searchButton').attr('disabled', true);
            }
            else
            {
              $('#searchButton').removeAttr('disabled');
            }
      
         });
      });
      

      你的 html 是这样的:

      <input type='text' id="searchBox" />
      <input type='button' id='searchButton' value='search' disabled/>
      

      确保按照 Nicola 的指示在服务器端进行验证。

      【讨论】:

        【解决方案5】:

        我在上面的代码中遇到了一些问题。因此,上述代码的以下改进版本可以正常工作:

        <form action="searchengine.php" method="POST">
        <input type="text" id = "searchbox" name="searchterm" placeholder="Search here">
        <input type="submit" id = "searchbutton" value="Search" style="display:none;">
        </center>
        <script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function()
        {
        $('#searchbox').keyup(function()
        {
        if($(this).val() == '')
        {
        $('#searchbutton').hide();
        }
        else
        {
        $('#searchbutton').show();
        }
        
        });
        });
        
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多