jQuery Автозаполнение извлечения из базы данных Mysql - PullRequest
2 голосов
/ 25 марта 2012

Что я пытаюсь решить: Пользователь вводит почтовый индекс, например 08212, или любой другой почтовый индекс США и jquery UI Autocomplete вызывает этот исходный файл: ../src/php/registration/getFanLoc.php, этот файл выполняет запрос к базе данных для определенных полей (описанных ниже) на основе введенного почтового индекса .

Есть форма / jquery на index.php:

Предположим, что весь код пользовательского интерфейса jquery уже находится в этом файле

<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, это, казалось, по крайней мере приблизило меня. * Страница теперь сообщает * False, когда я получаю к ней доступ с этого URL, что заставляет меня думать, что мой цикл while() foreach() ошибочен. Кто-то кажется чем-то поразительно сильным с этим?

Добавить: Я использую этот плагин: http://jqueryui.com/demos/autocomplete/. Спасибо @ Сеннет

** ИСПРАВЛЕННЫЙ цикл 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);  
    }

После 4 часов работы с Sennet у нас теперь есть:

<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 Ответ

1 голос
/ 26 марта 2012

Первое, что нужно сделать, это попытаться получить доступ к файлу напрямую через веб-браузер. Оставьте это как $_GET. Что происходит, когда вы переходите на getFanLoc.php?zipcode=XXX, где XXX - это код, о котором известно, что он существует? Получаете ли вы какие-либо результаты?

Кроме того, если вы используете этот плагин , вы должны вернуть JSON, а не загружать гиперссылки - плагин обернет их в HTML для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...