当我使用GET方法发送表单时,http_build_query没有给我一个有效的URL

时间:2014-01-20 08:33:33

标签: php forms get

我有一个应用程序,它使用GET参数来呈现内容......产品列表的URL看起来像

appdomain.com/views/admin-panel.php?adminpage=product&task=list

我有这样的表格:

            <form style="display: inline-block;" action="admin-panel.php?<?php echo http_build_query($_GET) ?>" method="get">
                <?php 
                $search = !empty($_GET["search"]) ? $_GET["search"] : "";
                ?>
                <input type="text" name="search" value="<?php echo $search; ?>"/>&nbsp;&nbsp;
                <input type="submit" value="Buscar"/>
            </form>

当我发送它时,它应该看起来像:

appdomain.com/views/admin-panel.php?adminpage=product&task=list&search=<USERINPUT>

但实际上看起来像是:

appdomain.com/views/admin-panel.php?search=<USERINPUT>

所以...应用程序不起作用,因为缺少其他参数。

我在表单操作中做错了什么?

2 个答案:

答案 0 :(得分:1)

您应该使用表单的方法post来执行此操作。或者坚持使用get并使用隐藏字段

<form action="foo.php?<?php echo http_build_query($bar) ?>" method="post">

答案 1 :(得分:0)

使用您需要的参数获取干净URL并且没有重复的技巧是:

            <form style="display: inline-block;" action="admin-panel.php" method="get">
                <?php 
                foreach($_GET as $key=>$value) {
                    //Avoid duplicate parameters
                    if($key !== "search") {
                        ?>
                        <input type="hidden" name="<?php echo $key; ?>" value="<?php echo $value; ?>"/>
                        <?php
                    }
                }
                $search = !empty($_GET["search"]) ? $_GET["search"] : "";
                ?>
                <input type="text" name="search" value="<?php echo $search; ?>"/>&nbsp;&nbsp;
                <input type="submit" value="Buscar"/>
            </form>