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




поиск тегов (5)

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

Когда я заменю все issets только на 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('');

        });
    });
});
});

Answers

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

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

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


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

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

}

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

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


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

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

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

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

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

Предупреждение: ограничение open_basedir

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

Когда он появляется, это означает, что доступ был запрещен для некоторых файлов.

Само предупреждение не нарушает ничего, но чаще всего скрипт не работает должным образом, если предотвращается доступ к файлу.

Обычно исправление изменяет конфигурацию PHP , связанная с ней настройка называется open_basedir .

Иногда используются неправильные имена файлов или каталогов, тогда исправление должно использовать правильные.

Связанные вопросы:







php mysql ajax