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


Submitting POST form to a link that contain GET parameter

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

我认为问题来自我的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表单。

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

使用此逻辑,$_REQUEST将不包含任何POST数据是正确的行为。你的剧本正是按照你的要求写的。

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

如果你想查看你的POST参数,请在做其他事情之前打印:

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