$_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";
}