如何在搜索之前隐藏php中SQL表的显示?

时间:2017-01-11 09:38:14

标签: php mysql sql

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

我创建了一个php网页,其中文本框将接受搜索关键字,并且在提交时,将显示该表的行。简单!

现在,Rrght是在搜索之前,整个表已显示在我的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>

2 个答案:

答案 0 :(得分: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; ?>

答案 1 :(得分:-1)

  <?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 } ?>