Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个参数的PHP isset()_Php_Mysql_Ajax - Fatal编程技术网

具有多个参数的PHP isset()

具有多个参数的PHP isset(),php,mysql,ajax,Php,Mysql,Ajax,我正在尝试使用AJAX autocompletes,但在让这两种语言协同工作时遇到了一些问题 当我用1$\u POST替换所有的ISSET时,下面的代码段可以工作,但是通过添加另一个$\u POST,我在第5行得到一个错误 <?php require_once '../Configuration.php'; if (isset($_POST['search_term'] . $_POST['postcode']) == true && empty ($_POST['se

我正在尝试使用AJAX autocompletes,但在让这两种语言协同工作时遇到了一些问题

当我用1$\u POST替换所有的ISSET时,下面的代码段可以工作,但是通过添加另一个$\u 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>';
}
}


?>

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

因此,原始代码将变量计算为统一的
字符串
值:

isset($_POST['search_term'] . $_POST['postcode']) // Incorrect
而正确的形式将它们作为变量单独计算:

isset($_POST['search_term'], $_POST['postcode']) // Correct
isset()
的参数必须是变量引用,而不是表达式(在您的示例中是串联);但您可以将多个条件组合在一起,如下所示:

if (isset($_POST['search_term'], $_POST['postcode'])) {
}
empty ($_POST['search_term'] . $_POST['postcode']) == false
仅当设置了
isset()
的所有参数且不包含
null
时,才会返回
true

请注意,
isset($var)
isset($var)==true
具有相同的效果,因此后者有些冗余

更新

表达式的第二部分使用
empty()
如下所示:

if (isset($_POST['search_term'], $_POST['postcode'])) {
}
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'])
最后的想法

你应该考虑使用<代码>过滤器>代码>函数来管理输入:

$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
顺便说一句,您可以自定义过滤器以检查提交值的各个部分。

您只需要:

if (!empty($_POST['search_term']) && !empty($_POST['postcode']))
isset&&!空的
是多余的。

使用php的
或(| |)
逻辑运算符作为php
isset()
的多个运算符 e、 g


每个数组索引设置一个
isset
。顺便说一句,
isset==true
是多余的。有一点值得注意——从PHP5.5.0开始,
empty()
也明确支持表达式。对我来说,你已经进步了很多,哈哈,我实际上只是在学习PHP。Thanksgreat boomer+1这是错误的,如果设置了
$\u POST['room']
,而其他设置没有设置,则会生成通知。您需要将所有这些变量包装在一个
isset
中,并将最后两个变量作为参数传递,或者您需要将它们包装在自己的
isset
中。