select onchange将get变量添加到url

时间:2015-09-23 13:34:55

标签: php url html-select

我在页面上使用多个选择元素。此页面的网址如下:"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"会发生更改。

我有机会得到那个吗?

非常感谢你的帮助。 最诚挚的问候

3 个答案:

答案 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">';

干杯!