12

多数のパラメーター、つまり値を持つ変数に従ってアイテムをリストするページがあります。

listitems.php?color=green&size=small&cat=pants&pagenum=1 etc.

リストの編集を有効にするために、上記のクエリ文字列に追加されるパラメーター edit=1 を使用して、次のように指定します。

listitems.php?color=green&size=small&cat=pants&pagenum=1&edit=1

ここまでは順調ですね。

ユーザーが編集を完了すると、編集モードを終了するリンクが表示されます。このリンクでクエリ文字列全体を指定する必要があります-これはユーザーの選択に左右されるため、それが何であれ-edit = 1を削除することを除いて.

変数が数個しかなかったときは、リンクに手動でリストアップしましたが、変数が増えたので、プログラムで edit=1 を削除できるようにしたいと思います。

edit=1 を検索してから、何も置き換えないでください。

$qs = str_replace("&edit=1, "", $_SERVER['QUERY_STRING']);
<a href='{$_SERVER['PHP_SELF']}?{$qs}'>return</a>;

または、これを行うための最もクリーンでエラーのない方法は何でしょうか。

注:ページ番号を取り出して別のものに置き換えたいページからページに移動するときに、同様の状況があります。そこでは、pagenum が異なるため、pagenum=1 を検索することはできませんがpagenum =$pagenum、違いがあるかどうかを検索する必要があります。

ありがとう。

4

4 に答える 4

26

私はhttp_build_queryを使用します。これは、パラメーターの配列を適切に受け入れ、正しくフォーマットします。$_GET編集パラメーターを設定解除し、残りをこの関数にプッシュすることができます。

コードに への呼び出しがないことに注意してくださいhtmlspecialchars()。URL には、HTML でアクティブな文字を含めることができます。したがって、リンクに出力する場合: Escape!

いくつかの例:

unset($_GET['edit']); // delete edit parameter;
$_GET['pagenum'] = 5; // change page number
$qs = http_build_query($_GET);

... output link here.
于 2013-06-15T10:30:02.047 に答える
0

edit=1が最初の変数の場合は機能しません。

listitems.php?edit=1&color=green&...

この$_GET変数を使用して、クエリ文字列を自分で作成できます。何かのようなもの:

$qs = '';
foreach ($_GET as $key => $value){
    if ($key  == 'pagenum'){
        // Replace page number
        $qs .= $key  . '=' . $new_page_num . '&';
    }elseif ($key  != 'edit'){
        // Keep all key/values, except 'edit'
        $qs .= $key  . '=' . urlencode($value) . '&';
    }
}
于 2013-06-15T10:28:34.813 に答える