选择onchange添加get变量到url


select onchange add get variable to url

我在一个页面上使用了多个选择元素。这个页面的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']——正如下面的评论所指出的。

编辑:在我完成之前张贴答案。(