【问题标题】:using addurlparameter to recreate querystring使用 addurlparameter 重新创建查询字符串
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 如果我手动设置该参数,它可以完美运行,但我的问题是该值是由用户输入设置的,他/她可以填写任何数字。在“udluftning_plast”字段的页面上,还有其他字段可以填写。所以我需要它来删除旧参数并用新参数替换它 - 或者如果你愿意,更新参数。跨度>
  • 嗯..这似乎不起作用!我必须在另一个地方出了点问题。
猜你喜欢
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多