1

<div>値に応じて異なるPHPファイルを含めるコンテンツがあり$_GETます...たとえば、/index.php?type=foo&action=bar。いくつかのテーブルデータと次のような単純なページ付けを含むPHPファイルを含めようとしています

$paginate .= "<a href='$target&page=$prevPage'>previous page</a>";

どこ$target = $_SERVER[ 'REQUEST_URI' ];。次/前のページに移動するたびにURLが重複することを除いて、希望どおりに機能します。例: /index.php?type=foo&action=bar&page=2&page=3&page=4&page=3&page=2など...使用すると、追加のパラメータなしで$_SERVER["PHP_SELF"]元に戻ります\index.php$_GET

なぜこれが起こっているのかわかりますが、良い回避策はありますか?

4

2 に答える 2

0

これを試して :

$target = $_SERVER[ 'REQUEST_URI' ];
$target = preg_replace('/&page=\d*/',"",$target);
$paginate .= "<a href='$target&page=$prevPage'>previous page</a>";

ページ名を付けた方が良い:

変化 :

$target = $_SERVER[ 'REQUEST_URI' ];

に :

$target = 'your_page.php';
于 2013-03-07T09:45:30.083 に答える
0

ユーザー入力を使用して URI を作成すると、セキュリティ上の問題が発生する可能性があることに注意してください。

私の意見では、リクエストをデコードする必要があります-たとえば、配列に。次に、値を編集して、新しいクエリ文字列を作成できます。

$cur = $_GET;
$cur['page'] = 7;
$new = array();
foreach ($cur as $key=>$val) {
  // Possily you need to remove magic quotes, here
  $new[] = url_encode($key).'='.url_encode($val);
}
$target = 'index.php?'.implode('&', $new);

また、固定のファイル名を使用することをお勧めします。$_SERVER["PHP_SELF"] の使用は、スクリプト名が変更される可能性が高い場合にのみ意味があります。通常、これは当てはまりません。

また、$_GET または $_REQUEST から事前に指定された変数を収集することも検討してください。これにより、セキュリティの発行が回避されます。

于 2013-03-07T09:49:56.327 に答える