Прошу прощения, если кто-то знает о доступном ответе на мой вопрос, однако после недели поиска в Интернете и пробных материалов я думал, что попрошу экспертов.Передача информации о базе данных с php на javascript - mysql_fetch_array не действует, как ожидалось
Цель: запроса база данных SQL с помощью кода на стороне сервера (в этом случае PHP), а затем передать эту информацию из базы данных в JavaScript на веб-странице, чтобы кнопки генерироваться динамически. Обратите внимание, что из возвращенной базы данных будет несколько строк. Как только кнопки сгенерированы, они вызовут php-код для изменения значений в базе данных, однако это первая часть, с которой я сейчас борюсь.
Текущее решение (не вполне рабочий): Я признаю, есть оптимизация сделать на этот код, однако, как это до сих пор я пытаюсь разобраться с проблемой я рассмотрю маленькие кусочки себя позже, и не требуют подробностей на том.
Обзор: PHP отправляет запрос mysql через mysql_query для получения информации из базы данных. Затем AJAX используется с json_encode для кодирования информации в php, а затем эхо используется для вывода ответа на javascript.
код PHP:
<?php //start php code
include 'DatabasePhp/openDatabase.php'; //includes my mysql_connect code to connect to the database. Works.
$query = 'SELECT `users`.`user_name`, `users`.`user_id`, `users`.`join_date`'
. ' FROM users'
. ' LIMIT 0, 30 ';
$result= mysql_query($query);
include 'DatabasePhp/closeDatabase.php';
$aa = mysql_fetch_array($result, MYSQL_ASSOC);
$total_array[0] = $aa;
$total_array[1] = array('user_name' => 'bb','day' => '5');
$formatted_variable_pass = json_encode($total_array);
echo $formatted_variable_pass;
?>
PHP Примечания: Я буду использовать петлю, пока однажды я исправить эту проблему, чтобы запустить через каждую строку из моих результатов базы данных и добавить их в $ total_array. В настоящее время это настройка только для двух индексов массива, чтобы выделить мою проблему. $ total_array [0] хранит ответ из запроса mysql, $ total_array [1] - я генерирую ассоциативный массив (например, я думал, что получаю от mysql_fetch_array).
код Javascript:
<script type="text/javascript" language="JavaScript">
document.write("Well your starting javascript");
var btn_num = 0;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() // the function called when a result is returned from the php
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var responce_json = JSON.parse(xmlhttp.responseText);
document.getElementById("txtHint").innerHTML="got responce "+responce_json[0]['user_name']+" "+responce_json[1]['user_name'];
}else if(xmlhttp.status==404){
document.getElementById("txtHint").innerHTML="Not found";
}else if(xmlhttp.readyState==0){
document.getElementById("txtHint").innerHTML="Responce was 0";
}else{
document.getElementById("txtHint").innerHTML="Not completed the responce";
}
}
xmlhttp.open("POST","DatabasePhp/getUsers.php",true);
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8");
xmlhttp.send(null);
document.write("and the results are .... ");
</script>
Javascript отмечает: код в основном создает класс типа XMLHttpRequest, основанный на браузере в использовании, а затем отправляет запрос POST через xmlHttp.open. Ответ обрабатывается через xmlhttp.onreadystatechange = function(), то есть ответ записывается только после подтверждения ответа, то есть когда xmlhttp.readyState == 4 & & xmlhttp.status == 200.
Проблема: У меня возникли проблемы с передачей данных mysql_fetch_array в javascript. Причина, по которой я помещал ассоциативный массив php в $ total_array [1], состоит в том, что я хотел доказать, что могу передавать переменные. Код успешно передает этот массив в другом массиве, и я могу получить доступ в javascript через responce_json [1] ['user_name']. К сожалению, независимо от того, как я пытаюсь получить ассоциативный массив, возвращаемый из mysql_fetch_array (который установлен для возврата ассоциативного массива), в текущем коде, выполненном responce_json [0] ['user_name'], я не получаю ответа. Во время моих испытаний у меня было соединение «null», возвращаемое, когда я пытаюсь получить ассоциативный массив aa в [0], и, как правило, мой код не заполняет код, когда я пытаюсь получить доступ к ['user_name'] mysql возвратил ассоциативный массив.
Так что вопрос: Могу ли я что-то отсутствует об ассоциативном массиве, который возвращается в mysql_fetch_array (набор для возвращения ассоциативный массив с помощью MYSQL_ASSOC), он не отвечает, как созданный вручную ассоциативный массив (один раз в JavaScript - работает правильно в php), и я не могу понять, почему. Кто-нибудь понимает, как я могу конвертировать/гарантировать, что массив mysql реагирует как мой ручной?
Дополнительно: это не проблема с sql, поскольку когда я включаю php в свою веб-страницу, а не передаю javascript, ответ эха, записанный на веб-страницу, является «[{« user_name »: "Frank", "user_id": "1", "join_date": "2013-05-15"}, { "user_name": "бб", "день": "5"}]. Поэтому он успешно извлекает информацию из базы данных, и для меня это выглядит как один массив с вспомогательными ассоциативными массивами внутри, что я и был, но я могу только получить имя_пользователя 'bb', не могу получить Frank в javascript , PS Я понимаю, что у двух массивов только общее имя пользователя, но это единственный, к которому я пытаюсь получить доступ в данный момент.
Извините за длинный пост, просто пытаясь убрать все мысли.
Результаты предложений: mysql_fetch_assoc - Orangepill; Я попробовал это, никаких изменений. Из всей документации, которую я могу просмотреть в Интернете, я понимаю, что это возвращает то же, что и mysql_fetch_array ($ result, MYSQL_ASSOC);
Перемещение closeDatabase.php - Michel Feldheim; Перемещение этого не влияет на выход.
console.log (responce_json) - Orangepill; Спасибо за это, не понял, что я мог бы это пересмотреть. Когда я допрошу XMLHttpRequest, я получаю следующее возвращаемое через консоль: XMLHttpRequest {statusText: "OK", статус: 200, response: "[null, {" user_name ":" bb "," day ":" 5 "} ] ", responseType:" ", responseXML: null ...}. Из этого я вижу, что ответ mysql_fetch_array передается как null, что вызвано ошибкой, которую я получаю, которая является «uncaught Error: InvalidStateError: DOM Exception 11». Не может показаться, что это достаточно, чтобы исправить это.
Почему бы не просто использовать mysql_fetch_assoc – Orangepill
, если вы еще не используете консоль в своем браузере, чтобы проверить, что вы получаете от своего вызова ajax. (введите console.log (responce_json) в случай успешного выполнения вашего обратного вызова. Это должно дать вам некоторое представление о том, что вы получаете. – Orangepill
не удается выполнить команду console.log (xmlhttp.responseText) вместо ... возможно, вы являетесь получение какого-либо уведомления о php или что-то, что делает его там, где вы не можете разобрать возвращенный json. – Orangepill