Автоматическое заполнение полей ввода формы из базы данных с помощью AJAX

Не могу заставить это работать и может использовать дополнительную пару глаз, чтобы найти то, что я делаю неправильно, или что может отсутствовать. Я создал форму, используя компонент RSForm Pro для Joomla 3.3.1. Цель этой формы – разрешить пользователю подавать гарантийные претензии на наши продукты. Если пользователь должен подать заявку на повторную заявку на продукт, тогда поле ввода отображается с кнопкой для извлечения данных из базы данных и автоматического заполнения информации владельца для пользователя. Для каждого заявленного требования создается «id». Этот «id» – это номер, который пользователь должен вводить для извлечения данных, если требуется подать повторную заявку. У меня есть функция ajax, которая работает onclick и ищет файл php, который подключается к базе данных и получает запрошенную информацию.

Вот ajax …

var ajax = getHTTPObject(); function getHTTPObject() { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else if (window.ActiveXObject) { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } else { //alert("Your browser does not support XMLHTTP!"); } return xmlhttp; } function updateOwnerInfo() { if (ajax) { var idValue = document.getElementById("owner_id").value; if(idValue) { var url = "/templates/uma-solar/html/com_rsform/getClaimInfo.php"; var param = "?id=" + escape(idValue); ajax.open("GET", url + param, true); ajax.onreadystatechange = handleAjax; ajax.send(null); } } } function handleAjax() { if (ajax.readyState == 4) { ownerarr = ajax.responseText.split(","); var owner_name = document.getElementById('owner_name'); var owner_address = document.getElementById('owner_address'); var owner_city = document.getElementById('owner_city'); var owner_state = document.getElementById('owner_state'); var owner_country = document.getElementById('owner_country'); var owner_county = document.getElementById('owner_county'); var owner_zip = document.getElementById('owner_zip'); var owner_phone = document.getElementById('owner_phone'); var owner_email = document.getElementById('owner_email'); owner_name.value = ownerarr[0]; owner_address.value = ownerarr[1]; owner_city.value = ownerarr[2]; owner_state.value = ownerarr[3]; owner_country.value = ownerarr[4]; owner_county.value = ownerarr[5]; owner_zip.value = ownerarr[6]; owner_phone.value = ownerarr[7]; owner_email.value = ownerarr[8]; } } 

Вот php …

 define( '_JEXEC', 1 ); define('JPATH_BASE', '/var/www/joomla.umasolar.com/'); /* Required Files */ require_once ( JPATH_BASE .'/includes/defines.php' ); require_once ( JPATH_BASE .'/includes/framework.php' ); /* To use Joomla's Database Class */ require_once ( JPATH_BASE .'/libraries/joomla/factory.php' ); /* Create the Application */ $app = JFactory::getApplication('site'); $app->initialise(); //-----process DB query------- $db = JFactory::getDBO(); $sql='SELECT owner_name, owner_address, owner_city, owner_state, owner_county, owner_country, owner_zip, owner_phone, owner_email FROM #__rsform_warranty_claim WHERE _id=mysql_real_escape_string($_GET[ "owner_id"])'; $db->setQuery($sql); //---------------------------- $row = $db->loadObjectList(); echo $row['owner_name'] . ", " . $row['owner_address'] . ", " . $row['owner_city'] . ", " . $row['owner_state'] . ", " . $row['owner_country'] . ", " . $row['owner_county'] . ", " . $row['owner_zip'] . ", " . $row['owner_phone'] . ", " . $row['owner_email']; 

Форма не является общедоступной, так что вот несколько скриншотов, которые могут быть полезны …

img1

img2

И вот текст, который заполняет поля ввода, которые кажутся просто 404, но в заголовке он показывает 1064 – Ошибка: 1064 …

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr"> <head> <title>1064 - Error: 1064</title> <link rel="stylesheet" type="text/css" href="/templates/uma-solar/html/com_rsform/templates/uma-solar/css/style.css" /> <link rel="stylesheet" type="text/css" href="/templates/uma-solar/html/com_rsform/templates/uma-solar/bootstrap/css/bootstrap.css" /> <link rel="stylesheet" type="text/css" href="/templates/uma-solar/html/com_rsform/templates/uma-solar/bootstrap/css/bootstrap-responsive.css" /> <script type="text/javascript" src="/templates/uma-solar/html/com_rsform/templates/uma-solar/bootstrap/js/bootstrap.js"></script> </head> <body class="error"> <center> <div class="errorbox"> <div class="block"> <h1>404</h1> <h3>Page not found</h3> </div> <p>Sorry! The page you are looking for cannot be found. Please use the provided search box to find what you are looking for 

В этом журнале ошибок нет ошибок. Если у вас возникли проблемы с определением правильного пути к требуемым файлам Joomla в PHP-коде, но, похоже, я исправил эту проблему. Любая помощь будет принята с благодарностью!

Наконец, он работал после выполнения инструкций Joomla по выбору данных с использованием JDatabase. Я уверен, что это может работать с использованием стандартных SQL-инструкций, но Joomla может быть придирчивым и просто проще следовать их правилам. AJAX был прекрасен, но вот что я изменил PHP для …

 define( '_JEXEC', 1 ); define('JPATH_BASE', '../../../../'); //Required Joomla Files require_once ( JPATH_BASE .'/includes/defines.php' ); require_once ( JPATH_BASE .'/includes/framework.php' ); //Connect to Joomla's Database Class require_once ( JPATH_BASE .'/libraries/joomla/factory.php' ); //Create the Application $app = JFactory::getApplication('site'); $app->initialise(); $input = $app->input; $id = $input->getInt('id'); //Connect to db $db = JFactory::getDBO(); //Create new query object $query = $db->getQuery(true); $query->select($db->quoteName(array('owner_name', 'owner_address', 'owner_city', 'owner_state', 'owner_county', 'owner_country', 'owner_zip', 'owner_phone', 'owner_email'))); $query->from($db->quoteName('#__rsform_warranty_claim')); $query->where($db->quoteName('_id') . '=' . $db->quote($id)); //Reset the query using our newly populated query object $db->setQuery($query); //Get a single record from the DB table $row = $db->loadAssoc(); echo $row['owner_name'] . ", " . $row['owner_address'] . ", " . $row['owner_city'] . ", " . $row['owner_state'] . ", " . $row['owner_country'] . ", " . $row['owner_county'] . ", " . $row['owner_zip'] . ", " . $row['owner_phone'] . ", " . $row['owner_email'];