2014-11-24 3 views
6

Каков наиболее эффективный способ проверки того, установлены ли переменные POST или нет?Проверьте, установлены ли переменные

Например, я собираю 10 переменных из Page 1, если они установлены, я хотел бы хранить эти данные на Page 2. Если нет, я хотел бы назначить 'не доступен'.

В настоящее время я использую if !empty, однако кажется, что должен быть более простой/эффективный метод, я довольно новичок в php, поэтому любые советы приветствуются.

Пример кода;

if (!empty($_POST["book"])) { 
    $book= $_POST['book'];  
}else{ 
    $book= 'not available'; 
} 

if (!empty($_POST["author"])) { 
    $author = $_POST['author'];  
}else{ 
    $author= 'not available'; 
} 

if (!empty($_POST["subtitle"])) { 
    $subtitle= $_POST['subtitle']; 
}else{ 
    $subtitle= 'not available'; 
} 

etc... 
etc... 
etc... 
+0

Знаете ли вы, что функция isset? Но имейте в виду, что переменная может быть установлена ​​и пуста в одно и то же время: $ a = "" пуст и задано – Serpes

+0

@Serpes да, однако это тот же принцип, если нет? –

+1

Они дают вам разные результаты, как я уже говорил – Serpes

ответ

9

Используйте петлю и переменные переменные.

$fields = array('author', 'book', 'subtitle', ....); 
foreach($fields as $field) { 
    if (isset($_POST[$field])) { 
     $$field = $_POST[$field]; // variable variable - ugly, but gets the job done 
    } else { 
     $$field = 'not available'; 
    } 
} 
+0

хорошая итерация, но 'isset! ==! Empty' –

+0

Поскольку у вас есть массив' $ fields', вы ограничиваете свой цикл ожидаемыми записями, поэтому избегаете потенциальных проблем из-за плохих запросов. +1 – TecBrat

+1

да, но OP сказал «SET», а не «не пустой». empty() - любая идиотская функция. empty (0) истинно, что делает любой код, связанный с инвентаризацией/деньгами/цифрами, уязвимым для ложных негативов. должен был быть вызван «is_castable_to_false()». –

0

Обычно я использую эту вспомогательную функцию:

function defa($array, $key, $default){ 
    if(isset($array[$key])){ 
     return $array[$key]; 
    }else{ 
     return $default; 
    } 
} 

Использование:

$book = defa($_POST, 'book', 'Not available'); 

Или, вы можете упростить, если вы только с помощью $ _POST массив:

function post_defa($key, $default){ 
    if(isset($_POST[$key])){ 
     return $_POST[$key]; 
    }else{ 
     return $default; 
    } 
} 

Использование:

$book = post_defa('book', 'Not available'); 
Смежные вопросы