从Mysql数据库中拉出jQuery自动完成

时间:2012-03-25 18:31:05

标签: php jquery mysql autocomplete

我正在努力解决的问题: 用户输入类似08212的邮政编码或任何美国邮政编码,jquery UI Autocomplete调用此源文件:../src/php/registration/getFanLoc.php,该文件针对某些字段对数据库进行查询(如下所述) )基于输入的邮政编码。

在index.php上有一个表单/ jquery:

假设所有jquery UI代码已经在此文件中

<script type="text/javascript">
    $(document).ready(function()
    {
        $('input#zip').autocomplete({
            dataType: "json",
            source: "../src/php/registration/getFanLoc.php",
            minLength: 3
        });
    });
</script>

<form method="post" id="FanDetail">
  <div class="ui-widget">
     <label for="zip">Zip: </label>
     <input id="zip" name="zipcode" value="US Zipcode" onFocus="clearText(this)" /><br />
  </div>
</form>

getFanLoc.php文件 - 查询mysql以查找与输入的5位数邮政编码对应的任何记录:

     <?php
    try{
        ///////////////////////////////////////////////////////////
        $zip = mysql_real_escape_string($_GET['zipcode']); //////
        ///////////////////////////////////////////////////////////
        require_once('../../cfg/dbi.php') or die('Cant require dbi');
        $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        $sth = $dbh->prepare(
        'SELECT fanDetLocID, fanDetLocCity, fanDetLocState FROM fanDetailLocation WHERE fanDetLocZip = ?');
        $sth->bindParam(1, $zip);
        $sth->execute();
    while ($res = $sth->fetch(PDO::FETCH_ASSOC)) {
        foreach($res as $column=>$val) {
            $res[$i][$column] = $val;
        }
        $i++;
        }   
    print json_encode($res);
} 


    catch(PDOException $e){
        file_put_contents('../../../PDODBConnectionErrors.txt', 'ERROR: [getFanLoc.php] about '.$e->getMessage().'<br>', FILE_APPEND);  
    }



    ?>

我最初遇到了麻烦,因为它没有连接到数据库而且PDODBConnectionErrors.txt有错误,但我已经FIXED那部分,现在它什么也没做,但现在也不会在文件中抛出错误。有谁看到我做错了什么?我很新手和autocomplete jQuery UI widget一起工作,所以对我很轻松:)。

我尝试过的更改:

  • 尝试在上面的$ _GET ['zipcode']中添加,因为下面的评论者认为此插件使用的是$_GET而不是$_POST。将它从$ _POST更改为$ _GET是正确的,但现在我在尝试直接访问该文件时面临以下问题:

  • 还尝试直接访问文件,如getFanLoc.php?zipcode=08039这似乎至少让我更接近。 * 当我从这个URL访问它时,页面现在声明* False,这让我觉得我的while() foreach()循环是错误的。有人看起来非常强大吗?

要添加:我正在使用此插件:http://jqueryui.com/demos/autocomplete/。谢谢@Sennet

** FIXED While()循环(感谢Sennett)适用于直接访问,但不适用于表单:

    $jsonArray = array();
    while ($result = $sth->fetch(PDO::FETCH_ASSOC)) {
     $jsonArray[] = array(
          'label' => $result['fanDetLocID'], 
          'value' => $result['fanDetLocCity']);
    }
    print $jsonArray; // print results of array
    print json_encode($jsonArray); // json encode that array
}   // can't have code between here

// and here
    catch(PDOException $e){
        file_put_contents('../../../PDODBConnectionErrors.txt', 'ERROR: [getFanLoc.php] about '.$e->getMessage().'<br>', FILE_APPEND);  
    }

在与Sennet合作4小时后,我们现在有了:

<script type="text/javascript">
$(document).ready(function()

{     $( '输入#拉链')。自动完成({

    dataType: "json",
    source: "../src/php/registration/getFanLoc.php",
    minLength: 3,
    select: function(event, args){
        event.preventDefault();
        var joinedValues = args.item.value;
        var id = joinedValues.split("|")[0];
        var cityAndState= joinedValues.split("|")[1];
        document.getElementById('actualZip').value = cityAndState ; 
            document.getElementById('zip').value = id;
    }
});

});     

1 个答案:

答案 0 :(得分:1)

首先要做的是尝试直接访问webbrowser文件。保留为$_GET。当您浏览到getFanLoc.php?zipcode=XXX,其中XXX是已知存在的代码时会发生什么?你有什么结果吗?

此外,假设您正在使用this plugin,您应该返回JSON而不是超级链接 - 该插件将为您包装HTML。