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

HTML+CSS+JavaScript

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

 

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

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

тема: Зависимые поля выбора
 
 автор: Felix   (14.12.2004 в 04:30)   письмо автору
 
 

Здравствуйте.
Вопрос на засыпку.
Как сделать так чтобы при выборе элемента из такого поля :

<SELECT size=1>
<OPTION selected value=1>Выберите:</OPTION>
<OPTION value=2> Первый</OPTION>
<OPTION value=3> Второй</OPTION>
<OPTION value=4>Третий</OPTION>
<OPTION value=5> Четвертый</OPTION>
</SELECT>

в следующем поле (таком же) изменялся бы список в зависимости от того что выбрано в первом поле. При этом Список элементов чтобы брался из базы MySQL в обоих полях, и все это по возможности без перезагрузки страници.

PS: По возможности чтобы все это работало на php (если возможно конечно) , ну а если нет то тогда как вообще можно ?

   
 
 автор: cheops   (14.12.2004 в 09:44)   письмо автору
 
   для: Felix   (14.12.2004 в 04:30)
 

Здесь без JavaScript не обойтись, что-то похожее обсуждалось по темам:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=75
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=992

   
 
 автор: Felix   (15.12.2004 в 07:18)   письмо автору
 
   для: cheops   (14.12.2004 в 09:44)
 

Привет.

Я сделал вот так:

