在此网站上发布我的第一个问题。
我创建了一个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>
答案 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 } ?>