Как реализовать и вызвать несколько php-функций?

57
4

Ниже приведен код, который я поставил вместе с некоторой помощью из 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>

спросил(а) 2015-04-04T06:33:00+03:00 5 лет, 5 месяцев назад
1
Решение
56

Вам нужно проверить, отправлена ли форма в вашем 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>

ответил(а) 2015-04-04T06:40:00+03:00 5 лет, 5 месяцев назад
58

Я предполагаю, что '%$_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");
}

ответил(а) 2015-04-04T07:15:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема