将POST表单提交到包含GET参数

时间:2016-07-20 22:19:15

标签: php forms .htaccess

当我将POST表单提交给包含GET参数的链接时,我遇到了问题。

我认为问题来自我的htaccess文件。

这是我的htaccess文件:

Options -MultiViews

RewriteEngine On  
RewriteBase /
# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

RewriteRule ^create$ create.php [L]
RewriteRule ^delete$ delete.php [L]
RewriteRule ^error$ error.php [L]

RewriteRule ^([\$\.A-Za-z0-9_-]+)$ fetch.php?fetch=$1 [QSA,L]
RewriteRule ^([\$\.A-Za-z0-9_-]+)/make$ fetch.php?fetch=$1&make=do [QSA,L]
RewriteRule ^([\$\.A-Za-z0-9_-]+)/made$ fetch.php?fetch=$1&made=done [QSA,L]

DirectoryIndex index.php

我的POST表单:

<form action="<?=$param->getsite("url")?>/<?=$product_link?>/make" method="post">
     <input type="hidden" name="makeit" value="yes">
     <input type="hidden" name="another" value="other">
     <input type="submit" value="Let's make it" class="btn btn-primary btn-large">
</form>  

制作页面(提交到此页面的POST表单):

if(isset($_POST["makeit"]) && $_POST["makeit"] == "yes") {
    die("Work !");
}
print_r($_REQUEST);

print_r($_REQUEST);仅返回[make] => "do"(GET参数),而不返回POST表单。

1 个答案:

答案 0 :(得分:1)

if(isset($_POST["makeit"]) && $_POST["makeit"] == "yes") {
    die("Work !");
}
print_r($_REQUEST);

使用此逻辑,$_REQUEST不包含任何POST数据的行为正确。你的脚本完全按照你的要求行事。

当请求有POST参数时,它将通过if(isset(...))测试并die("Work")。因此,使用POST参数的请求永远不会到达print_r行。这就是为什么你在那条印刷线上只看到GET参数的原因。

如果您想查看POST参数,请在执行任何其他操作之前进行打印:

print_r($_POST);
if(isset($_POST["makeit"]) && $_POST["makeit"] == "yes") {
    die("Work !");
}