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

HTML+CSS+JavaScript

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

 

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

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

тема: mysql + php + javascript + <select></select>
 
 автор: HeoH   (03.12.2004 в 23:51)   письмо автору
 
 

есть 2 таблицы в бд mysql

1я таблица - список разделов такого вида:
+---+----------+
| id | name |
+---+----------+

2я таблица - таблица подразделов:
+----+--------------+-----------+
| id | subname | subid |
+----+--------------+-----------+
поле id первой таблицы соответствует полю id второй таблицы
в первой таблице содержится названия и id разделов во второй названия всех подразделов

через html хочу сделать 2 списка чтобы в первом можно было выбрать раздел а во втором отображались только подразделы этого раздела

первый список я сделал:
            
$query="SELECT * FROM table1";
$result = MYSQL_QUERY($query);
   
if($result)
     $number = MYSQL_NUMROWS($result);
if($number>0)
{
   print "<select id=\"razdel\" name=\"razdel\" onchange=\"show_subs();\">";
   print "<option value=\"\"></option>";
   for($i=0;$i<$number;$i++)
   {
      $row=mysql_fetch_array($result);
      print "<option value=\"".$row['id']."\">".$row['name']."</option>";
   }
   print "</select>";
}


а вот как написасть show_subs() - чтобы заработал второй список чего-то никак собразить не могу =(

хочу все это сделать с помощью javascript чтобы не заставлять пользователя нажимать лишние конпки

   
 
 автор: Crux   (04.12.2004 в 15:38)   письмо автору
 
   для: HeoH   (03.12.2004 в 23:51)
 

могу предложить следующее

<html>
<head>
<script language="JavaScript">
dir = new Array()

dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")

dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")

function dir_qrec(subname,subid){
    this.subname=subname
    this.subid=subid
    return this
}

function show_subs1()

for (var i=0;i<dir[0].length;i++)    
    {
    document.write("<option value='"+dir[0][i].subid+"'>"+dir[0][i].subname+"</option>")
    }
}

function show_subs()

k=document.form1.menu1.selectedIndex
for (var i=0;i<dir[k].length;i++)    
    {
    document.form1.menu2.options[i].text=dir[k][i].subname
    document.form1.menu2.options[i].value=dir[k][i].subid
    }
}
</script>
</head>

<body>
<form name="form1">
  <select name="menu1" onChange="show_subs();">
    <option selected>unnamed1</option>
    <option>unnamed2</option>
  </select>
  <br>
  <select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>


в массив dir зделайте запись из БД сами, думаю справитесь, если не получется пишите

если что-то не понятно, объясню, пишите

   
 
 автор: Crux   (04.12.2004 в 17:05)   письмо автору
 
   для: Crux   (04.12.2004 в 15:38)
 

<html>
<head>
<script language="JavaScript">
dir = new Array()

dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")

dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")

function dir_qrec(subname,subid){
this.subname=subname
this.subid=subid
return this
}

function show_subs1()
{
for (var i=0;i<dir[0].length;i++)
{
document.write("<option value='"+dir[0][i].subid+"'>"+dir[0][i].subname+"</option>")
}
}

function show_subs()
{
k=document.form1.menu1.selectedIndex
for (var i=0;i<dir[k].length;i++)
{
document.form1.menu2.options[i].text=dir[k][i].subname
document.form1.menu2.options[i].value=dir[k][i].subid
}
}
</script>
</head>

<body>
<form name="form1">
<select name="menu1" onChange="show_subs();">
<option selected>unnamed1</option>
<option>unnamed2</option>
</select>
<br>
не правильно в первом случае,должно быть вот так



<select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>

   
 
 автор: Crux   (04.12.2004 в 17:09)   письмо автору
 
   для: Crux   (04.12.2004 в 17:05)
 

блин косяки
и исправить не могу

   
 
 автор: Crux   (04.12.2004 в 17:09)   письмо автору
 
   для: Crux   (04.12.2004 в 17:09)
 

ещё одна попытка

<html>
<head>
<script language="JavaScript">
dir = new Array()

dir[0] = new Array()
dir[0][0]=new dir_qrec("sub1_1","value1_1")
dir[0][1]=new dir_qrec("sub1_2","value1_2")
dir[0][2]=new dir_qrec("sub1_3","value1_3")

dir[1] = new Array()
dir[1][0]=new dir_qrec("sub2_1","value2_1")
dir[1][1]=new dir_qrec("sub2_2","value2_2")
dir[1][2]=new dir_qrec("sub2_3","value2_3")

function dir_qrec(subname,subid){
    this.subname=subname
    this.subid=subid
    return this
}

function show_subs1()

for (var l=0;l<dir[0].length;l++)    
    {
    document.write("<option value='"+dir[0][l].subid+"'>"+dir[0][l].subname+"</option>")
    }
}

