get 方法覆盖了我的 url 变量


The get method is overriding my url variable

使用 GET 方法单击表单中的提交按钮后,新变量将覆盖我的旧变量:

提交前:

www.example.com/?a=product

a - 表示提交后的页面:

www.example.com/?brand=1&maxprice=200

因此,重新加载页面并将我重定向到主页,如果没有建立值,这是默认情况。

我在表单操作上尝试了一些选项,例如:

?a=product // lead me to the result I showed above
?a=product& // same result as above
a=product // leads to www.example.com/a=product... unknown page

我不确定为什么要这样做,但您可以在表单中添加一个名为"a"且值为 $_GET['a'] 的隐藏输入元素,以便"a"与表单一起发布,如下所示:

<input type="hidden" name="a" value="<?=htmlspecialchars($_GET['a']);?>"/>

如果你有 PHP 5.4,请使用它

$encoding="UTF-8"; // Or whatever encoding you are using
<input type="hidden" name="a" value="<?=htmlspecialchars($_GET['a'],ENT_XML1 | ENT_COMPAT,$encoding);?>"/>

否则只需使用 htmlspecialchars 而不ENT_XML1 |ENT_COMPAT和关于"和"的str_replace。

$encoding="UTF-8"; // Or whatever encoding you are using
$v=$_GET["a"];
$v=str_replace("'"","",$v);
$v=str_replace("''","",$v);
$v=htmlspecialchars($v,ENT_QUOTES,$encding);
echo '<input type="hidden" name="a" value="' . $v . '"/>'

对于foreach循环,请查看其他答案。

一个简单的解决方案是对表单使用 POST 方法,然后在表单提交到的页面上,使用 $_POST。 您的 _GET 美元应该仍然有效。