Как реализовать и вызвать несколько php-функций?
Ниже приведен код, который я поставил вместе с некоторой помощью из SO. Я пытаюсь реализовать оператор $select
, а также оператор $search
на той же странице. Оператор $select
отлично работает, но я не знаю, как вызвать оператор $search
будет выполняться, когда пользователь будет искать форму в коде. Кто-нибудь знает, как это сделать, или вы можете перенаправить меня в хороший учебник с тем, как формы взаимодействуют с php?
<?php
require 'db/connect.php';
$select = $db->query("SELECT * FROM customers ORDER BY id DESC");
$search = $db->query("SELECT * FROM customers WHERE FName LIKE '%$_REQUEST[q]%' OR LName LIKE '%$_REQUEST[q]%' ORDER BY id DESC");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="wrapper">
<h1>Customers</h1>
<p><a class="btn create" href="createcustomer.php">CREATE</a></p>
<?php
if (!$select->num_rows) {
echo '<p>', 'No records', '</p>';
}else{
?>
<table border="1" width="100%">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>
<th>Alt Phone</th>
<th>Job Address</th>
<th>Billing Address</th>
<th>Email</th>
<th>Alt Email</th>
</tr>
</thead>
<tbody>
<?php
while ($row = $select->fetch_object()) {
?>
<tr>
<td><?php echo $row->FName;?></td>
<td><?php echo $row->LName;?></td>
<td><?php echo $row->Phone;?></td>
<td><?php echo $row->AltPhone;?></td>
<td><?php echo $row->JobAddress;?></td>
<td><?php echo $row->BillingAddress;?></td>
<td><?php echo $row->Email;?></td>
<td><?php echo $row->AltEmail;?></td>
<td><a class="btn read" href="viewcustomer.php?id=<?php echo $row->id; ?>">READ</a> <a class="btn update" href="editcustomer.php?id=<?php echo $row->id; ?>">UPDATE</a> <a class="btn delete" href="deletecustomer.php?id=<?php echo $row->id; ?>">DELETE</a></td>
</tr>
</tbody>
<tbody>
<?php
}
?>
</table>
<?php
}
?>
# Search form that needs tied to $search
<input type="text" name="q" /> <input type="submit" name="search" />
</div>
</body>
</html>
Вам нужно проверить, отправлена ли форма в вашем php-коде:
<?php
require 'db/connect.php';
if(isset($_POST['q'])) {
$q = $_POST['q'];
$select = $db->query("SELECT * FROM customers WHERE FName LIKE '%$q%' OR LName LIKE '%$q%' ORDER BY id DESC");
} else {
$select = $db->query("SELECT * FROM customers ORDER BY id DESC");
}
?>
И вам нужно изменить свой код, чтобы добавить форму
<form method="post">
<input type="text" name="q" /> <input type="submit" name="search" />
</form>
Я предполагаю, что '%$_REQUEST[q]%'
даст вам проблему, потому что вы хотите получить доступ к $_REQUEST['q']
вместо $_REQUEST[q]
.
Замените его на '%". $_REQUEST['q']. "%'
Должно быть хорошим началом. Но вы обычно не хотите оставлять это так, потому что этот код уязвим для SQL-инъекций.
Поэтому вы должны использовать функцию quote:
$search = $db->query("SELECT * FROM customers WHERE FName LIKE " . $db->quote("%" . $_REQUEST['q'] . "%") . " OR LName LIKE " . $db->quote("%" . $_REQUEST['q'] . "%") . " ORDER BY id DESC");
Следующее, что вы хотите сделать, это проверить, установлен ли вход формы и использовать результат вашего поиска вместо оператора выбора без параметров поиска:
if (isset($_REQUEST['q'])) {
$q = "%" . $_REQUEST['q'] . "%";
$select = $db->query("SELECT * FROM customers WHERE FName LIKE " . $db->quote($q) . " OR LName LIKE " . $db->quote($q) . " ORDER BY id DESC");
} else {
$select = $db->query("SELECT * FROM customers ORDER BY id DESC");
}