#php
Вопрос:
Я думаю, что из названия не совсем ясно, поэтому я собираюсь объяснить это здесь, я получил URL-адрес, подобный этому => localhost/restoq/?страница=Лапоран, но когда я попытался выполнить поиск по запросу, он показал только localhost/restoq/?поиск=пример. Итак, что мне нужно сделать, чтобы добавить «?страница=Лапоран в мой URL-адрес?
Форма :
<form action="" method="GET">
<div class="form-row">
<div class="col-md-12">
<label for="">Keyword</label>
<input type="text" name="search" class="form-control" placeholder="Masukkan Keyword" value="<?php if(isset($_GET['search'])) { echo $_GET['search']; } ?>" />
</div>
</div>
<div class="form-row mt-3 float-right">
<button type="submit" class="btn btn-danger">Search</button>
</div> </form>
Запрос :
if(isset($_GET['search']) ) {
$keyword = $_GET['search'];
$query = "SELECT barang.kode, barang.nota, barang.tgl_input, barang.no_inv, barang.status_doc, barang.posisi_doc, barang.no_po, barang.nilai, users.nama FROM barang INNER JOIN users ON barang.id_user = users.id_user
WHERE barang.nota like '%".$keyword."%'
OR tgl_input like '%".$keyword."%'
OR status_doc like '%".$keyword."%'
OR posisi_doc like '%".$keyword."%'
OR no_inv like '%".$keyword."%'
OR no_po like '%".$keyword."%'
OR nilai like '%".$keyword."%'
ORDER BY barang.kode ASC";
} else {
$query = "SELECT barang.kode, barang.nota, barang.tgl_input, barang.no_inv, barang.status_doc, barang.posisi_doc, barang.no_po, barang.nilai, users.nama FROM barang INNER JOIN users ON barang.id_user = users.id_user ORDER BY barang.kode ASC";
}
Ответ №1:
Измените тег формы на что-то вроде:
<form action="?search=<?php print $_GET['search']; ?>" method="GET">
Полный пример:
<html>
<body>
<?php
error_reporting(E_ALL);
if (!empty($_GET['reset'])) {
header('Location: /index.php');
exit();
}
function search(string $string)
{
return [
'result1',
'result2',
'result3',
];
}
function real_escape_string($value)
{
$search = array("\", "x00", "n", "r", "'", '"', "x1a");
$replace = array("\\","\0","\n", "\r", "'", '"', "\Z");
return str_replace($search, $replace, $value);
}
$results = [];
if (!empty($_GET['search'])) {
$results = search(real_escape_string($_GET['search']));
}
?>
<form action="?search=<?php print $_GET['search']; ?>" method="GET">
<input type="text" name="search" value="<?php !empty($_GET['search']) ? $_GET['search'] : ''; ?>">
<input type="submit" name="submit" value="Submit">
<input type="submit" name="reset" value="Reset">
</form>
<?php
if ($results) {
?>
<h2>Results</h2>
<div class="results">
<?php
foreach ($results as $result) print '<br>' . $resu<
?>
</div>
<?php
}
?>
</div>
</body>
</html>
Комментарии:
1. Параметр запроса будет перезаписан после отправки, вы захотите
<input type="hidden" name="search" etc..
2. Я сомневался в себе после вашего комментария, поэтому я попробовал это. Действительно , когда
method="GET"
?search=
действительно стирается после отправки формы. Браузеры разрешают путь и перезаписывают все параметры запроса, когдаmethod
установлено значениеGET
.3. Работает на меня… Я обновил свой ответ полным примером.
4. Да, очевидно, ваш пример работает, потому
search
что вы снова уважаете какinput
область. Вы можете удалить его изaction=
атрибута , так как он действительно игнорируется (что и было целью моего комментария). Однако у вас действительно есть куча ошибок XSS, и вам не следует изобретать свой собственный механизм побега.