【问题标题】:How to hide display of SQL table in php before search?如何在搜索前隐藏 php 中 SQL 表的显示?
【发布时间】:2017-01-11 09:38:14
【问题描述】:

在这个网站上发布我的第一个问题。

我制作了一个 php 网页,其中文本框将接受搜索关键字,提交后,将显示该表的行。简单的!

问题是,现在,在搜索之前,整个表格已经显示在我的 php 页面上。我不想要那个。我只想要搜索后的结果,搜索前不应该显示表格(测试数据表有500行,但实际表有15,000行)。

页面(搜索前):

    <?php
            if(isset($_REQUEST['submit'])){
    $name=$_POST['name'];
    $email=$_POST['email'];
    $sql=" SELECT * FROM live_table WHERE name like '%".$name."%' AND company LIKE '%".$email."%'";
    $q=mysqli_query($con, $sql);
}
else{
    $sql="SELECT * FROM live_table";
    $q=mysqli_query($con, $sql);
}
?>
<form method="post" class="search">

   <table width="200">
  <tr>
    <td></td>
    <td><input class="form__input" type="search" autocomplete="off" name="name" placeholder="Name" value="<?php if(isset($name)) echo $name;?>" /></td>
    <td></td>
    <td><input class="form__input" autocomplete="off" type="search" name="email" placeholder="Company Name" value="<?php if(isset($email)) echo $email;?>" /></td>
    <td><input type="submit" name="submit" value=" Find " class="button"/></td>
  </tr>
</table>
</form>



<table width="70%" cellpadding="5" cellspace="5" style="margin: 3em 3em 3em 3em;">

            <tr>
                <td><strong>Salutation</strong></td>
                <td><strong>First Name</strong></td>
                <td><strong>Middle Name</strong></td>
                <td><strong>Last Name</strong></td>


            </tr>

<?php
    while($res=mysqli_fetch_array($q)){
    ?>
            <tr>
                <td><?php echo $res['id'];?></td>
                <td><?php echo $res['name'];?></td>
                <td><?php echo $res['company'];?></td>
                <td><?php echo $res['zip'];?></td>
                <td><?php echo $res['city'];?></td>
            </tr>

            <?php } ?>
            </table>

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    首先,您的代码容易受到 SQL 注入的攻击:切勿在 SQL 查询中使用原始用户输入(或其他任何地方)请参阅 How can I prevent SQL injection in PHP?

    你需要删除else块中的查询

    else{
        $sql="SELECT * FROM live_table";
        $q=mysqli_query($con, $sql);
    }
    

    然后,在打印表格行之前,添加一个测试以检查是否定义了 $q

    <?php if (isset($q)) : ?>
        <?php while($res=mysqli_fetch_array($q)): ?>
            <tr>
                <td><?php echo $res['id'];?></td>
                <td><?php echo $res['name'];?></td>
                <td><?php echo $res['company'];?></td>
                <td><?php echo $res['zip'];?></td>
                <td><?php echo $res['city'];?></td>
            </tr>
    
        <?php endwhile; ?>
    <?php endif; ?>
    

    【讨论】:

      【解决方案2】:
        <?php
      $dont_show = false;
      
                  if(isset($_REQUEST['submit'])){
          $name=$_POST['name'];
          $email=$_POST['email'];
          $sql=" SELECT * FROM live_table WHERE name like '%".$name."%' AND company LIKE '%".$email."%'";
          $q=mysqli_query($con, $sql);
      }
      else{
        $dont_show = true;
      }
      ?>
      <form method="post" class="search">
      
         <table width="200">
        <tr>
          <td></td>
          <td><input class="form__input" type="search" autocomplete="off" name="name" placeholder="Name" value="<?php if(isset($name)) echo $name;?>" /></td>
          <td></td>
          <td><input class="form__input" autocomplete="off" type="search" name="email" placeholder="Company Name" value="<?php if(isset($email)) echo $email;?>" /></td>
          <td><input type="submit" name="submit" value=" Find " class="button"/></td>
        </tr>
      </table>
      </form>
      
      
      <?php if(!$dont_show){ ?>
      <table width="70%" cellpadding="5" cellspace="5" style="margin: 3em 3em 3em 3em;">
      
                  <tr>
                      <td><strong>Salutation</strong></td>
                      <td><strong>First Name</strong></td>
                      <td><strong>Middle Name</strong></td>
                      <td><strong>Last Name</strong></td>
      
      
                  </tr>
      
      <?php
          while($res=mysqli_fetch_array($q)){
          ?>
                  <tr>
                      <td><?php echo $res['id'];?></td>
                      <td><?php echo $res['name'];?></td>
                      <td><?php echo $res['company'];?></td>
                      <td><?php echo $res['zip'];?></td>
                      <td><?php echo $res['city'];?></td>
                  </tr>
      
                  <?php } ?>
                  </table>
      <?php } ?>
      

      【讨论】:

      • 注意:未定义变量:[filepath] 中的 q 警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在 [filepath] 第 77 行中给出 null Ps:第 77 行是 -------- > while($res=mysqli_fetch_array($q)){
      • 因为 $q 看不到该死的,只是复制粘贴上面的代码
      • 或者你可以检查$q是否存在
      • 你太粗鲁了。但是你很好!!!谢谢斯诺登先生。 :P 我会给你避难所!
      • 是的,俄罗斯很冷
      猜你喜欢
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 2013-01-20
      • 2016-04-09
      • 1970-01-01
      • 2022-09-23
      • 2017-09-15
      • 2021-06-21
      相关资源
      最近更新 更多