PHP搜索功能

时间:2015-05-03 00:08:34

标签: php jquery sql search-engine

我正在开发一个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
}

?> 

1 个答案:

答案 0 :(得分:0)

我认为没有理由使用$ _SESSION,我只是将搜索表单作为GET处理并检查代码中的params。

<?php

//Display all
if(!$_GET['fname'] && !$_GET['lname'])
{
    $stmt = $dbh->prepare("SELECT * FROM customer ORDER BY lname");

    $stmt->execute();
    $res = $stmt->fetchAll();
}else{


  //Enable binded param to be used in LIKE clause
  $fnameString = '%'.$_GET['fname'].'%';
  $lnameString = '%'.$_GET['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
}

?> 

如果您不希望向用户显示搜索字符串,请使用POST。