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

HTML+CSS+JavaScript

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

 

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

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

тема: Отображение данных в форме (JS +PHP)
 
 автор: denvor   (09.11.2005 в 12:10)   письмо автору
 
 

Доброго времени суток!
Задача: есть форма: поле формы SELECT и пара полей TEXT (TEXTAREA). В поле SELECT выводится список из базы (названия товаров, например). При выборе соотв. товара в этом поле, в остальных полях должны отобразиться его описания.

Я подумал, что при первой загрузке страницы нужно считать из базы и поместить в массив JS значения id - название -описание, затем при выборе значенияв поле SELECT по событию onChange и id присваивать переменным НАЗВАНИЕ и ОПИСАНИЕ значения из массива и выводить их в соотв. полях TEXT .

с php и базой проблем нет, а JS я только начинаю учить, кто может помочь? Конкретно, интересует занесение в масив данных, полученных из php и вывод значений массива в поле <..=TEXT VALUE=...>.

   
 
 автор: Axxil   (09.11.2005 в 12:50)   письмо автору
 
   для: denvor   (09.11.2005 в 12:10)
 

Можно попробовать динамически подтягивать данные из базы основываясь на выборе в select.
Посмотрите здесь: http://www.dklab.ru/lib/Subsys_JsHttpRequest/
Только сразу не убегайте. Всё не так сложно как кажется с первого раза. А полученный эфеект стоит пары часов изучения.

   
 
 автор: denvor   (09.11.2005 в 13:01)   письмо автору
 
   для: Axxil   (09.11.2005 в 12:50)
 

Спасибо, сейчас посмотрю. Пока же попробовал в массив JS вставить данные из базы - и с удивлением обнаружил, что php-код в тэгах <script> не интерпретировался! Это так и должно быть? а как же тогда передавать данные из php в JS?

Пошел смотреть статью...

   
 
 автор: Axxil   (09.11.2005 в 13:12)   письмо автору
 
   для: denvor   (09.11.2005 в 13:01)
 

Данные передают обычно через параметры функций:
<script>
  function somefunc(var1,var2){
    // тело функции 
  }
</script>

<a href="" onclick="somefunc(<?=$var1?>,<?=$var2?>)">

   
 
 автор: 12345   (09.11.2005 в 13:24)   письмо автору
 
   для: Axxil   (09.11.2005 в 12:50)
 

Если при первой загрузке все значения загрузить можно, то не надо сложностей с подтягиванием. В этом ведь есть недостаток, связанный с постоянной необходимостью быть в онлайне. Да ещё зачем denvor -у изучать сразу верхние этажи программирования на JS? Надо просто объявить константы в массиве через РНР.
<script>A=new Array("<?=$value1?>","<?=$value2?>","<?=$value3?>", ... и т.д.... );</script>
а затем сделать выбор через JS.

<select onClick=document.getElementById('txt').value=A[event.srcElement.selectedIndex]> 
<option>1th</option> 
<option>2th</option> 
<option>3th</option> 
</select><br> 
<input id=txt>

   
 
 автор: Axxil   (09.11.2005 в 13:51)   письмо автору
 
   для: 12345   (09.11.2005 в 13:24)
 

Нет, оно понятно когда 10-20 товаров в базе. А когда их тысячи...
Что будем делать массив на 10000 элементов?
Согласен в одном если скрипт простой и база небольшая то так лучше.
А изучать там в принципе нечего все библиотеки написаны и работают, подключай и пользуйся.

   
 
 автор: 12345   (09.11.2005 в 14:13)   письмо автору
 
   для: Axxil   (09.11.2005 в 13:51)
 

> Что будем делать массив на 10000 элементов?
Тогда подгружать. (Но 10000 и в SELECT не поместятся.)

   
 
 автор: denvor   (09.11.2005 в 19:58)   письмо автору
 
   для: 12345   (09.11.2005 в 14:13)
 

