Php 使用addurlparameter重新创建querystring

Php 使用addurlparameter重新创建querystring,php,string,url,parameters,Php,String,Url,Parameters,我正试图使用这个函数中的addUrlParameter函数 但我就是不能让它对我的具体问题起作用,我绝望地希望有人能帮助我 到目前为止,我正在使用它来处理表单并从表单帖子创建URL $get_elements = array_filter($_GET, "strlen"); $url = http_build_query($get_elements); $search_pattern = array(); $search_pattern[0] = "/([?&]new

我正试图使用这个函数中的addUrlParameter函数

但我就是不能让它对我的具体问题起作用,我绝望地希望有人能帮助我

到目前为止,我正在使用它来处理表单并从表单帖子创建URL

$get_elements = array_filter($_GET, "strlen");        
$url = http_build_query($get_elements);

$search_pattern = array();
$search_pattern[0] = "/([?&]newpage)=[^&]*/";
$search_pattern[1] = "/([?&]next)=[^&]*/";

$search_replacements = array();
$search_replacements[0] = '';
$search_replacements[1] = '';

$new_url = preg_replace($search_pattern, $search_replacements, $url);
header("Location: index.php?page=". $_GET["newpage"] ."&".$new_url);
这很好,但是当我后退一步并为某个参数输入一个新值时,新URL中的新值不会更新,而是使用旧值

假设我填写了我想要某个产品的4个项目,并将该表格发布到下一页。然后我意识到我拥有该产品的7项——然后我后退一步,输入7项并再次发布。我的问题是,它不会用7更新该产品的参数,它只是插入一个同名的新参数,值为7,但最终url使用的参数值为4

i、 e:

本例中的参数为
udluftning\u plast
-URL有两个该参数,但使用最后一个-我需要它删除旧参数并用新值替换它

然后我尝试从上面的链接中使用addurlparmeter函数,但我就是无法让它工作

这里需要技巧的部分是,在页面上填写大量的项目,其中有不同的项目需要更新,因此它应该以某种方式动态更新url

编辑:

我可以看到addUrlParameter函数删除了设置新值的查询字符串开头的每个dublicate参数。所以这可能就是问题所在。我做错了什么

如果我在addUrlParameter的开头使用var_dump($url_data),我将获得包含所有参数的此url:

array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(22) "www.domain.com" ["path"]=> string(19) "/ny/formhandler.php" ["query"]=> string(431) "vent_45=&udluftning_plast=6&udluftning_fald=&udluftning_ventitegl=2&tagfod=fuglegitter&chimney_afstand_tagrende=&vent_45=&udluftning_plast=4&udluftning_fald=&udluftning_ventitegl=2&tagfod=fuglegitter&chimney_afstand_tagrende=&afslutning_sten=dv&topsten=utop&angle_1=45&mainhouse=1&house=1&rooftype=mu&lang=dk&rooftiletype=1&rid=1&producent=h&newpage=venting&next=N%C3%A6ste+trin+%C2%BB&newpage=inputdims&next=N%C3%A6ste+trin+%C2%BB" }
当我在函数末尾使用var_dump($url_data)时,我将获得此url,并删除更新后的参数:

array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(22) "www.domain.com" ["path"]=> string(19) "/ny/formhandler.php" ["query"]=> string(274) "vent_45=&udluftning_plast=4&udluftning_fald=&udluftning_ventitegl=2&tagfod=fuglegitter&chimney_afstand_tagrende=&afslutning_sten=dv&topsten=utop&angle_1=45&mainhouse=1&house=1&rooftype=mu&lang=dk&rooftiletype=1&rid=1&producent=h&newpage=inputdims&next=N%C3%A6ste+trin+%C2%BB" }
我这样调用函数:

foreach($_GET as $key => $value) {      
    addURLParameter("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", $key, $value);
}

addURLParameter是一个函数,它返回一个新url,并在提供的url中插入一个新参数,或者(如果该参数已存在于提供的url中)使用一个新值更新现有参数

所以,如果你有:

$myUrl = http://www.mysite.com/mypage.php?a=1&b=2
你执行了死刑

$myNewUrl = addURLParameter($myUrl, "c", 99);
$myNewUrl将是

http://www.mysite.com/mypage.php?a=1&b=2&c=99
http://www.mysite.com/mypage.php?a=1&b=99
如果你要执行

$myNewUrl = addURLParameter($myUrl, "b", 99);
$myNewUrl将是

http://www.mysite.com/mypage.php?a=1&b=2&c=99
http://www.mysite.com/mypage.php?a=1&b=99
因此,如果您需要根据表单提交传入的值仅更新“udluftning_plast”:

$udluftning_plast_val = $_GET["udluftning_plast"];
$url = addURLParameter("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", "udluftning_plast", $udluftning_plast_val);

如果提交表单时“udluftning_plast”字段的值为99,那么$url将包含对udluftning_plast的单个引用:
…&udluftning_plast=99…

如果我这样做:addURLParameter(“http://$\u SERVER[http\u HOST]$\u SERVER[REQUEST\u URI],“udluftning\u plast”,7);它可以工作,但这显然是非常错误的,因为我不知道将更新哪些参数以及哪些值。实际上,这正是您想要做的-函数要么添加新参数,要么更新现有参数。哦。。。你能告诉我如何更新现有参数的正确方向吗?有关表单提交示例,请参阅我的更新答案。如果我手动设置该参数,效果会很好,但我的问题是该值是由用户输入设置的,他/她可以填写任何数字。在“udluftning_plast”字段所在的页面上,还可以填写其他字段。因此,我需要它删除旧参数并用新参数替换它-或者更新参数,如果你愿意的话。嗯。。那好像不管用!我一定是在别的地方出了什么事。