我正在尝试使用AJAX自动填充功能,并且我在使两种语言协同工作时遇到了一些问题.
当我用1 $ _POST替换所有的issets时,下面的代码片段就可以了,但是通过添加另一个$ _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>';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
任何关于它为什么抛出这个错误的建议都将非常感激.谢谢.
我明白我应该使用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('');
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
Ja͢*_*͢ck 63
参数isset()
必须是变量引用而不是表达式(在您的情况下是连接); 但您可以将多个条件组合在一起,如下所示:
if (isset($_POST['search_term'], $_POST['postcode'])) {
}
Run Code Online (Sandbox Code Playgroud)
true
仅当所有参数isset()
都设置且不包含时,才会返回此参数null
.
请注意isset($var)
并isset($var) == true
具有相同的效果,因此后者有点多余.
更新
表达式的第二部分使用empty()
如下:
empty ($_POST['search_term'] . $_POST['postcode']) == false
Run Code Online (Sandbox Code Playgroud)
出于与上述相同的原因,这是错误的.实际上,你不需要empty()
这里,因为到那时你已经检查过变量是否已设置,所以你可以像这样快捷地完成整个表达式:
isset($_POST['search_term'], $_POST['postcode']) &&
$_POST['search_term'] &&
$_POST['postcode']
Run Code Online (Sandbox Code Playgroud)
或使用等效表达式:
!empty($_POST['search_term']) && !empty($_POST['postcode'])
Run Code Online (Sandbox Code Playgroud)
最后的想法
您应该考虑使用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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以自定义过滤器以检查提交值的各个部分.
参数isset()
应该用逗号(,
)而不是点号(.
)分隔.您当前的代码将变量连接成一个参数,而不是将它们作为单独的参数传递.
因此原始代码将变量评估为统一string
值:
isset($_POST['search_term'] . $_POST['postcode']) // Incorrect
Run Code Online (Sandbox Code Playgroud)
正确的表单将它们作为变量单独评估:
isset($_POST['search_term'], $_POST['postcode']) // Correct
Run Code Online (Sandbox Code Playgroud)
您只需要:
if (!empty($_POST['search_term']) && !empty($_POST['postcode']))
Run Code Online (Sandbox Code Playgroud)
isset && !empty
是多余的.
归档时间: |
|
查看次数: |
83988 次 |
最近记录: |