Как получить мой пользовательский URL-адрес в браузере URL-адресов при поиске данных

#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, и вам не следует изобретать свой собственный механизм побега.