0

PHPが他のページで順番どおりに呼び出されないように保護しようとしています。過去にこれを行うために、最初のページで定数を設定し、後続のページで定数が存在するかどうかを確認しました。これは今までかなりうまくいきました。これで、条件付き定数を設定する必要がある状況になりました。最初のファイルでは、値定数値が設定されています-つまり

define('FOO','bar');
define('FOO2', 'bar2');

次のページでは、定数を確認します。

if (!defined('FOO'))
{
echo "Hack Attack";
} 

if (defined('FOO2'))
{
echo "Do Something Else";
} 

これは正常に機能します。問題は、「FOO2」が次のように条件付きである必要があることです。

define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
  define('FOO2', bar2');
}

さて、これはうまくいくはずであり、2より大きい数をページに渡すと、定数「foo2」が作成されるはずです。実際には作成されていますが、この関数の外部には存在せず、その目的をほとんど無効にしています。

これをテストするために、コードに「エコー」を入れました。

define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2)
{
  echo $vid;
  echo '<br />';
  echo FOO;
  define('FOO2', bar2');
  echo '<br />' ;
  echo FOO2;
}

このページに値3を渡すと、次の出力になります。

3

バー

bar2

まさにあなたが期待するもの。ただし、プログラムの2番目の部分は機能しません。

そこで、2番目の部分にいくつかの同様の「echo」ステートメントを挿入しました。

if (!defined('FOO'))
{
echo "Hack Attack";
} else {
echo FOO;
echo '<br />';
}

if (defined('FOO2'))
{
echo "Do Something Else";
} else {
echo FOO2;
}

ここでの結果は次のとおりです。

バー

FOO2

私が期待したものではありません。そこで、最初の部分で条件を削除し、両方の部分を再実行しました。

define('FOO','bar');
$vld = $_GET['pageno'];
// if ($vld>2)
// {
  echo $vid;
  echo '<br />';
  echo FOO;
  define('FOO2', bar2');
  echo '<br />' ;
  echo FOO2;
// }

この部分の結果は以前と同じでした:

3

バー

bar2

ただし、2番目の部分では大幅に異なります。

バー

bar2

ここで何が起こっているのですか????

どうすれば修正できますか?

4

2 に答える 2

1

あなたのスクリプトに問題はありません。あなたが正しく理解している場合、あるページを別のページに含めていることを意味します。

最初の部分では:

if (!defined('FOO')){
  echo "Hack Attack"; // Echoed when FOO is not defined
} else {
  echo FOO; // Echoed when FOO is defined
  echo '<br />';
}

が定義され"bar2"ている場合のみエコーするため、エコーします。FOO

"FOO2"ただし、 whenFOO2 が定義されていない場合にのみエコーするため、2 番目の部分はエコーします。

if (defined('FOO2')){
  echo "Do Something Else"; // Echoed when FOO2 is defined
} else {
  echo FOO2; // Echoed when FOO2 is not defined
}

定義されていない定数をエコーし​​ようとすると、その名前だけが表示されます。

于 2013-01-08T00:50:52.710 に答える
0

リテラル'bar2'は次のように記述されており、ステートメントbar2'内で bar2 を定義する例では開始の目盛りがありません。if

define('FOO','bar');
$vld = $_GET['pageno'];
if ($vld>2) 
{
  echo $vid;
  echo '<br />';
  echo FOO;

  //Are you sure this is what you want - bar2' without a beginning tick?
  define('FOO2', bar2');
  echo '<br />' ;
  echo FOO2;
}
于 2013-01-08T00:45:01.030 に答える