jquery — функция поиска PHP

Я работаю над проектом PHP / SQL, где одна из HTML-страниц содержит реестр клиентов. Чтобы найти конкретного клиента, я реализовал функцию поиска на основе двух форм ввода (имя, фамилия).

Когда пользователь изначально загружает страницу, каждый клиент может быть найден в таблице. Когда пользователь затем ищет клиента, будут отображаться только совпадающие клиенты. Когда страница обновляется или загружается снова через меню, я хочу, чтобы он снова отображал каждого клиента. Вот где моя проблема. Я пытался найти решение, но до сих пор не нашел ни одного. Я знаю, что должен использовать unset($_SESSION['fname']) и т.д. но я не знаю где. Если был выполнен поиск и пользователь обновил страницу, результат поиска все еще там, как я могу это исправить? Я пробовал unset в нескольких местах, но он всегда мешал мне выполнять поиск и вместо этого отображал каждого клиента.

Я разместил код ниже:

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

?>

0

Решение

Я не вижу причин использовать $ _SESSION, я бы просто обработал форму поиска как GET и проверил наличие параметров в коде.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]