我在页面上使用多个选择元素。此页面的网址如下:"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>
因此,如果我更改我的选择,则网址将切换为"index.php?this=1"
,但我想保留之前的_GET参数,因此"index.php?s=foo&this=1"
会发生更改。
我有机会得到那个吗?
非常感谢你的帮助。 最诚挚的问候
答案 0 :(得分:0)
您可以将每个查询字符串项添加为隐藏字段,该字段将在提交表单时添加到查询字符串中。一定要对这些东西进行一些消毒,以确保它们安全。
if(!empty($_GET))
{
foreach($_GET AS $k => $v)
{
echo '<input type="hidden" name="'.$k.'" value="'.$v.'">';
}
}
然后可以将表单操作硬编码为文件名或$_SERVER['SCRIPT_NAME']
之类的内容。不是$_SERVER['PHP_SELF']
- 正如以下评论所指出的那样。
编辑:在我完成之前发布的答案。 :(
答案 1 :(得分:0)
使用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
变量的内容,以免发生这种情况。
答案 2 :(得分:0)
简单的答案是:
<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">
执行以下操作:
<form action="<?php echo $_SERVER['REQUEST_URI'].'?'.$_SERVER['QUERY_STRING']; ?>" method="GET">
当表单提交时,其中将包含表单操作/网址中的当前$_GET
值以及扩展名。基本上,这就是一般设计表单以处理提交到具有查询参数的页面的方式,即。它的默认工作方式。
只是一个注释,但我认为你现在拥有它的方式你可能会得到你的行动/网址
"http://'.$_SERVER['REQUEST_URI'].'"
这只是一个猜测,但看起来形式是html,而php只是打印而不是作为代码执行(没有php标签)。可能只是示例代码中的一个过度站点。但是,我希望这有你的格式:
echo '<form action="'.$_SERVER['REQUEST_URI'].'" method="GET">';
干杯!