Я пытаюсь работать с автозаполнениями 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'])) { }