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
ここで何が起こっているのですか????
どうすれば修正できますか?