当我向包含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 !");
}