Javascript 基于第一个字段输入在多个字段中使用autosuggest脚本进行查询

Javascript 基于第一个字段输入在多个字段中使用autosuggest脚本进行查询,javascript,jquery,forms,autosuggest,Javascript,Jquery,Forms,Autosuggest,我目前正在修改一个现成的php/jQuery自动建议脚本。我有以下问题: 我有两个带有autosuggest的表单字段。第一个字段供用户输入城市。因此,我的php文件autosuggest.php查询数据库并查找具有parent=9的匹配项(这是所有城市)。现在,对于第二个字段,用户在其中输入学校,我希望我的php通过DB查询并找到输入城市作为家长的学校 我试图通过将PHP返回给javascript的字符串(当用户进入城市时)存储到会话变量来解决这个问题。然后当autosuggest.php查询

我目前正在修改一个现成的php/jQuery自动建议脚本。我有以下问题:

我有两个带有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非常陌生。我该怎么做?