【发布时间】:2015-05-03 08:23:50
【问题描述】:
我正在处理一个 PHP/SQL 项目,其中一个 html 页面包含客户登记册。为了找到特定客户,我实现了基于两个输入表单(名字、姓氏)的搜索功能。
当用户最初加载页面时,每个客户都可以在一个表中找到。当用户随后搜索客户时,将仅显示匹配的客户。当页面通过菜单刷新或再次加载时,我希望它再次显示每个客户。这就是我的问题所在。我试图找到一个解决方案,但仍然没有找到任何解决方案。我知道我必须使用unset($_SESSION['fname']) 等,但我不知道在哪里。如果进行了搜索并且用户刷新了页面,搜索结果仍然存在,我该如何解决这个问题?我已经在几个地方尝试了取消设置,但它总是阻止我进行搜索,而是显示每个客户。
我已经发布了下面的代码:
<?php
//Display all
if(!isset($_SESSION['fname']) && !isset($_SESSION['lname']))
{
$stmt = $dbh->prepare("SELECT * FROM customer ORDER BY lname");
$stmt->execute();
$res = $stmt->fetchAll();
}
//Perform a search
if(isset($_POST['search']))
{
if(!isset($_SESSION['fname']) && !isset($_SESSION['lname']))
{
$_SESSION['fname'] = $_POST['fname'];
$_SESSION['lname'] = $_POST['lname'];
header('location:customers.php');
}
}
//Display search result
if(isset($_SESSION['fname']) && isset($_SESSION['lname']))
{
$fname = $_SESSION['fname'];
$lname = $_SESSION['lname'];
//Enable binded param to be used in LIKE clause
$fnameString = '%'.$fname.'%';
$lnameString = '%'.$lname.'%';
$stmt = $dbh->prepare("SELECT * FROM customer WHERE fname LIKE :fname AND lname LIKE :lname");
$stmt->bindParam(':fname', $fnameString, PDO:: PARAM_STR);
$stmt->bindParam(':lname', $lnameString, PDO:: PARAM_STR);
$stmt->execute();
$res = $stmt->fetchAll();
}
//Print
foreach ($res as $row)
{
?>
<tr>
<td><a href="customer.php?id=<?php echo $row->id; ?>"><?php echo $row->fname." ".$row->lname; ?></a></td>
<td><p><?php echo $row->street; ?><p></td>
<td><p><?php echo $row->zip; ?></p></td>
<td><p><?php echo $row->city; ?></p></td>
<td><p><?php echo $row->email; ?></p></td>
<td><p><?php echo $row->phone; ?></p></td>
</tr>
<?php
}
?>
【问题讨论】:
标签: php jquery sql search-engine