PHP isset () с несколькими параметрами

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

Когда я заменю все иссеты только 1 $ _POST, сниппет ниже будет работать, однако, добавив еще $ _POST, я получу ошибку в строке 5.

<?php require_once '../Configuration.php'; if (isset($_POST['search_term'] . $_POST['postcode']) == true && empty ($_POST['search_term'] . $_POST['postcode']) == false) { $search_term = mysql_real_escape_string($_POST['search_term'] . $_POST['postcode']); $query = mysql_query("SELECT `customer_name`,`postcode` FROM `Customers` WHERE `customer_name` LIKE '$search_term%' "); while(($row = mysql_fetch_assoc($query)) !== false) { //loop echo '<li>',$row['customer_name'] . $row['postcode'] '</li>'; } } ?> 

Любые советы по поводу того, почему он выбрасывает эту ошибку, будут высоко оценены. Благодарю.

Я понимаю, что я должен использовать mysqli, я просто пытаюсь сначала получить логику 🙂

Js:

Primary.js:

 $(document).ready(function() { $('.autosuggest').keyup(function() { var search_term = $(this).attr('value'); var postcode = $_GET['postcode']; //alert(search_term); takes what is typed in the input and alerts it $.post('ajax/search.php', {search_term:search_term, postcode:postcode}, function (data) { $('.result').html(data); $('.result li').click(function() { var result_value = $(this).text(); $('.autosuggest').attr('value', result_value); $('.result').html(''); }); }); }); }); . $(document).ready(function() { $('.autosuggest').keyup(function() { var search_term = $(this).attr('value'); var postcode = $_GET['postcode']; //alert(search_term); takes what is typed in the input and alerts it $.post('ajax/search.php', {search_term:search_term, postcode:postcode}, function (data) { $('.result').html(data); $('.result li').click(function() { var result_value = $(this).text(); $('.autosuggest').attr('value', result_value); $('.result').html(''); }); }); }); }); 

Параметр (ы) для 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 

Btw, вы можете настроить фильтры, чтобы проверить различные части представленных значений.

Вам просто нужно:

 if (!empty($_POST['search_term']) && !empty($_POST['postcode'])) 

isset && !empty избыточно.

Параметры isset() должны быть разделены знаком запятой ( , ), а не знаком точки ( . ). Ваш текущий код объединяет переменные в один параметр, а не передает их как отдельные параметры.

Таким образом, исходный код оценивает переменные как унифицированное string значение:

 isset($_POST['search_term'] . $_POST['postcode']) // Incorrect 

Хотя правильная форма оценивает их отдельно как переменные:

 isset($_POST['search_term'], $_POST['postcode']) // Correct 

Используйте логический оператор OR (||) php для php isset() с несколькими операторами, например

 if (isset($_POST['room']) || ($_POST['cottage']) || ($_POST['villa'])) { }