<?php
include "connect.php";
$ath mysql_query("select * from baza_podrazd");
if(
$ath)
{
  while(
$List mysql_fetch_array($ath))
  {
print 
"<form action='' method='post'>";
print 
"<select name='podr_in' size='1'>";
    echo 
"<option value=".$List['id_group'].">".$List['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print 
"</select><br><br>";
#print $podr_in;
//////////////////////////////////////////////////////////////////////////
$tbl mysql_query("select * from baza_uchastkov WHERE id_group='$podr_in'");
if(
$tbl)
{
  while(
$Lit mysql_fetch_array($tbl))
  {
print 
"<select name='uch_in' size='1'>";
    echo 
"<option value=".$Lit['shifr'].">".$Lit['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select><br><br><input type='submit' value='Отправить'></form>";
#print $uch_in;
?>


а как теперь сделать чтобы при выборе в первом селекте происходил переход без нажатия на кнопку submit ?

   
 
 автор: elenaki   (15.12.2004 в 11:25)   письмо автору
 
   для: Felix   (15.12.2004 в 07:18)
 

<select name="podr_in"  onChange="redirect(this.options.selectedIndex)">


function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}

   
 
 автор: glsv (Дизайнер)   (15.12.2004 в 11:30)   письмо автору
 
   для: Felix   (15.12.2004 в 07:18)
 

Поставьте на событие изменения выбранного значения (onchange) отсылку формы submit()
onchange='this.form.submit()'

<?
echo "
<form name=frm action='action.php' method=post>
<select name=3 onchange='this.form.submit()'>
    <option value='1'> 1</option>
    <option value='2'> 2</option>
    <option value='3'> 3</option>
</select>
</form>"
;
?>


Аа-а, нужно на вторую форму перейти. Извините, не понял.

PS: Свой код стирать не буду - вдруг тоже пригодится.

   
 
 автор: Crux   (15.12.2004 в 11:32)   письмо автору
 
   для: Felix   (15.12.2004 в 07:18)
 

[поправленно]

   
 
 автор: Felix   (16.12.2004 в 06:42)   письмо автору
 
   для: Crux   (15.12.2004 в 11:32)
 


<?php
include "html/in.html";
include 
"connect.php";
print 
"<form action='' method='post'>";
//Дата
print "<INPUT type='TEXT' name='date' maxlength='10' size='20' value=''><BR><BR>";
//выбор позразделения предоставляющего услуги
print "<select name='podr_in' size='1' onchange='this.form.submit()'>";
$ath mysql_query("select * from baza_podrazd");
if(
$ath)
{
  while(
$List mysql_fetch_array($ath))
  {
      echo 
"<option value=".$List['id_group'].">".$List['znachenie']."</OPTION>";
  }
      if(
$podr_in === '')
    {
    print 
"Хрен";
    }
    Else
    {
       
$r=mysql_query("SELECT znachenie FROM baza_podrazd WHERE id_group='$podr_in'");
        
$f=mysql_result($r,znachenie);
    echo 
"<option selected value=".$podr_in.">".$f."</OPTION>";
    }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print 
"</select><br><br>";
//Выбор участка предоставляющего услуги
$tbl mysql_query("select * from baza_uchastkov WHERE id_group='$podr_in'");
if(
$tbl)
{
  while(
$Lit mysql_fetch_array($tbl))
  {
print 
"<select name='uch_in' size='1'>";
    echo 
"<option value=".$Lit['shifr'].">".$Lit['znachenie']."</OPTION><br>";
  }

}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select><br><br>";
//выбор механизмов
print "<select name='mehan' size='1'>";
$tble mysql_query("select * from baza_mehanizm");
if(
$tble)
{
  while(
$Lite mysql_fetch_array($tble))
  {
    echo 
"<option value=".$Lite['shifr'].">".$Lite['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select><br><br>";
//выбор м/ч
print "<INPUT type='TEXT' name='times' maxlength='5' size='20' value=''><BR><BR>";
//выбор подразделения заказчика
print "<select name='podr_out' size='1' onchange='this.form.submit()'>";
$athi mysql_query("select * from baza_podrazd");
if(
$athi)
{
  while(
$Listi mysql_fetch_array($athi))
  {
      echo 
"<option value=".$Listi['id_group'].">".$Listi['znachenie']."</OPTION>";
  }
      if(!isset(
$podr_out))
    {
    print 
"Хрен";
    }
    Else
    {
       
$r=mysql_query("SELECT znachenie FROM baza_podrazd WHERE id_group='$podr_out'");
        
$f=mysql_result($r,znachenie);
    echo 
"<option selected value=".$podr_out.">".$f."</OPTION>";
    }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print 
"</select><br><br>";
//выбор уастка заказчика
$tbls mysql_query("select * from baza_uchastkov WHERE id_group='$podr_out'");
if(
$tbls)
{
  while(
$Lits mysql_fetch_array($tbls))
  {
print 
"<select name='uch_out' size='1'>";
    echo 
"<option value=".$Lits['shifr'].">".$Lits['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select><br><br>";
//кнопка отправки
print"<INPUT type='submit' value='послать'>";
print 
"</form>";
include 
"html/out.html";
?>


Как сделать так чтобы после того как были выбраны подразделения и участок заказчики,
выбранные ранее подразделения и участок предоставляющие услуги не пропадали а были видны те которые были выбраны. ????

   
 
 автор: glsv (Дизайнер)   (17.12.2004 в 01:55)   письмо автору
 
   для: Felix   (16.12.2004 в 06:42)
 

Сложно тестировать PHP-код без базы данных. Лучше положите сюда сгенерированный HTML-код. У нас же все равно на JavaScript задача.

   
 
 автор: Felix   (17.12.2004 в 04:02)   письмо автору
 
   для: glsv (Дизайнер)   (17.12.2004 в 01:55)
 

Вот сгенерированный html код:


<html>
<title></title>
<head>
</head>
<body background="img/13.gif"><center><form action='' method='post'>
  <table bgcolor='#c0c0c0' cellspacing='0' border='2' bordercolor='#000000'>
    <tr><td>Подразделение<br>предоставляющее услуги</td><td>
      <select name='podr_in' size='1' onchange='this.form.submit()'>
        <option value=0></OPTION>
        <option value=1>Аппарат управления</OPTION>
        <option value=2>СМУ ГЭС</OPTION>
        <option value=3>СМУ КНП</OPTION>
        <option value=4>СМУ ПГС</OPTION>
        <option value=5>УАТ</OPTION>
        <option value=6>КЗСМ</OPTION>
        <option value=7>УМТС (УПТК)</OPTION>
        <option value=8>ЭНЕРГОПРЕДПРИЯТИЕ</OPTION>
        <option value=9>УСМ</OPTION>
        <option value=10>Торговое управление</OPTION>
        <option value=11>Прочие</OPTION>
        <option selected value=0></OPTION>
        </select>
        </td></tr>
    <tr><td>Подразделение заказчик</td>
    <td>
      <select name='podr_out' size='1' onchange='this.form.submit()'>
        <option value=0></OPTION>
        <option value=1>Аппарат управления</OPTION>
        <option value=2>СМУ ГЭС</OPTION>
        <option value=3>СМУ КНП</OPTION>
        <option value=4>СМУ ПГС</OPTION>
        <option value=5>УАТ</OPTION>
        <option value=6>КЗСМ</OPTION>
        <option value=7>УМТС (УПТК)</OPTION>
        <option value=8>ЭНЕРГОПРЕДПРИЯТИЕ</OPTION>
        <option value=9>УСМ</OPTION>
        <option value=10>Торговое управление</OPTION>
        <option value=11>Прочие</OPTION>
        <option selected value=0></OPTION>
      </select>
    </td></tr>
    <tr>
      <td>Участок<br>предоставляющий услуги</td>
      <td>
        <select name='uch_in' size='1'></select>
      </td></tr>
    <tr>
      <td>Участок заказчик</td>
      <td>
        <select name='uch_out' size='1'></select>
      </td>
    </tr>
    <tr>
      <td>Механизмы</td>
      <td>
        <select name='mehan' size='1'>
          <option value=1>Экскаватор ЭО-3322 на пневмоходу</OPTION><br>
          <option value=2>Экскаватор ЭО-4225 на гусеничном ходу</OPTION><br>
          <option value=3>Экскаватор ЭО-5124 на гусеничном ходу</OPTION><br>
          <option value=4>Экскаватор ЭКГ-5 электропневмотический</OPTION><br>
          <option value=5>Бульдозер на базе Т-130, Т-170</OPTION><br>
          <option value=6>Бульдозер на базе Т-330</OPTION><br>
          <option value=7>Бульдозер ДЭТ-250</OPTION><br>
          <option value=8>Трактор колесный К-701</OPTION><br>
          <option value=9>Виброкаток ДУ-85</OPTION><br>
          <option value=10>Виброкаток ДУ-47, ДУ-62</OPTION><br>
          <option value=11>Виброкаток ВК-24</OPTION><br>
          <option value=12>Фронтальный погрузчик ТО-18</OPTION><br>
          <option value=13>Фронтальный погрузчик ПК-2202</OPTION><br>
          <option value=14>Фронтальный погрузчик ЗТМ-216</OPTION><br>
        </select>
      </td>
    </tr>
    <tr>
      <td>Моточасы м/ч</td>
      <td><INPUT type='TEXT' name='times' maxlength='5' size='20' value=''></td></tr>
    <tr>
      <td>Дата (дд.мм.гггг)</td>
      <td><INPUT type='TEXT' name='date' maxlength='10' size='20' value=''></td></tr>
    <tr>
      <td colspan='2' align='center'><INPUT type='submit' value='Выбрать'>
      </form>
      <form action='scripts.php' method='POST'
      ><INPUT type='submit' value='послать'></td></tr></table></center></body>

</html><!-- Kerio Popup Killer - script has been appended by KPF -->
<iframe id="kpfLogFrame" src="http://127.0.0.1:44501/pl.html?START_LOG" onload="destroyIframe(this)" style="display:none;">
</iframe>

И еще, когда я пытаюсь создать сессию и занести переменные из формы в сессию то у меня форма отказывается работать/

PS. Я вроде бы разобрался маленько.
Теперь мне нужна подсказка как сделать чтобы после того как данные были внесены в форму и отправлены обработчику в другой файл, при нажатии в эксплорере на кнопку "назад" и переходе обратно в форму, чтобы в этой форме уже были внесены те данные которые вносились перед отправкой. Тоесть чтобы можно было не забивать снова всю форму а только подправить нужный элемент.

Как это сделать ?

   
 
 автор: glsv (Дизайнер)   (17.12.2004 в 10:05)   письмо автору
 
   для: Felix   (17.12.2004 в 04:02)
 

Ага, вот что имелоссь ввиду.
Значит по onchange вы перегружаете страницу. И заново формируете выпадающие списки по уточненным данным. Это уже работает?

>И еще, когда я пытаюсь создать сессию и занести переменные из формы в сессию то у меня форма отказывается работать/
В чем это выражается? Я не нашел у Вас кода заносящего данные в сессию.

>Теперь мне нужна подсказка как сделать чтобы после того как данные были внесены в форму и отправлены обработчику в другой файл, при нажатии в эксплорере на кнопку "назад" и переходе обратно в форму, чтобы в этой форме уже были внесены те данные которые вносились перед отправкой.
Вообще то это должно работать и без всяких хитростей.

Но вот там на странице у Вас много JavaScript-ов.
причем функции...
function nullWindow()
function my_onload()
function my_unload()

И внизу страницы вызов

<script type="text/javascript">
<!--
    nopopups();
//-->
</script>

Они действительно нужны? Скорее всего они и чистят страницу.


PS:
Кстати, смотрел HTML-код...
Последняя форма, отправляющая данные скрипту-обработчику стоит обособленно и не содержит полей формы, заполняемых выше.
<form action='scripts.php' method='POST'><INPUT type='submit' value='послать'>

Ведь данные из выпадающих списков в таком случае не должны посылаться скрипту-обработчику scripts.php....
Или Вы хотите сохранить значения выпадающих списков в сессиях?

Можно решить это и через формы. Если не хотите возиться с одной формой, то можно в последней форме формировать скрытые поля, которые будут содержать значения выбранных элементов в списках выше. Вы же все равно на PHP формируете списки.

PS: Хм, смотрю PHP-код и не вижу вывода строчки
<form action='scripts.php' method='POST'>


PPS: У последней формы нет закрывающегося тега </form> (HTML-код)

   
 
 автор: Felix   (17.12.2004 в 11:26)   письмо автору
 
   для: glsv (Дизайнер)   (17.12.2004 в 10:05)
 

Привет.
Представляете, оказалось что это мой файервол вносил в код все ява скрипты, у меня ведь в коде кроме onchange ничего подобного нет. Стоило отключить в нем галочку блокировки поп-уп окон и все встало на свои места :)

В итоге у меня получилось вот что :


<?
include "html/in.html";
include 
"connect.php";
print 
"<center><form action='' method='post'>";
print
"<table bgcolor='#c0c0c0' cellspacing='0' border='2' bordercolor='#000000'>";
//выбор позразделения предоставляющего услуги
print "<tr><td>Подразделение<br>предоставляющее услуги</td><td>
<select name='podr_in' size='1' onchange='this.form.submit()'>"
;
$ath mysql_query("select * from baza_podrazd");
if(
$ath)
{
  while(
$List mysql_fetch_array($ath))
  {
    echo 
"<option value=".$List['shifr'].">".$List['znachenie']."</OPTION>";
  }
       if(
$podr_in === '')
    {
    print 
"@";
    }
    Else
    {
       
$r=mysql_query("SELECT znachenie FROM baza_podrazd WHERE shifr='$podr_in'");
        
$f=mysql_result($r,znachenie);
    echo 
"<option selected value=".$podr_in.">".$f."</OPTION>";
    }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print 
"</select></td></tr><tr><td>Подразделение заказчик</td><td>";
print 
"<select name='podr_out' size='1' onchange='this.form.submit()'>";
$athi mysql_query("select * from baza_podrazd");
if(
$athi)
{
  while(
$Listi mysql_fetch_array($athi))
  {
      echo 
"<option value=".$Listi['shifr'].">".$Listi['znachenie']."</OPTION>";
  }
      if(!isset(
$podr_out))
    {
    print 
"@";
    }
    Else
    {
       
$t=mysql_query("SELECT znachenie FROM baza_podrazd WHERE shifr='$podr_out'");
        
$f1=mysql_result($t,znachenie);
    echo 
"<option selected value=".$podr_out.">".$f1."</OPTION>";
    }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print 
"</select></td></tr><tr><td>Участок<br>предоставляющий услуги</td><td>";
//Выбор участка предоставляющего услуги
print "<select name='uch_in' size='1'>";
$tbl mysql_query("select * from baza_uchastkov WHERE id_group='$podr_in'");
if(
$tbl)
{
  while(
$Lit mysql_fetch_array($tbl))
  {
    echo 
"<option value=".$Lit['shifr'].">".$Lit['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select></td></tr><tr><td>Участок заказчик</td><td>";
//выбор уастка заказчика
print "<select name='uch_out' size='1'>";
$tbls mysql_query("select * from baza_uchastkov WHERE id_group='$podr_out'");
if(
$tbls)
{
  while(
$Lits mysql_fetch_array($tbls))
  {
    echo 
"<option value=".$Lits['shifr'].">".$Lits['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select></td></tr><tr><td>Механизмы</td><td>";
//выбор механизмов
print "<select name='mehan' size='1'>";
$tble mysql_query("select * from baza_mehanizm");
if(
$tble)
{
    while(
$Lite mysql_fetch_array($tble))
  {
    echo 
"<option value=".$Lite['shifr'].">".$Lite['znachenie']."</OPTION><br>";
  }
}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();
}
print
"</select></td></tr><tr><td>Моточасы м/ч</td><td>";
//выбор м/ч
print "<INPUT type='TEXT' name='times' maxlength='5' size='20' value='$times'>";
//Дата
print "</td></tr><tr><td>Дата (дд.мм.гггг)</td><td>";
$dat=date("d.m.Y");
print 
"<INPUT type='TEXT' name='date' maxlength='10' size='20' value='$dat'></td></tr>";
//кнопка отправки
print"<tr><td colspan='2' align='center'>";
print
"<INPUT type='submit' value='Выбрать'></form><form action='scripts.php' method='POST'>
<input type=hidden name=podr_in value='
$podr_in'>
<input type=hidden name=podr_out value='
$podr_out'>
<input type=hidden name=uch_in value='
$uch_in'>
<input type=hidden name=uch_out value='
$uch_out'>
<input type=hidden name=mehan value='
$mehan'>
<input type=hidden name=times value='
$times'>
<input type=hidden name=date value='
$date'>
<INPUT type='submit' value='послать'></form></td></tr></table>"
;
print 
"</center>";
include 
"html/out.html";
?>


Все прекрасно работает но нужно еще чтобы при нажатии кнопки "Выбрать" выбранные участки (предост. услуги и заказчик) и механизмы не обнулялись в форме. То есть то что выбрал пишется в переменную но на экране при этом они обнуляются (ведь происходит перезагрузка страници) а нужно чтобы и на экране они тоже оставались на месте.
Как это провернуть ?

   
 
 автор: Felix   (20.12.2004 в 04:11)   письмо автору
 
   для: Felix   (17.12.2004 в 11:26)
 

Ну подскажет мне кто-нибудь или нет ?

   
Rambler's Top100
вверх

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