Связанные выпадающие списки

Статус
Закрыто для дальнейших ответов.

Katerina

Active Member
Регистрация
06.09.2010
Сообщения
31
Помогите? уже неделю не могу решить проблему

Нужно сделать несколько взаимосвязанных списков, каждый из которых зависит от предыдущего. Значения берутся из БД.

Начало работает правильно. Соединяюсь с БД и заполняю первый селект
Код:
<script type="text/javascript">
(function($){
  // очищаем select
  $.fn.clearSelect = function() {
	  return this.each(function(){
		  if(this.tagName=='SELECT') {
		      this.options.length = 0;
		      $(this).attr('disabled','disabled');
		  }
	  });
  }
  // заполняем select
  $.fn.fillSelect = function(dataArray) {
	  return this.clearSelect().each(function(){
		  if(this.tagName=='SELECT') {
			  var currentSelect = this;
			  $.each(dataArray,function(index,data){
				  var option = new Option(data.text,data.value);
				  if($.support.cssFloat) {
					  currentSelect.add(option,null);
				  } else {
					  currentSelect.add(option);
				  }
			  });
		  }
	  });
  }
})(jQuery);
</script>
<script type="text/javascript">
$(document).ready(function(){

  // выбор категории
  function adjustAuto(){
  	var firmaValue = $('#firma').val();
  	var tmpSelect = $('#auto');
	
 	if(firmaValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  		adjustModel();
  	} else {
  		$.getJSON('cascadeSelectAuto.php',{firma:firmaValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); adjustModel(); });
  		
  	}
  };
  // выбор модели
  function adjustModel(){
  	var firmaValue = $('#firma').val();
  	var autoValue = $('#auto').val();
  	var tmpSelect = $('#model');
  	if(firmaValue.length == 0||autoValue.length == 0) {
  		tmpSelect.attr('disabled','disabled');
  		tmpSelect.clearSelect();
  	} else {
  		$.getJSON('cascadeSelectModel.php',{firma:firmaValue,auto:autoValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); });
  	}
  };
	
  $('#firma').change(function(){
  	adjustAuto();
  }).change();
  $('#auto').change(adjustModel);
  $('#model').change(function(){
  	if($(this).val().length != 0) { alert('Оборудование выбрано!'); }
  });

});
</script>
<body>
<?php
$link = mysql_connect("localhost", "root")
or die("Не могу подключиться");
print ("Соединение выполнено");
$link = mysql_connect("localhost", "root")
or die("Не могу подключиться" );
// сделать test текущей базой данных
mysql_select_db('spiski', $link) or die ('Не могу выбрать БД');
$result = mysql_query ("select * from firma_oborud", $link);
mysql_free_result($result);

?>
<table cellpadding="10">
<tr>
<td >
  <p >
  <label>Оборудование</label><br />
  
  
<!-- Первый (главный) список -->
  <select id="List1">
    <option value="0">Выбирите производителя</option>
  
  <?php
  $result = mysql_query ("select * from firma_oborud", $link);
while ($row = mysql_fetch_assoc($result))
{
echo '<option value="'.$row['firma1_id'].'">'.$row['name'].'</option>';
}
?>
  </select>

<!-- Подчиненный список 1 (изначально пуст) -->
  <select id="List2" disabled="disabled"></select>
  
<!-- Подчиненный список 2 (изначально пуст) -->
  <select id="List3" disabled="disabled"></select>
Эти списки заполняем при помощи вызова вот такой пхп страницы
Код:
<?php

header('Content-Type: text/html; charset=utf-8');

$a=$_GET['firma']; $n=0;
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 	$res = mysql_query ("select * from tip_oborud where type1_id = $a", $link);
while ($row = mysql_fetch_assoc($res))

$nam = $row['name'];
print '[{value:"$n",text:"$nam"}]';
$n=$n+1;
}}
?>
И ничего не выходит, только первый селект заполнен,а остальные пустые и не активируются.
Что не так? Где править и на что?
 

Katerina

Active Member
Регистрация
06.09.2010
Сообщения
31
Первый вопрос решила по другому, теперь все 3 списка светятся, но вот теперь другая проблема не могу передать данные в 4-ый селект,подскажите как правильно организовать конструкцию метода пост
Код:
<?php
// указываем параметры для подключения к MySQL
$host='localhost'; // имя хоста
$database='spiski'; // имя базы данных
$user='root'; // заданное вами имя пользователя
$pswd=''; // заданный вами пароль
// подключаемся к MySQL
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");


function is_sel($a, $field)
{
  $b = isset($_POST[$field])?$_POST[$field]:NULL;
  if($a == $b) return 'selected="selected"';
}

$res = mysql_query('SELECT * FROM firma_oborud');
?>
<form id="frm" method="post">
<select name="firma" onchange="document.getElementById('frm').submit()" >
<option value='null'>- Выберите производителя -</option>
<?
// выводим все строки из столбца name таблицы firma
    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['firma1_id'],'firma')." value='" . $row['firma1_id'] . "'>" . $row['name'] . "</option>\r\n";
echo "</select>";
echo "<br/>";

if(isset($_POST['firma']))
{
  $res=mysql_query('SELECT * FROM tip_oborud WHERE firma1_id="'.(int)$_POST['firma'].'"');

  echo "<select name=\"tip\" onchange=\" document.getElementById('frm').submit();\" >
    <option  id=\"tip\" value='0'>- Выберите категорию -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['type1_id'],'tip')." value='" . $row['type1_id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo "<br/>";
$tip = isset($_POST['tip'])?$_POST['tip']:NULL;
if($tip && $tip !== 0)
{
  $res=mysql_query('SELECT * FROM prod_oborud WHERE type1_id='.(int)$_POST['tip']);

  echo "<select id=\"model\" name=\"model\" onchange=\"document.getElementById('frm').submit()\" >
    <option  value='0'>- Выберите модель -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['prod1_id'],'model')." value='" . $row['prod1_id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo "<br/>";
$ant = (isset($_POST['ant'])?$_POST['ant'])?$_POST['ant']:NULL;      вот тут не правильно  передаю

if($ant && $ant !== 0)
{
  $res=mysql_query('SELECT * FROM antena WHERE id='.(int)$_POST['ant']);

  echo "<select id=\"tipant\" name=\"tipant\" onchange=\"document.getElementById('frm').submit()\" >
    <option  value='0'>- Выберите антенну -</option>";

    while($row = mysql_fetch_array($res))
      echo "<option ".is_sel($row['id'],'antena')." value='" . $row['id'] . "'>" . $row['name'] . "</option>\r\n";

  echo "</select>";
}
echo '</form>';

$ant = isset($_POST['tipant'])?$_POST['tipant']:NULL;
if($ant && $ant !== 0)
{
  $res=mysql_query('SELECT * FROM antena WHERE id='.(int)$_POST['tipant'].' LIMIT 1');
  $row = mysql_fetch_array($res);
  echo "<h1>Хочу ".$row['name']."!</h1>";
}
?>
все во всем разобралась, тему можно закрыть
 
Статус
Закрыто для дальнейших ответов.
Верх Низ