Параметърът(ите) към isset()
трябва да бъде препратка към променлива, а не израз (във вашия случай конкатенация); но можете да групирате няколко условия заедно по следния начин:
if (isset($_POST['search_term'], $_POST['postcode'])) {
}
Това ще върне true
само ако всички аргументи към isset()
са зададени и не съдържат null
.
Обърнете внимание, че isset($var)
и isset($var) == true
имат същия ефект, така че последното е малко излишно.
Актуализиране
Втората част на вашия израз използва empty()
така:
empty ($_POST['search_term'] . $_POST['postcode']) == false
Това е погрешно поради същите причини като по-горе. Всъщност нямате нужда от empty()
тук, защото по това време вече бихте проверили дали променливите са зададени, така че можете да направите бърз достъп до пълния израз по следния начин:
isset($_POST['search_term'], $_POST['postcode']) &&
$_POST['search_term'] &&
$_POST['postcode']
Или с помощта на еквивалентен израз:
!empty($_POST['search_term']) && !empty($_POST['postcode'])
Последни мисли
Трябва да помислите за използването на filter
функции за управление на входовете:
$data = filter_input_array(INPUT_POST, array(
'search_term' => array(
'filter' => FILTER_UNSAFE_RAW,
'flags' => FILTER_NULL_ON_FAILURE,
),
'postcode' => array(
'filter' => FILTER_UNSAFE_RAW,
'flags' => FILTER_NULL_ON_FAILURE,
),
));
if ($data === null || in_array(null, $data, true)) {
// some fields are missing or their values didn't pass the filter
die("You did something naughty");
}
// $data['search_term'] and $data['postcode'] contains the fields you want
Между другото, можете да персонализирате филтрите си, за да проверявате за различни части от подадените стойности.