$ _GET и isset () - PullRequest
       7

$ _GET и isset ()

0 голосов
/ 31 августа 2010

Я получаю суд над if isset($_GET['whatever'])... до конца моего заявления if.Ошибки E_NOTICE удобны для отключения, и для $_POST переменных у меня есть решение в моем скрипте инициализации ..

$POST = (is_array( $_POST ) && count( $_POST ) > 0);

Я считаю, что это помогает самим скриптам постинга выглядеть чистыми.

if ($POST) {
    // now do something with $_POST...
}

Я не уверен, как это сделать динамически, если вы не знаете, что это за ключ?Может кто-нибудь помочь найти подобное решение для $_GET переменных?

РЕДАКТИРОВАТЬ:

Я просто хочу if ($_GET['whatever'] == "whatever");, чтобы вернуть false, если он не установлен, и нет E_NOTICE ошибки.

РЕДАКТИРОВАТЬ:

Извините, если неясно, я ищу решение для $_GET не $_POST - я использую только$_POST как пример того, чего я надеюсь достичь.

Ответы [ 8 ]

10 голосов
/ 31 августа 2010

Иногда я использую глобальную GET функцию:

function GET($key, $default = null) {
    return isset($_GET[$key]) ? $_GET[$key] : $default;
}
2 голосов
/ 01 сентября 2010

Уже ответил, но так как он не был упомянут, также попробуйте:

$var = filter_input(INPUT_GET, 'varname');

Это вернет ноль, если он не существует, без уведомлений о раздражающем массиве, а также отфильтровывает потенциально плохие вещи различными способами. Смотрите также: http://www.php.net/filter

2 голосов
/ 31 августа 2010

Основная идея всего этого беспорядка проста: каждая переменная в вашей программе должна быть инициализирована перед использованием.
Таким образом, лучшее, что вы можете сделать, это установить все переменные централизованно, скажем, в самом верху вашего скрипта.

Но есть несколько разных случаев. Для случая, который вы разместили, вам не нужно ничего из этого, но

if ($_SERVER['REQUEST_METHOD'] == "POST")
1 голос
/ 01 сентября 2010

Вот два метода.

/*
* Makes any request keys into variables of the same name
*/
foreach($_GET AS $key => $value) {
    ${$key} = ($value);
}    

//Assuming a input key of $_GET['whatever'] 
echo $whatever;

/*
* Casting to an object
*/
$get = (object) $_GET;

//Assuming a input key of $_GET['whatever'] 
echo $get->whatever

Третий вариант, о котором я могу подумать, это сделать $ _GET своим собственным классом. Перегрузка PHP - удобный трюк для этого.

http://php.net/manual/en/language.oop5.overloading.php

Мне не хотелось писать пример, демонстрирующий это. :)

1 голос
/ 31 августа 2010

Вы можете сделать функцию, чтобы сделать это для вас.

function getVar($item){
    return isset($_GET[$item]) ? $_GET[$item] : '';
}

Тогда вы можете сделать if(getVar('whatever') == "whatever").

0 голосов
/ 23 сентября 2011
  • короткая
  • без уведомления

    $key = &$_POST['key'];

Таким образом (внутри функции) она отвлекается, ипоказывает ошибку:

function f($s){}
f(&$_POST['key']);

Неустранимая ошибка: удалена ссылка на время вызова

0 голосов
/ 31 августа 2010

просто, я думаю, что вы хотите проверить, установлено ли значение get, затем нужно сделать следующий шаг, в противном случае сделайте иначе

Мне нравится первый ответ, но мне нужно проверить, если он работает,

if (isset ($ _ GET ['what']) {if ($ _GET ['what'] == "что угодно"); {// делать все остальное} else {// делать все остальное}}

надеюсь, что это может помочь, если я думаю, что вам нужно

0 голосов
/ 31 августа 2010

При написании таких сценариев я обычно делаю что-то вроде этого вверху:

$submitted = isset($_POST['submit']) ? true : false;
$username = isset($_POST['username']) ? $_POST['username'] : null;
$password = isset($_POST['password']) ? $_POST['password'] : null;
(etc.)

Затем, при проверке значений, это выглядит примерно так:

if ($submitted)
{
    if ($username && $password)
    {
        // do stuff with username and password including testing their values
    }
}

Кажется, это работает очень хорошо для меня.

...