Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Из MySQL в JavaScript по средствам PHP
 
 автор: itica   (01.06.2006 в 14:54)   письмо автору
 
 

При написании скрипта столкнулся с такой проблемой:
Из таблицы arxiv Базы данных MySQL

---------------------------
name       mes        
---------------------------
itica       Привет!    
aciti       Как дела? 
itica       Пока!!!       
---------------------------

нужно извлечь все данные и поместить их в массив. И затем на другой странице в JS разобрать этот массив , чтобы содержимое массива в браузере выглядило примерно так:

itica: Привет!
aciti: Как дела?
itica: Пока!!!

   
 
 автор: cheops   (01.06.2006 в 15:45)   письмо автору
 
   для: itica   (01.06.2006 в 14:54)
 

А много данных? Их через сессию можно будет передать?

   
 
 автор: itica   (01.06.2006 в 15:55)   письмо автору
 
   для: cheops   (01.06.2006 в 15:45)
 

Данных будет много (диалог оператора и посетителя), передача массива в JS будет происходить по средствам AJAX.
У меня вызвало затруднение как правильно запихнуть данные в массив, и потом их оттуда извлечь (не получается выводить данные в порядке: сообщение напротив имени своего автора).

   
 
 автор: cheops   (01.06.2006 в 15:59)   письмо автору
 
   для: itica   (01.06.2006 в 15:55)
 

А в таблице имеются ещё какие-то поля, кроме name и mes - по ним сложно задать порядок - база данных их может хранить в произвольном порядке (особенно если записи удаляются и обновляются).

   
 
 автор: itica   (01.06.2006 в 16:16)   письмо автору
 
   для: cheops   (01.06.2006 в 15:59)
 

Да, это time и email.

   
 
 автор: Trianon   (01.06.2006 в 16:01)   письмо автору
 
   для: itica   (01.06.2006 в 15:55)
 

<? include'config.inc.php';
   if(!(
$res mysql_query($sql "SELECT * FROM adr")))
       exit(
"Error in $sql : <br>"mysql_query());
   { 
?> <script language=javascript>
     function out(n,m) { document.writeln('<tr><td>'+n+'</td><td>'+m+'</td></tr>'); }
     var arr = [ <?  }
     for(
$sep "\r\n"$row mysql_fetch_assoc($res); $sep "\r\n,")
      echo 
"$sep{'n': '".addslashes($row['name'])
            .
"', 'm': '".addslashes($row['mes'])."' }";
?>   ]; document.writeln('<table>');   //out('Name',       'Message');
        for(i = 0; arr.length> i; i++) out(arr[i].n+':', arr[i].m);
        document.writeln('</table>');  </script>

   
 
 автор: itica   (01.06.2006 в 17:22)   письмо автору
 
   для: Trianon   (01.06.2006 в 16:01)
 

Если я помещю на одной странице данные из таблицы в массив:

$zapros = mysql_query("select * from arxiv;");
if($zapros)
{
while($row = mysql_fetch_object($zapros))
{
  $name.=$row->name."|";
  $mess.=$row->mes."|";
}
$_RESULT = array(
  "name" => $name,
  "mes" => $mess,
);
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}

Затем передам его по средствам AJAX, на что мне следует заменить строку:

