$ _GET value или ошибка eregi? - PullRequest
0 голосов
/ 01 марта 2011

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

2 голосов
/ 01 марта 2011

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";
}
0 голосов
/ 01 марта 2011

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

Сначала вы можете использовать более конкретное регулярное выражение, чтобы избавиться от цикла.Это проверяет две альтернативы, 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";
}
0 голосов
/ 01 марта 2011

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

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

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

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

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

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

0 голосов
/ 01 марта 2011

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