Что я пытаюсь решить:
Пользователь вводит почтовый индекс, например 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;
}
});
});