function show_subs()

k=document.form1.menu1.selectedIndex
for (var l=0;l<dir[k].length;l++)    
    {
    document.form1.menu2.options[l].text=dir[k][l].subname
    document.form1.menu2.options[l].value=dir[k][l].subid
    }
}
</script>
</head>

<body>
<form name="form1">
  <select name="menu1" onChange="show_subs();">
    <option selected>unnamed1</option>
    <option>unnamed2</option>
  </select>
  <br>
  <select name="menu2" onChange="">
<script language="JavaScript">
<!--
show_subs1();
//->
</script>
</select>
</form>
</body>
</html>

   
 
 автор: Crux   (04.12.2004 в 17:17)   письмо автору
 
   для: Crux   (04.12.2004 в 17:09)
 

cheops
я наверное понял что за косяки в коде у меня использовалась переменная i и там где она стояла в [ ], ваш скрипт перепровлял всё последующее в наклонное положение...
наверное лучше если текст выделяется тэгом code все остальные тэги не срабатывали

   
 
 автор: HeoH   (04.12.2004 в 17:33)   письмо автору
 
   для: Crux   (04.12.2004 в 17:17)
 

огромное спасибо!!!
jаvascript приходится изучать буквально налету =((

   
 
 автор: HeoH   (04.12.2004 в 22:32)   письмо автору
 
   для: Crux   (04.12.2004 в 17:09)
 

>function show_subs1()
>{
>for (var l=0;l<dir[0].length;l++)
> {
> document.write("<option
>value='"+dir[0][l].subid+"'>"+dir[0][l].subname+"</option>")
> }
>}
Все вроде ок,
но только из-за этой функции не корректно работает - она создает первоначальный список, элементы которого уже потом меняются.
У меня первый массив dir[0] состоит из одного элемента (пустого) - создается список из одного элемента, но следующие массивы у меня из одного и более элементов - при изменении первого списка во втором списке меняется только один первый элемент остальные вобще не отображаются как это поправить?

   
 
 автор: Crux   (05.12.2004 в 17:55)   письмо автору
 
   для: HeoH   (04.12.2004 в 22:32)
 

хм...
об этом я не подумал...
в ближайщее время попробую что-нибудь придумать

   
 
 автор: Crux   (05.12.2004 в 18:14)   письмо автору
 
   для: Crux   (05.12.2004 в 17:55)
 

перепешите функцию show_subs()
вот так вот


function show_subs()
{
var k=document.form1.menu1.selectedIndex
var listObj=document.form1.menu2
listObj.length=0
for (var j=0; j<dir[k].length; j++)
    {
    listObj.options[j]=new Option(dir[k][j].subname)
    document.form1.menu2.options[j].value=dir[k][j].subid
    }
listObj.options[0].selected=true
}

   
 
 автор: Crux   (05.12.2004 в 19:23)   письмо автору
 
   для: Crux   (05.12.2004 в 18:14)
 

>У меня первый массив dir[0] состоит из одного элемента (пустого)

тогда можно всё упростить убрать лишнию функцию
т.е. это всё должно выглядеть так:

<html>
<head>
<script language="JavaScript">
dir = new Array()

dir[0] = new Array()
dir[0][0]=new dir_qrec("","")

dir[1] = new Array()
dir[1][0]=new dir_qrec("sub1_1","value1_1")
dir[1][1]=new dir_qrec("sub1_2","value1_2")

dir[2] = new Array()
dir[2][0]=new dir_qrec("sub2_1","value2_1")
dir[2][1]=new dir_qrec("sub2_2","value2_2")
dir[2][2]=new dir_qrec("sub2_3","value2_3")

function dir_qrec(subname,subid){
    this.subname=subname
    this.subid=subid
    return this
}

function show_subs()
{
var k=document.form1.menu1.selectedIndex
var listObj=document.form1.menu2
listObj.length=0
for (var j=0; j<dir[k].length; j++)
    {
    listObj.options[j]=new Option(dir[k][j].subname)
    document.form1.menu2.options[j].value=dir[k][j].subid
    }
listObj.options[0].selected=true
}
</script>
</head>

<body>
<form name="form1">
  <select name="menu1" onChange="show_subs();">
    <option selected>unnamed1</option>
    <option>unnamed2</option>
    <option>unnamed3</option>
  </select>
  <br>
  <select name="menu2" onChange="">
<option></option>
</select>
</form>
</body>
</html>

   
 
 автор: HeoH   (06.12.2004 в 20:10)   письмо автору
 
   для: Crux   (05.12.2004 в 19:23)
 

супер имеено то, что нужно!
еще раз огромное спасибо!!!

   
Rambler's Top100
вверх

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