具有多个参数的 PHP isset()

2022-08-30 11:58:09

我正在尝试使用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:

主要.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('');

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

答案 1

要的参数必须是变量引用而不是表达式(在您的情况下是串联);但您可以将多个条件组合在一起,如下所示:isset()

if (isset($_POST['search_term'], $_POST['postcode'])) {
}

仅当 所有参数已设置且不包含 时,才会返回。trueisset()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

顺便说一句,您可以自定义过滤器以检查提交值的各个部分。


答案 2

的参数应以逗号 () 分隔,而不是点号 ()。当前代码将变量连接成单个参数,而不是将它们作为单独的参数传递。isset(),.

因此,原始代码将变量作为统一值进行评估:string

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

虽然正确的形式将它们单独评估为变量:

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

推荐