この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を使用するパラメーターを使用することです。
すなわち:
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にはそのパラメーターが2つありますが、最後のパラメーターを使用しています-古いパラメーターを削除して新しい値に置き換えるために必要です。
次に、上記のリンクから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);
}