4

このようなコードがあるとしましょう

if(isset($_GET['foo']))
  //do something

if(isset($_GET['bar']))
  //do something else

ユーザーが example.com/?foo=abc にいて、リンクをクリックして bar=xyz を設定した場合、example.com/?bar ではなく、example.com/?foo=abc&bar=xyz に簡単に移動したいと考えています。 =xyz.

これを行うためのいくつかの非常に面倒な方法を考えることができますが、私が知らない、Google 経由で追跡できなかった、よりクリーンな方法があると確信しています。

4

5 に答える 5

2

これが一つの方法です....

//get passed params
//(you might do some sanitizing at this point)
$params=$_GET;

//morph the params with new values
$params['bar']='xyz';

//build new query string
$query='';
$sep='?';
foreach($params as $name=>$value)
{
    $query.=$sep.$name.'='.urlencode($value);
    $sep='&';
}
于 2008-12-11T23:18:44.777 に答える
1

クエリ文字列を更新する場合は、次のようなことをしないようにする必要があります

$qs="a=1&b=2";
$href="$qs&b=4";
$href contains "a=1&b=2&b=4"

本当にやりたいことは、必要に応じて現在のキーを上書きすることです。こんな機能が使えます。(免責事項:頭のてっぺんから外れているため、少しバグがある可能性があります)

    function getUpdateQS($key,$value)
    {
       foreach ($_GET as $k => $v)
       {
            if ($k != $key)
            {
                $qs .= "$k=".urlencode($v)."&"
            }
            else
            {
                $qs .= "$key=".urlencode($value)."&";
            }
        }
        return $qs
    }

    <a href="reports.php?<?getupdateqs('name','byron');?">View report</a>
于 2008-12-11T23:19:19.457 に答える
0

いくつかのコードを保存し、組み込みのhttp_build_queryを使用します。私は自分のプロジェクトの1つでこのラッパーを使用しています。

function to_query_string($array) {
    if(is_scalar($array)) $query = trim($array, '? \t\n\r\0\x0B'); // I could split on "&" and "=" do some urlencode-ing here
    else $query = http_build_query($array);
    return '?'.$query;
}

また、あまり使用されませんが、割り当ての左側に$_GETを設定できます。

$_GET['overriden_or_new'] = 'new_value';
echo '<a href="'.to_query_string($_GET).'">Yeah!</a>';

それ以外は、ポール・ディクソンが言ったことをしてください。

于 2008-12-12T00:22:46.707 に答える
0

foo が既に設定されている場合は、bar を xyz に変更するリンクを foo=abc に設定するだけです。

$link = ($_GET['foo'] == 'abc') ? 'foo=abc&bar=xyz' : 'bar=xyz';
?>
<a href="whatever.php?<?= $link ?>">Click Me</a>
于 2008-12-11T23:06:34.193 に答える
0

そのためには、適切な URL クエリ文字列を使用してリンクをレンダリングする必要があります。これは、システムのセットアップ方法に応じて、最終的に行う必要がある設計上の決定です。

この問題を抱えているサイトがいくつかありますが、現在のページ データをページ リクエストの先頭に設定するクエリ文字列グローバル変数を設定しています。

次に、ページをレンダリングするときに、現在のクエリ文字列を利用する必要がある場合は、次のようにします。

echo '<a href="myurl.php' . querystring . '&bar=foo';

これは最もクリーンというわけではありませんが、すべてシステムの動作に依存します。

于 2008-12-11T23:07:12.320 に答える