статья классная - я обязательно найду время попробовать. 12345 прав - у меня всего несколько позиций, так что проще оказалось сразу подтянуть все в массивы - с этим я справился. (Правда, загвоздка оказалось в том, что php в <script> у меня НЕ РАБОТАЕТ (это - нормально?). Не сработало даже src="...php"/ Пришлось генерировать весь JS -код в php).

Теперь вторая чать задачи вывод элемента массива: после выбора в поле <SELECT> вызывается функция, которой передается VALUE. По этому значению нужно вывести в соседнее поле TEXT элемент массива.

   <select name="menu1" onChange="viewValue('parent',this,0)">
    <option value="arr0">000</option>
    <option value="arr1">111</option>
    <option value="arr2">222</option>

те.при выборе 111 передается имя массива (arr1 ) и некий элемент этого массива нужно вывести в соседнее поле. И еще: что это за параметры функции parent и this ? (нолик еще затесался откуда-то)
Итак: как вывести?

PS спасибо за помощь :)

   
 
 автор: 12345   (09.11.2005 в 22:08)   письмо автору
 
   для: denvor   (09.11.2005 в 19:58)
 

> php в <script> у меня НЕ РАБОТАЕТ
не нормально.
Может, у тебя не работала сокращённая конструкция <?=...;?> ? А так рнр должен быть совершенно независим от тегов.

'parent' - это просто строка. Возможно, с помощью неё затем обращаются к 'parent' - окну, вызвавшему данное окно.
this - типичная ссылка на тег, в котором происходит выполнение JS - на select.
0 - см.тело функции.

Как вывести? А как элемент массива вычисляется?
В общем, пример вывода я дал выше. А выбор value, от которого в примере я избавился, делается:
event.srcElement[event.srcElement.selectedIndex].value
При этом я не использовал параметр this, который в теге select равен event.srcElement, но в теле функции его (this) уже не применишь (только через параметр, как в твоём примере).
Итого, чтобы вызвать элемент массива, надо
document.getElementById('txt').value=
eval(event.srcElement[event.srcElement.selectedIndex].value+"["+(вписать_индекс_элемента)+"]");
где txt - id тега input. (<input id=txt>)

   
 
 автор: Кирилл   (09.11.2005 в 20:16)   письмо автору
 
   для: denvor   (09.11.2005 в 12:10)
 

если я правильно понял то надо чтото типа етого:

..присоединяемся к базе
echo "<Form name='name'>
 <Select Name='sel' Size='1'
 OnChange='window.parent.(имя фрейма или чтото другое).location.href = this.options[this.selectedIndex].value;'>
<Option selected value=''>товары ...</Option>";

$result = mysql_query("SELECT * FROM 'tovar'");
$num_results=mysql_num_rows($result);
for ($p = 0; $p < $num_results; $p++)
{
 $myrow=mysql_fetch_array($result);
 echo"<Option value=name_script.php?tovar=".$myrow['id'].">".$myrow['tovar']."</Option>";
}
echo "</Select></Form>";
......

   
 
 автор: denvor   (09.11.2005 в 21:03)   письмо автору
 
   для: Кирилл   (09.11.2005 в 20:16)
 

не совсем. Нужно вывести без перезагрузки страницы, средствами JS. Данные для работы уже загружены в массивы из базы.

почти все сделал, одна загвоздка: эта функция

function showValue(catName){
          var catValue;
          var catValue2;
          catValue = catName.options[catName.selectedIndex].value;
          catValue2 = 'cat' + catValue + '[1]';
          objText = document.forms[0].elements['text'];
          objText.value = catValue2;

получает номер пункта SELECT и формирует название элемента массива (например, при цифре 0 выводится cat0[1]). Элементы массива и их значения определены. Так вот, вместо вывода ЗНАЧЕНИЯ элемента массива выводится НАЗВАНИЕ ПЕРЕМЕННОЙ (в данном случае - cat0[1])

в php можно было бы написать $cat$num и при $num = 0 была бы переменная $cat0. А как в JS дать понять, что мне нужно значение. а не название переменной?

   
Rambler's Top100
вверх

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