Отрицание strpos

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Есть ссылка вида:

site.ru/?parametr=znachenie

Нужно проверить наличие параметра и чтобы он совпадал с заданным. Т.е. если ссылка не будет содержать "parametr", делать редирект на главную.
Я уже замахался, потому что ничего не получается с этим сделать.

Варианты, которые я пробовал и которые у меня никак не хотят работать:

PHP:
if (isset($_GET[$parametr])){
    $pos = strpos($_SERVER['QUERY_STRING'],$parametr);
    if($pos === false) header("Location: /", TRUE, 301); 
}

PHP:
if (isset($_GET[$parametr])){
   if(!strpos($_SERVER['QUERY_STRING'],$parametr)) header("Location: /", TRUE, 301); 
}

PHP:
if (isset($_GET[$parametr])){
   $pos = strpos($_SERVER['QUERY_STRING'],$parametr); 
   if (!$pos) header("Location: /", TRUE, 301);
}

Я уже REQUEST_URI использовал и всевозможноые функции str, которые ищут в строке.
Я в тупике.

Не работает именно отрицание. Если найдено то, что мне нужно, то это работает, а если НЕ найдено, то не работает.

Подскажите плиз, где я косячу?
 
Последнее редактирование:
if (empty($_GET[$parametr])){
header("Location: /", TRUE, 301);
}
 
Не катит. Мне не нужно проверят наличие значения этого параметра. Мне нужно проверить наличие самого этого параметра. И если он отличается от заданного, то делать редирект.

К примеру если ссылка будет такая:
site.ru/?parametr=znachenie

или такая:
site.ru/?parametr=blabla

или такая:
site.ru/?parametr=obana

то мне ничего не нужно делать.

А если сам параметр изменится:
site.ru/?blablabla=znachenie

то делать редирект
 
Тогда !isset($_GET[$parametr]) но empty кроме наличия проверяет не пуста ли переменная.

да еще, header() должен вызываться до любого вывода в браузер, и после нужно делать выход - exit;
 
Последнее редактирование модератором:
Тогда !isset($_GET[$parametr]) но empty кроме наличия проверяет не пуста ли переменная.
Подобная конструкция приводит к циклическому редиректу. И он происходит даже при наличии exit();
да еще, header() должен вызываться до любого вывода в браузер, и после нужно делать выход - exit;
Всё это есть.
 
Эм, никого не смущает $_GET[$parametr] вместо $_GET["parametr']?
Может все проблемы в этой опечатке?
 
PHP:
if (isset($_GET[$parametr])){
    $pos = strpos($_SERVER['QUERY_STRING'],$parametr);
    if($pos === false) header("Location: /", TRUE, 301);
}
- это должно работать. Либо у тебя какие-то символы, с которыми strpos не работает. Ещё, возможно, надо urlencode($parametr) в strpos. Так как urlencode($a) часто не равно $a

Может ты ищешь p=Вася, а в адресе
p=%D0%92%D0%B0%D1%81%D1%8F

Для просмотра ссылки Войди или Зарегистрируйся

PS. Когда что-то идёт не так, делай var_dump :D

А вообще, я не понял для чего strpos. Если есть $_GET[$parametr], то он будет в server[query_string]

---------------

А если к этому: Нужно проверить наличие параметра и чтобы он совпадал с заданным. То
Код:
$parametr = 'p';
if (isset($_GET[$parametr]) and $_GET[$parametr] !== 'apple'){
   header("Location: /", TRUE, 301);
}

Если параметр есть и он не равен apple, то редирект.
 
Последнее редактирование:
А может, сделать это средствами Apache htaccess?
 
Назад
Сверху