0

どこに問題があるのか​​わかりません。私は次のようなパラメータ(GET)で呼び出されたスクリプトを持っています:

http://www.xxx.com?isms_restemsg=STOP&value=1

これが私のコードです:

$keyword_allowed = array("STOP", "");

$found_keyword = "N";
$keyword_cf = "";
for($i=0; $i < 2; $i++)
{
    if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))
    {
        $found_keyword = "Y";
        $keyword_cf = $keyword_allowed[$i];
    }
}

質問:呼び出されたURLが次の場合に何が起こったのか:

http://www.xxx.com?isms_restemsg=&value=1

この場合、eregi命令で何が起こったのか。

$ found_keyword = "N"であるため、この質問をしています。「Y」である必要がありますか、それともエラーがありますか?

はいの場合、あなたは私を助けることができますか?

4

4 に答える 4

2

eregiはphp5の時点で減価償却されています。

代わりにstristrを使用してください

 if (stristr($keyword_allowed[$i], $_GET["isms_restemsg"]))

またはさらに良いことに、array_search

$keyword_allowed = array("STOP", "");
$found_keyword = "N";

if(($keyword_c = array_search($_GET["isms_restemsg"], $keyword_allowed)) !== false) {
    $found_keyword = "Y";
}
于 2011-03-01T10:11:24.180 に答える
0

は非推奨eregi()であるため、使用しないでください。

結局、正規表現が必要なようには見えません。

試してみるstristr()か、単純な比較構文を試してみてください。

if ($keyword_allowed[$i] == $_GET["isms_restemsg"])

(これを自分で作成する場合は、おそらくGET値も制御できます。)


このような場合は、デバッグ出力をエコーすることで解決できます。

print_r($_GET);
for($i=0; $i < 2; $i++)
{
    echo eregi($keyword_allowed[$i], $_GET["isms_restemsg"]));
}
于 2011-03-01T10:10:29.453 に答える
0

URLがこんな感じのとき

http://www.xxx.com?isms_restemsg=&value=1

あなた$_GET["isms_restemsg"]は空白です

したがって、 if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))

2番目の引数はeregi関数でnullとして渡されます

eregi非推奨です使用を停止し、に置き換えますpreg_match

于 2011-03-01T10:11:53.323 に答える
0

まだよくわかりませんが、あなたがやろうとしていることを達成する方法はおそらく他にもあります。

まず、より具体的な正規表現を使用してループを取り除くことができます。これにより、STOPと空の文字列の2つの選択肢がチェックされます(これはおそらくeregiテストで失敗したものです)。

if (preg_match('/^(STOP | )$/ix', $_GET["isms_restemsg"], $r))
{
    $found_keyword = "Y";
    $keyword_cf = $r[0];
}
else {
    $found_keyword = "Y";
}

または、2つの値に対してのみチェックする必要があるため:

if (in_array(strtoupper($_GET["isms_restemsg"]), array("STOP", "")) {
   $found_keyword = "Y";
}
于 2011-03-01T10:13:49.063 に答える