2011-07-27 9 views
2

ここで問題を持って....

私はURL文字列に$変数を「追加」と「引く」ための良い方法を見つけるように見えることはできません....ここ

は私の例であります私は別の$ヴァリアーを追加したい場合は、

$currentPage = $_SERVER['PHP_SELF']; 

::私は私が持っているソースコードについてはhttp://mywebsite.com/index.php?y=2011

を持っているURLで

私はこれを試してきました...:

echo '<a href="$currentPage.&t=col">College</a>'; 

しかし、現在のURLの値を保持していません。

それが表示されます。http://mywebsite.com/index.php?&t=col代わりの

http://mywebsite.com/index.php?y=2011&t=col($ yを変数を保持しません)

私はまた、任意のリンクによって$ yと$ tの変数を変更する方法を見つける必要がある

、現在の$ t変数をそのままにして、2010年、または2009年に簡単に変更できます。???

ありがとうございます!

ここは私が大きな助けから思いついたものです!

$url = "http://www.mywebsite/index.php?"; 
foreach($_GET as $key=>$val){ 
$url.="$key=$val&"; } 
echo '<a href="' . htmlspecialchars($url . 't=col') . '">College</a>'; 
+0

PHP_SELFにはクエリ文字列が含まれていません。 $ _GETを使用してクエリ文字列を再構築し、それを自分で追加する必要があります。 –

答えて

3

あなたが知っているかもしれませんが、URLを通過したすべての変数は、$ _GET配列に利用できます。 そのため、あなたはこのようなものを使用してリンクを設定することができます。

$url = "http://site.com/index.php?"; 
foreach($_GET as $key=>$val){ 
$url.="$key=$val&"; } 

これは、あなたにも、特定の変数をチェックし、悪意を持ったユーザによって追加されるかもしれないそのいくつかを取り除くことの利点を提供します。 $キーは、私はあなたの質問は、実際にURL操作に関連しているとは思わないトンまたはy

+0

これは私の意見では正しい方向です、y変数とt変数ロジックをforループに入れることができます。 –

+0

それはそれです!すばらしいです!本当にありがとう! – eberswine

0
echo '<a href="$currentPage.?y=$_GET[\'y\'].&t=col">College</a>'; 
+0

これはXSS攻撃に対して非常に脆弱です。 – erisco

+0

私はOPがそれを守ると仮定しています。 – Phil

1

のいずれかが含まれますよう、それはまた、あなたがそれに応じて変数を変更することができます。主にPHP構文の基本的な問題です。 PHPでは、一重引用符で囲まれた文字列と二重引用符で囲まれた文字列は、別々に扱われます。二重引用符で囲まれたもので、あなたが変数補間を取得する、あなたは他のタイプでは得られない何かが:

$foo = 'world!'; 
echo "Hello, $foo"; // Prints «Hello, world!» 
echo 'Hello, $foo'; // Prints «Hello, $foo» 

しかし、それはすべて二重引用符で囲まれた文字列は、特にしているのです。あなたは、文字列内の任意のPHPコードを挿入し、それが実行され得ることができません。

echo "Size: strlen($foo) . 'chars'"; // Will *not* print «Size: 6 chars» 

あなたはPHPマニュアルのStrings章の完全な参照を取得することができます。あなたはこれらの概念に精通しているならば、あなたがすることが容易に見つける必要があり

echo 'Hello, ' . $foo; // Prints «Hello, world!» 

また、あなたは.演算子(String Operatorsを参照)で文字列を連結することができます。

+0

私はこれがeberswineが持つ問題ではないと思います。 – erisco

+0

@eriscoなら、なぜこれがうまくいくと思っているのですか? 'echo 'College'; ' –

+0

正しい引用符が使用されていることを確認する必要がありますが、彼は' http://mywebsite.com/ index.php?&t = col'を出力します。いずれにしても、彼は '$ _SERVER ['PHP_SELF']'にはクエリ文字列が含まれていないという問題に直面します。 – erisco

1

http_build_query()関数を使用して、クエリを再構築し、必要な追加パラメータを追加することができます。

// build the query data 
$queryData = array(
    'y' => $_GET['y'], 
    't' => 'col', 
); 
// get the query string 
$queryString = http_build_query($queryData); 

// ... somewhere later in the script 
// we remember to escape HTML characters. as long as $currentPage has characters 
// and cannot be manipulated by the client (which, if it is coming from PHP_SELF, it 
// cannot be afaik), we should be safe 
echo '<a href="' . htmlspecialchars($currentPage . $queryString) . '">College</a>'; 
関連する問題