(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';

в файле-приёмнике, чтобы в окне браузера вывелась информация, так как я показал в начале темы.

   
 
 автор: itica   (02.06.2006 в 08:26)   письмо автору
 
   для: itica   (01.06.2006 в 17:22)
 

Поднимаю тему! Неужели никто не знает?

   
 
 автор: Trianon   (02.06.2006 в 09:45)   письмо автору
 
   для: itica   (01.06.2006 в 17:22)
 

>Затем передам его по средствам AJAX, на что мне следует

Вы покажите, как Вы это делаете, а дальше что-нибудь придумаем.

   
 
 автор: itica   (02.06.2006 в 13:00)   письмо автору
 
   для: Trianon   (02.06.2006 в 09:45)
 

Файл test.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style>
body {overflow:auto;margin:10px;font-family:Verdana;font-size:11px;}
</style>

<script language="JavaScript" src="dk_JsHttpRequest/Js.js"></script>
<script>
function dk_JsHttpRequest(force)
{var query = '' + document.getElementById('param1').value;
var req = new Subsys_JsHttpRequest_Js();
req.onreadystatechange = function()
{if (req.readyState == 4)
{if (req.responseJS)
{document.getElementById('res').innerHTML += 
(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';
}
}
}
req.caching = true;
req.open('POST', 'dk_JsHttpRequest.php', true);
req.send({ q: query, test:303 });
}
</script>

<script src="" id="dataloader"></script>
</head>
<body>
<br>
<b>Запрос :</b> <input type="text" id="param1">
<br><br>
<input type="button" value="Subsys_JsHttpRequest" onclick="dk_JsHttpRequest(true)" />
<br><br><br>
<div id="res" style="background:#6699cc;border:1px solid darkblue;color:white;font-family:Verdana;font-size:11px;padding:10px;width:400px;height:300px;overflow:auto;">
</div></script>
</body>
</html>

dk_JsHttpRequest.php:

<?
include "config.php";
require_once 
"dk_JsHttpRequest/config.php";
require_once 
"dk_JsHttpRequest/Php.php";

$JsHttpRequest =& new Subsys_JsHttpRequest_Php("windows-1251");

$dano=$_REQUEST['q'];

 
$zapros mysql_query("select * from obshie_arxiv;");
if(
$zapros)
{
while(
$row mysql_fetch_object($zapros))
{
  
$name.=$row->name."|";
  
$mess.=$row->mes."|";
}
$_RESULT = array(
  
"name" => $name,
  
"mes" => $mess,
);
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}

?>

Сейчас это работает, но выводится в таком порядке:

itica|aciti|itica|: Привет!|Как дела?|Пока!!!|

   
 
 автор: Trianon   (02.06.2006 в 13:24)   письмо автору
 
   для: itica   (02.06.2006 в 13:00)
 

Так это не AJAX, а его функциональный аналог от Дмитрия КОтерова (dklab.ru) ?

   
 
 автор: itica   (02.06.2006 в 13:38)   письмо автору
 
   для: Trianon   (02.06.2006 в 13:24)
 

Да, но ведь функционал такой же? Или я ошибаюсь? Может AJAX лучше?

   
 
 автор: itica   (04.06.2006 в 20:19)   письмо автору
 
   для: itica   (02.06.2006 в 13:38)
 

Подскажите хоть как нибудь!

   
 
 автор: itica   (04.06.2006 в 22:19)   письмо автору
 
   для: itica   (04.06.2006 в 20:19)
 

Это вообще возможно? Если нет, то вероятно есть какой-либо другой способ?

   
 
 автор: valenok   (05.06.2006 в 00:17)   письмо автору
 
   для: itica   (04.06.2006 в 22:19)
 

Можно для особо одарённых - в чём проблема?
Что сделать надо?

   
 
 автор: itica   (05.06.2006 в 12:49)   письмо автору
 
   для: valenok   (05.06.2006 в 00:17)
 

Нужно разбить массив: при получении, так как показано в моём первом сообщении!
Если снова непонятно объяснил пишите...
$zapros = mysql_query("select * from arxiv;");
if($zapros)
{
while($row = mysql_fetch_object($zapros))
{
  $name.=$row->name."|";
  $mess.=$row->mes."|";
}
$_RESULT = array(
  "name" => $name,
  "mes" => $mess,
);
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();

при получении, так как показано в моём первом сообщении!
Если снова непонятно объяснил пишите...

   
 
 автор: itica   (05.06.2006 в 14:18)   письмо автору
 
   для: itica   (05.06.2006 в 12:49)
 

Вот ещё одно объяснение:
Есть одна страница которая помещает данные в массив, примерно вот так:

$zapros = mysql_query("select * from arxiv;");
if($zapros)
{
while($row = mysql_fetch_object($zapros))
{
  $name.=$row->name."|";
  $mess.=$row->mes."|";
}
$_RESULT = array(
  "name" => $name,
  "mes" => $mess,
);
}
else
{
  echo "<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}

Этот массив передаётся на другую страницу, вот её содержание:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style>
body {overflow:auto;margin:10px;font-family:Verdana;font-size:11px;}
</style>

<script language="JavaScript" src="dk_JsHttpRequest/Js.js"></script>
<script>
// загрузка данных с сервера без прямого обновления страницы
// с использованием библиотек Subsys_JsHttpRequest ( разработчик - "dk lab" | http://dklab.ru/ )

function dk_JsHttpRequest(force)
{var query = '' + document.getElementById('param1').value;
var req = new Subsys_JsHttpRequest_Js();
req.onreadystatechange = function()
{if (req.readyState == 4)
{if (req.responseJS)
{document.getElementById('res').innerHTML += 
(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';
}
}
}
req.caching = true;
req.open('POST', 'dk_JsHttpRequest.php', true);
req.send({ q: query, test:303 });
}
</script>

<script src="" id="dataloader"></script>
</head>
<body>
<br>
<b>Запрос :</b> <input type="text" id="param1">
<br><br>
<input type="button" value="Subsys_JsHttpRequest" onclick="dk_JsHttpRequest(true)" />
<br><br><br>
<div id="res" style="background:#6699cc;border:1px solid darkblue;color:white;font-family:Verdana;font-size:11px;padding:10px;width:400px;height:300px;overflow:auto;">
</div></script>
</body>
</html>

Похорошему я с ней не разобрался, но насколько я понял строка:

(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';

Отвечает за отображение массива в браузере.
Меня интересует: что нужно прописать в строке:

(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';

чтобы данные в браузере выглядили примерно так:

itica: Привет!
aciti: Как дела?
itica: Пока!!! 

Для справки: содержание таблицы arxiv:

---------------------------
name       mes        
---------------------------
itica       Привет!    
aciti       Как дела?
itica       Пока!!!       
--------------------------- 

Помойму объяснил подробнее некуда.

   
 
 автор: valenok   (05.06.2006 в 15:20)   письмо автору
 
   для: itica   (05.06.2006 в 14:18)
 

А js обязателен?
Кто у тебя массив разбивает?

   
 
 автор: itica   (05.06.2006 в 15:43)   письмо автору
 
   для: valenok   (05.06.2006 в 15:20)
 

Все операции по разбиению происходят во 2 странице, где-то здесь:

<script language="JavaScript" src="dk_JsHttpRequest/Js.js"></script>
<script>
function dk_JsHttpRequest(force)
{var query = '' + document.getElementById('param1').value;
var req = new Subsys_JsHttpRequest_Js();
req.onreadystatechange = function()
{if (req.readyState == 4)
{if (req.responseJS)
{document.getElementById('res').innerHTML +=
(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '<br>';
}
}
}
req.caching = true;
req.open('POST', 'dk_JsHttpRequest.php', true);
req.send({ q: query, test:303 });
}
</script>

Если можно обойтись без JS, то как? Я не знаю :(

   
 
 автор: itica   (05.06.2006 в 20:36)   письмо автору
 
   для: itica   (05.06.2006 в 15:43)
 

Кто нибудь!!!
Cheops! Trianon! Valenok!

   
 
 автор: itica   (06.06.2006 в 12:37)   письмо автору
 
   для: itica   (05.06.2006 в 20:36)
 

Объясните почему Вы не отвечаете! Что не так? Я не так объясняю? Или ещё что?

   
 
 автор: Trianon   (06.06.2006 в 12:40)   письмо автору
 
   для: itica   (06.06.2006 в 12:37)
 

Я, например, и DOM-модель, и асинхронные технологии знаю недостаточно хорошо, чтобы давать какие-то конкретные советы.

   
 
 автор: itica   (06.06.2006 в 13:38)   письмо автору
 
   для: itica   (05.06.2006 в 14:18)
 

А что на это скажет Cheops?

   
 
 автор: cheops   (06.06.2006 в 19:29)   письмо автору
 
   для: itica   (06.06.2006 в 13:38)
 

Я утерял нить рассуждения на половине темы :)))

   
 
 автор: Trianon   (06.06.2006 в 19:32)   письмо автору
 
   для: cheops   (06.06.2006 в 19:29)
 

Это не повод. Я раньше утерял :)

   
 
 автор: itica   (06.06.2006 в 20:29)   письмо автору
 
   для: cheops   (06.06.2006 в 19:29)
 

Можно начать новое обсуждение :))). В сообщении автор: itica (05.06.2006 в 14:18) я объяснил всё подробно.

   
 
 автор: Mefisto84   (06.06.2006 в 20:54)   письмо автору
 
   для: itica   (06.06.2006 в 20:29)
 

Если я правильно вас понял, вам нужно просто передать значения из PHP в Javascript? Так? Если да то можно попробовать что бы данные выводились в таблицу, честно говоря не знаток JS но попробовать можно:
document.write('<table cellspacing=0 cellpadding=0 border=0 width="100%" align="center">') ;
function dk_JsHttpRequest(force) 
{var query = '' + document.getElementById('param1').value; 
var req = new Subsys_JsHttpRequest_Js(); 
req.onreadystatechange = function() 
{if (req.readyState == 4) 
{if (req.responseJS) 
{document.getElementById('res').innerHTML += 
'<tr><td>'(req.responseJS.name||'')+': '+ (req.responseJS.mes||'') + '</td></tr>'; 



req.caching = true; 
req.open('POST', 'dk_JsHttpRequest.php', true); 
req.send({ q: query, test:303 }); 

document.write('</table>');

не уверен с синтаксисом, это нужно поэкспериментировать :-) Путем научного тыка.

   
 
 автор: itica   (06.06.2006 в 21:50)   письмо автору
 
   для: Mefisto84   (06.06.2006 в 20:54)
 

Увы... Но теперь вообще ничего не выводится.

   
 
 автор: Mefisto84   (07.06.2006 в 13:20)   письмо автору
 
   для: itica   (06.06.2006 в 21:50)
 

Думаю что я <tr><td> не туда засунул.Вам лучше с этим вопросом обратиться в другой раздел форума, HTML CSS JS

   
 
 автор: itica   (07.06.2006 в 15:40)   письмо автору
 
   для: Mefisto84   (07.06.2006 в 13:20)
 

Я сюда как раз оттуда и пришел. Вот ссылка на ту тему: http://softtime.ru/forum/read.php?id_forum=4&id_theme=17712&page=1
Возможно мою проблему можно решить средствами РНР?

   
 
 автор: itica   (07.06.2006 в 21:33)   письмо автору
 
   для: itica   (07.06.2006 в 15:40)
 

А можно ли как-то подругому запихнуть данные в массив $_RESULT?
Напрмер: запихивать данные в массив поочередно, тоесть извлесь одну запись из таблицы из столбика name, затем извлечь данные из столбика mes той же строки откуда были извлечены данные из столбика name и т. д.
Реально ли это? Если да, то как?

   
 
 автор: itica   (07.06.2006 в 22:48)   письмо автору
 
   для: itica   (07.06.2006 в 21:33)
 

Можно ли вообще хоть что-то сделать?
Если нет, или это очень сложно так и скажите!!!

   
 
 автор: itica   (08.06.2006 в 16:06)   письмо автору
 
   для: itica   (07.06.2006 в 22:48)
 

Cheops, я уже облазил все книги, но ничего не нашел. Вся надежда на Вас!!!

   
 
 автор: itica   (08.06.2006 в 18:03)   письмо автору
 
   для: itica   (08.06.2006 в 16:06)
 

Дааа... Всё оказывается очень просто! Если помещать данные вот так:

while($row = mysql_fetch_object($zapros))
{
  $name.=$row->name.": ";
  $name.=$row->mes."<br>";
}
$_RESULT = array(
  "name" => $name,
 
);

Не знаю правильно ли такое решение, однако работает!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования