这个问题与this one类似,但有点不同。我想在我的代码中创建一个搜索功能。但是,当我使用$ _GET变量时,我无法回显输入的搜索值。
以下是3个文件中分隔的代码(我使用的是自定义MVC设计,而不是任何特定的框架)
搜索表单
<form action = "maina2/getStaffname" method = "get">
<select name = "choice">
<option value = "staffname" name = "staffname">title</option>
<option value = "id" name = "id"> author</option>
</select>
<input name= "search" type ="text" size="65" maxlength = "88" style = "display:inline">
<input name = "mysearch" type="submit" style = "display:inline">
</form>
搜索控制器
<?php
class Search extends Controller {
public function __construct(){
parent::__construct();
}
function Index() {
$this->view->getStaffname = $this->model->getStaffname();
$this->view->render('search/index');
}
function getStaffname() {
$this->model->getStaffname();
}
}
这是搜索模型文件
<?php
class Search_Model extends Model{
public function __construct() {
parent::__construct();
echo 'This is the SEARCH MODEL CLASS <br />';
}
public function getStaffname(){
if(isset($_GET['search'])) {
echo $_GET['search'];
}
}
}
令我感到震惊的是,当我将方法更改为POST时,我能够回显搜索值。我的技术可能有什么问题?
答案 0 :(得分:1)
重写符如下
RewriteRule ^(.+)$ index.php?url=$1
您将使用一个url
参数替换所有查询参数;如果以前在网址中有任何?search=...
,那么之后就不会有。{您希望使用QSA
保留现有参数:
RewriteRule ^(.+)$ index.php?url=$1 [QSA]
为什么当我在窗体中将方法更改为“POST”并在控制器中使用
$_POST['search']
时我能够回显?
因为请求正文(“POST参数”)不受重写规则的影响。