从先前定义的变量设置 $_GET 值 - PHP

Setting A $_GET Value From A Previously Defined Variable - PHP

我在网站每个页面的 header 中都有一个搜索表单,当通过表单的 action 属性进行搜索查询时,该页面将信息提交到另一个页面,即名为 search.php 并获取搜索 <input> 字段的值并将其存储为名为 searchQuery 的变量。使用 PHP 搜索 MySQL 数据库。所有这些都按预期工作。

我希望将搜索输入字段的值放置在处理搜索的页面的 URL 中,即 search.php.

我从 SO 上的其他问题了解到,您不能向表单的 action 属性添加变量。如果我在 action 属性中添加查询字符串的键,表单仍然有效:

action="search.php?keyword="

据此,我认为我可以使用以下方法在 search.php 页面上设置 $_GET 值:

if(isset($_POST['search-submit'])) {

    // make this variable available before HTML output
    $searchQuery = htmlspecialchars($_POST['search']);

    $_GET['keyword'] = $searchQuery;
}

然而,这不起作用,尽管它不会在我的 PHP 错误日志中抛出任何错误。

因为我是运行 action 属性分配的特定页面上的脚本,我认为我不需要使用$_SESSION 变量?

HTML表格

这是 header

中每一页上的表格
<form action="search.php?keyword=" method="POST">
    <label for="search">Enter Search</label>
    <input type="search" name="search" id="search">
    <button type="submit" name="search-submit" id="search-submit">Search</button>
</form>

在您的表单中将方法设置为 GET,从 action 属性中删除查询字符串,使其只是 search.php,将搜索输入字段中的名称更改为 keyword 并删除 submit 按钮上的 name

<form action="search.php" method="GET">
    <label for="search">Enter Search</label>
    <input type="search" name="keyword" id="search">
    <button type="submit" id="search-submit">Search</button>
</form>

然后在您的 search.php 页面中,将您的初始代码更改为以下内容:

if(isset($_GET['keyword'])) {
    // make this variable available before HTML output
    $searchQuery = htmlspecialchars($_GET['keyword']);
} else {
    header("Location: index.php"); // use whatever page is your home page or preferred page to redirect to
}

然后在您的搜索查询中确保设置 $_GET 值:

if(isset($_GET['keyword'])) {

    // run your search query using the $searchQuery variable

}