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を使用するパラメーターを使用することです。

すなわち:

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);
}
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);

フォームが99の値を持つ「udluftning_plast」フィールドで送信された場合、$urlにはudluftning_plastへの単一の参照が含まれます。...&udluftning_plast=99...

于 2013-02-21T13:33:30.897 に答える