我在网站的每个页面的标题中都有一个搜索表单,当通过表单的action
属性进行搜索查询时,将信息提交给另一个页面,即一个名为search.php
的页面,它将搜索<input>
字段的值存储为一个名为searchQuery
的变量。使用PHP搜索MySQL数据库。
我希望将搜索输入字段的值放置在处理搜索的页面的URL中,即search.php
。
我从其他问题上了解到,你不能将变量添加到表单的action
属性。如果我在action属性中添加查询字符串的键,表单仍然可以正常工作:
action="search.php?keyword="
从这个我认为我将能够设置$_GET
的值在search.php
页面上使用:
if(isset($_POST['search-submit'])) {
// make this variable available before HTML output
$searchQuery = htmlspecialchars($_POST['search']);
$_GET['keyword'] = $searchQuery;
}
但是这不起作用,尽管它不会在我的PHP错误日志中抛出任何错误。
因为我正在运行由action属性分配的特定页面上的脚本,我认为我不需要使用$_SESSION
变量?
HTML表单
这是页眉
中每一页的表单<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
}