$_GET value или ошибка eregi?

Я не уверен, где моя проблема. У меня есть скрипт с параметрами (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 ответа

Решение

Вы не должны использовать 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"]));
}

eregi амортизируется с php 5.

Вместо этого используйте 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";
}

Когда URL-адрес такой

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

Ваш $_GET["isms_restemsg"] пусто

следовательно if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))

второй аргумент передается как нулевой в eregi функция

eregi не рекомендуется прекратить использование его заменить на preg_match

Я еще не совсем уверен, но, возможно, есть и другие способы добиться того, что вы пытаетесь сделать.

Во-первых, вы можете использовать более конкретное регулярное выражение, чтобы избавиться от цикла. Это проверяет две альтернативы, STOP и пустую строку (это, вероятно, то, что не удалось с вашим eregi тестовое задание).

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

Или, поскольку вам нужно проверить только по двум значениям:

if (in_array(strtoupper($_GET["isms_restemsg"]), array("STOP", "")) {
   $found_keyword = "Y";
}
Другие вопросы по тегам