Javascript 基于第一个字段输入在多个字段中使用autosuggest脚本进行查询
我目前正在修改一个现成的php/jQuery自动建议脚本。我有以下问题: 我有两个带有autosuggest的表单字段。第一个字段供用户输入城市。因此,我的php文件Javascript 基于第一个字段输入在多个字段中使用autosuggest脚本进行查询,javascript,jquery,forms,autosuggest,Javascript,Jquery,Forms,Autosuggest,我目前正在修改一个现成的php/jQuery自动建议脚本。我有以下问题: 我有两个带有autosuggest的表单字段。第一个字段供用户输入城市。因此,我的php文件autosuggest.php查询数据库并查找具有parent=9的匹配项(这是所有城市)。现在,对于第二个字段,用户在其中输入学校,我希望我的php通过DB查询并找到输入城市作为家长的学校 我试图通过将PHP返回给javascript的字符串(当用户进入城市时)存储到会话变量来解决这个问题。然后当autosuggest.php查询
autosuggest.php
查询数据库并查找具有parent=9
的匹配项(这是所有城市)。现在,对于第二个字段,用户在其中输入学校
,我希望我的php通过DB查询并找到输入城市作为家长的学校
我试图通过将PHP返回给javascript的字符串(当用户进入城市时)存储到会话
变量来解决这个问题。然后当autosuggest.php
查询第二个表单的匹配项时,使用此会话变量作为父变量
但我不能让它工作。我得到这个错误:
Catchable fatal error: Object of class mysqli_result could not be converted to string in
autosuggest.php on line 47 (LIKE '$queryString%').
但如果我注释掉或删除$parent=$termquery代码>行在autosuggest.php
中
这是我的密码:
index.php包含以下sript:
<?php session_start();?>
<script>
var globEl = "";
function suggest(inputString){
var activeEle = document.activeElement.id;
globEl = activeEle;
if(inputString.length == 0) {
$('#suggestions').fadeOut();
} else if(activeEle == "city") {
$('#city').addClass('load');
$.post("autosuggest.php", {queryString: ""+inputString+""}, function(data){
if(data.length >0) {
$('#suggestions').fadeIn();
$('#suggestionsList').html(data);
$('#city').removeClass('load');
}
});
} else if(activeEle == "school") {
$('#school').addClass('load');
$.post("autosuggest.php", {queryString: ""+inputString+""}, function(data){
if(data.length >0) {
$('#suggestions').fadeIn();
$('#suggestionsList').html(data);
$('#school').removeClass('load');
}
});
}
}
function fill(thisValue) {
if (globEl == 'city') {
$('#city').val(thisValue);
$.post('update_session.php', {parentnamee: thisValue});
setTimeout("$('#suggestions').fadeOut();", 0);
} else if(globEl == 'school') {
$('#school').val(thisValue);
$.post('update_session.php', {parentnamee: thisValue});
setTimeout("$('#suggestions').fadeOut();", 0);
}
}
</script>
var globEl=“”;
函数建议(inputString){
var activeEle=document.activeElement.id;
globEl=activeEle;
如果(inputString.length==0){
$(“#建议”).fadeOut();
}else if(activeEle==“城市”){
$('#city').addClass('load');
$.post(“autosuggest.php”,{queryString:“+inputString+”},函数(数据){
如果(data.length>0){
$(“#建议”).fadeIn();
$('#SuggestionList').html(数据);
$(“#city”).removeClass('load');
}
});
}else if(activeEle==“学校”){
$(“#学校”).addClass('load');
$.post(“autosuggest.php”,{queryString:“+inputString+”},函数(数据){
如果(data.length>0){
$(“#建议”).fadeIn();
$('#SuggestionList').html(数据);
$(“#学校”)。删除类(“加载”);
}
});
}
}
函数填充(thisValue){
如果(全局==“城市”){
$('#city').val(此值);
$.post('update_session.php',{parentnamee:thisValue});
setTimeout(“$”(“#建议”).fadeOut();”,0);
}else if(globEl=='school'){
$('学校').val(此值);
$.post('update_session.php',{parentnamee:thisValue});
setTimeout(“$”(“#建议”).fadeOut();”,0);
}
}
更新session.php:
<?php
session_start();
$_SESSION['foreldrenavnn'] = $_POST['foreldrenavnn'];
?>
<?php
session_start();
$db_host = 'host';
$db_username = 'user';
$db_password = 'passw';
$db_name = 'db';
$parent = 9;
$db = new mysqli($db_host, $db_username ,$db_password, $db_name);
if(!$db) {
echo 'Could not connect to the database.';
} else {
if(isset($_SESSION['parentnamee'])) {
$parentstring = $db->real_escape_string($_SESSION['parentnamee']);
if(strlen($parentstring) >0) {
$termquery = $db->query("
SELECT wp_terms.term_id
FROM wp_terms
WHERE wp_terms.name='$parentstring%'
");
$parent = $termquery;
}
} else {
// do nothing
}
if(isset($_POST['queryString'])) {
$queryString = $db->real_escape_string($_POST['queryString']);
if(strlen($queryString) >0) {
$query = $db->query("
SELECT wp_terms.name
FROM wp_terms
INNER JOIN wp_term_taxonomy
ON wp_terms.term_id = wp_term_taxonomy.term_id
AND wp_term_taxonomy.parent=$parent
WHERE wp_terms.name
LIKE '$queryString%'
LIMIT 10
");
if(mysqli_num_rows($query) > 0) {
if($query) {
echo '<ul>';
while ($result = $query ->fetch_object()) {
echo '<li onClick="fill(\''.addslashes($result->name).'\');">'.$result->name.'</li>';
}
echo '</ul>';
} else {
echo 'OOPS we had a problem :(';
}
} else {
echo '<ul>';
echo '<span style="color:#0196E3";>'.$queryString.'</span> no matches.';
echo '</ul>';
}
} else {
// do nothing
}
} else {
echo 'There should be no direct access to this script!';
}
}
?>
autosuggest.php:
<?php
session_start();
$_SESSION['foreldrenavnn'] = $_POST['foreldrenavnn'];
?>
<?php
session_start();
$db_host = 'host';
$db_username = 'user';
$db_password = 'passw';
$db_name = 'db';
$parent = 9;
$db = new mysqli($db_host, $db_username ,$db_password, $db_name);
if(!$db) {
echo 'Could not connect to the database.';
} else {
if(isset($_SESSION['parentnamee'])) {
$parentstring = $db->real_escape_string($_SESSION['parentnamee']);
if(strlen($parentstring) >0) {
$termquery = $db->query("
SELECT wp_terms.term_id
FROM wp_terms
WHERE wp_terms.name='$parentstring%'
");
$parent = $termquery;
}
} else {
// do nothing
}
if(isset($_POST['queryString'])) {
$queryString = $db->real_escape_string($_POST['queryString']);
if(strlen($queryString) >0) {
$query = $db->query("
SELECT wp_terms.name
FROM wp_terms
INNER JOIN wp_term_taxonomy
ON wp_terms.term_id = wp_term_taxonomy.term_id
AND wp_term_taxonomy.parent=$parent
WHERE wp_terms.name
LIKE '$queryString%'
LIMIT 10
");
if(mysqli_num_rows($query) > 0) {
if($query) {
echo '<ul>';
while ($result = $query ->fetch_object()) {
echo '<li onClick="fill(\''.addslashes($result->name).'\');">'.$result->name.'</li>';
}
echo '</ul>';
} else {
echo 'OOPS we had a problem :(';
}
} else {
echo '<ul>';
echo '<span style="color:#0196E3";>'.$queryString.'</span> no matches.';
echo '</ul>';
}
} else {
// do nothing
}
} else {
echo 'There should be no direct access to this script!';
}
}
?>
有人知道我做错了什么吗?非常感谢你的帮助 严格基于php错误,我会说$db->real\u escape\u string($\u POST['queryString')代码>没有返回字符串。是的,这似乎是正确的。但是为什么呢?当我注释掉“$parent=$termquery;”时,问题就消失了,所以我猜在从会话中获取$parent变量后,它不是一个字符串。但为什么呢?谢谢你的回复:)我只是在诊断我所看到的。注释掉那一行应该不会对错误产生影响,除非它本身导致了一个单独的错误,或者阻止你到达那一行。也许是时候在脚本中添加一些调试消息,看看代码中某些变量的值是多少?@KevinB是的,很好的建议!你能给我指个方向吗?我对php和jQuery非常陌生。我该怎么做?