我在一个页面上使用了多个选择元素。这个页面的url是这样的:"index.php?s=foo"
.
现在我想改变我的选择框将改变我的URL和刷新页面,这只是部分工作:(下面是示例:
<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">
<select name="this" onchange="this.form.submit()">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
</select>
</form>
所以如果我改变我的选择,url将交换到"index.php?this=1"
,但我想保持之前的_GET参数,所以改变将发生在"index.php?s=foo&this=1"
。
我有机会得到那个吗?
非常感谢你的帮助。最好的祝福简单的答案是:
<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">
按如下方式操作:
<form action="<?php echo $_SERVER['REQUEST_URI'].'?'.$_SERVER['QUERY_STRING']; ?>" method="GET">
它将在表单的action/url中包含当前的$_GET
值,并且在提交表单时扩展为存在。基本上,这就是表单通常用来处理提交到带有查询参数的页面的方式。默认的工作方式。
只是一个提示,但我认为你现在的方式你可能会得到这个在你的action/url
"http://'.$_SERVER['REQUEST_URI'].'"
这只是一个猜测,但它看起来像html的形式,php将只是打印,而不是作为代码执行(没有php标签)。可能只是示例代码中的一个站点。但是,我希望它的格式是:
echo '<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">';
干杯!
使用REQUEST_URI
不包括当前的GET参数。您将需要本要点中的函数将所有参数转换为输入字段:https://gist.github.com/eric1234/5802030 .
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
<?php array_to_input($_GET); ?>
<select name="this" onchange="this.form.submit()">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
</select>
</form>
注意: array_to_input
可能引入XSS漏洞。请转义$_GET
变量的内容,这样就不会发生这种情况。
您可以将每个查询字符串项添加为隐藏字段,该字段将在提交表单时添加到查询字符串中。一定要对这些东西进行消毒,以确保它们安全。
if(!empty($_GET))
{
foreach($_GET AS $k => $v)
{
echo '<input type="hidden" name="'.$k.'" value="'.$v.'">';
}
}
然后可以将表单操作硬编码为文件名或$_SERVER['SCRIPT_NAME']
之类的内容。不是$_SERVER['PHP_SELF']
——正如下面的评论所指出的。
编辑:在我完成之前张贴答案。(