具有多个参数的PHP isset()
我正在尝试使用AJAX autocompletes,但在让这两种语言协同工作时遇到了一些问题 当我用1$\u POST替换所有的ISSET时,下面的代码段可以工作,但是通过添加另一个$\u POST,我在第5行得到一个错误具有多个参数的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
<?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的或(| |)
逻辑运算符作为phpisset()
的多个运算符
e、 g
每个数组索引设置一个isset
。顺便说一句,isset==true
是多余的。有一点值得注意——从PHP5.5.0开始,empty()
也明确支持表达式。对我来说,你已经进步了很多,哈哈,我实际上只是在学习PHP。Thanksgreat boomer+1这是错误的,如果设置了$\u POST['room']
,而其他设置没有设置,则会生成通知。您需要将所有这些变量包装在一个isset
中,并将最后两个变量作为参数传递,或者您需要将它们包装在自己的isset
中。