0

我正在尝试使用此 php 中的 addUrlParameter 函数-在 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为值的参数

IE:

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 函数删除了设置新值的查询字符串开头的每个重复参数。所以这可能是问题所在。我究竟做错了什么?

如果我 var_dump($url_data) 在 addUrlParameter 的开头,我会得到这个带有所有参数的 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);
}
4

1 回答 1

0

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

如果你要执行

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

$myNewUrl 将是

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...

于 2013-02-21T13:33:30.897 回答