【发布时间】:2013-02-21 08:44:40
【问题描述】:
我正在尝试从此使用 addUrlParameter 函数 php - add/update a parameter in a url
但我无法让它解决我的具体问题,我绝望地希望有人可以帮助我。
到目前为止,我正在使用它来处理表单并从表单帖子创建 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作为值的参数
即:
http://www.domain.com/formhandler.php?vent_45=&udluftning_plast=7&udluftning_fald=&udluftning_ventitegl=&tagfod=fuglegitter&chimney_afstand_tagrende=&udluftning_plast=4&tagfod=fuglegitter&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
本例中的参数是 udluftning_plast - URL 有两个该参数,但使用最后一个 - 我需要它来删除旧参数并将其替换为新值。
然后我尝试使用上面链接中的 addUrlParameter 函数,但我无法让它工作。
这里的棘手部分是在页面上填写项目数量有一个不同的项目要更新,所以它应该以某种方式动态更新 url。
编辑:
我可以看到 addUrlParameter 函数删除了设置新值的查询字符串开头的每个重复参数。所以这可能是问题所在。我做错了什么?
如果我在 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("http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", "udluftning_plast", 7);它有效,但这显然是非常错误的,因为我不知道参数将被更新以及使用哪些值。
-
实际上,这正是您想要做的 - 该函数要么添加新参数,要么更新现有参数。
-
哦...您能指导我正确地了解如何更新现有参数吗?
-
查看我的更新答案以获取表单提交示例。
标签: php string url parameters