Перейти к содержимому



Связанные динамичные списки Select

#1 Kdes70

Kdes70
  • Пользователь
  • 55 сообщений
  • Репутация: 0
4

Отправлено 18 Апрель 2012 - 19:08

Доброго времени суток!!!
Нужна помощь переделать скрипт который состоит из двух связанных списков [страна]->[город]
мне нужно получить [категория]->[подкатегория] притом значения <option> подставлялись из БД
в БД есть вот такие таблицы:
CREATE TABLE `categories` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) default NULL,
  `meta_d` varchar(255) NOT NULL,
  `meta_k` varchar(255) NOT NULL,
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)



CREATE TABLE `sub_categories` (
  `id` int(4) NOT NULL auto_increment,
  `cat_id` int(4) NOT NULL,
  `meta_k` varchar(255) NOT NULL,
  `meta_d` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)

вот нашел вот такой скрипт
начал переделывать и застопорился на одном моменте очень нужна помощь сам справится не смогу опыта очень мало.
вот структура формы:

<form action="" method="post">
<table>
<tr>
  <td>Страна: </td>
  <td><select id="cat" name="cat" onchange="getCatList(this)">
	  
   <option value="">Выберите страну</option>
  <? $result = mysql_query("SELECT title,id FROM categories",$db);  
			if (!$result)
			{
	echo "<p>Запрос на выборку данных из базы не прошел. <br> <strong>Код ошибки:</strong></p>";
	exit(mysql_error());
			}
	if (mysql_num_rows($result) > 0)
{
	$myrow = mysql_fetch_array($result);
	do
{
	printf ("<option value='%s'>%s</option>",$myrow["id"],$myrow["title"]);[/left][/size][/font][/color]
[color=#000000][font=Verdana, Tahoma, Arial, sans-serif][size=3][left]}
	while ($myrow = mysql_fetch_array($result));
}
	?>
	</select>
  </td>
</tr>
<tr>
  <td>Город: </td>
  <td><select id="subcat" name="subcat">

  </select>
  </td>
</tr>
</table>
</form>


Здесь я вывел первый список ,второй должен подставляться из внешнего файла.

После в файле <script type="text/javascript" src="chained.js"></script>

подставил свои значения (правда не уверен что все сделал правильно)


var ajax = new Array();
function getCatList(sel)
{
var catCode = sel.options[sel.selectedIndex].value;
document.getElementById('subcat').options.length = 0; // Empty city select box
if(catCode.length>0){
  var index = ajax.length;
  ajax[index] = new sack();

  ajax[index].requestFile = 'getcities.php?catCode='+catCode; // Specifying which file to get
  ajax[index].onCompletion = function(){ createCities(index) }; // Specify function that will be executed after file has been found
  ajax[index].runAJAX();  // Execute AJAX function
}
}
function createCities(index)
{
var obj = document.getElementById('subcat');
eval(ajax[index].response); // Executing the response from Ajax as Javascript code
}


потом это все как я понимаю идет вот сюда <script type="text/javascript" src="ajax.js"></script>
и теперь следующий файл который и вызвал у меня всю проблему это getcities.php
не знаю как вывести из БД подкатегории , умоляю напишите как это зделать!!!! или если есть решение моей задачи другим способом покажите плиз!!!! Уже второй день бьюсь над этим все что выдал мне google это самый наипростейший способ
getcities.php выглядит он так:
<?php
if(isset($_GET['catCode'])){  ..это пришло из [color=#333333]chained.js[/color]
	
	  switch($_GET['catCode']){

	  case "ru":
	  echo "obj.options[obj.options.length] = new Option('Москва','1');\n";
	  echo "obj.options[obj.options.length] = new Option('Санкт-Петербург','2');\n";
	  echo "obj.options[obj.options.length] = new Option('Волгоград','3');\n";
	  echo "obj.options[obj.options.length] = new Option('Владивосток','4');\n";

	  break;
	  case "ua":

	  echo "obj.options[obj.options.length] = new Option('Киев','11');\n";
	  echo "obj.options[obj.options.length] = new Option('Одесса','12');\n";
	  echo "obj.options[obj.options.length] = new Option('Львов','13');\n";

	  break;
	  case "us":

	  echo "obj.options[obj.options.length] = new Option('Нью-Йорк','21');\n";
	  echo "obj.options[obj.options.length] = new Option('Чикаго','22');\n";
	  echo "obj.options[obj.options.length] = new Option('Вашингтон','23');\n";

	  break;
	  }
	  }  
?>

 

 

  • 0

#2 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 30 Апрель 2012 - 21:45

Такс, пойдем по стопам..

printf ("<option value='%s'>%s</option>",$myrow["id"],$myrow["title"]);[/left][/size][/font][/color]
[color=#000000][font=Verdana, Tahoma, Arial, sans-serif][size=3][left]}

У тебя в селекте, идут опции, данные которых должны передаться в РНР на вывод подкатегорий,но у тебя в есть только value, в который ты подставляешь ID с БД, тебе нужно еще привязать имя, переменной в твоем случаи это catCode тоесть должно на выходе получиться следующее


<option value="232" name="catCode" value="Страна с кодом 232 "/>
Теперь у тебя будет передаваться catCode в РНР, там его обрабатывать... делай по аналогу как ты выводил 1й список, только SQL запрос изменится немножко
$result = mysql_query("SELECT title,id FROM sub_categories WHERE meta_k = ".$_GET['catCode'],$db);

Таким образом, у тебя из БД sub_categories будут выбраны столбцы title,id в которых meta_k = value из твоей формы, тоесть ID страны, области .. или что ты там будешь писать... тоесть тебе нужно будет заполнить в БД еще и это поле..

тоесть общий код будет выглядить так:
<?php
if(isset($_GET['catCode']){
  $result = mysql_query("SELECT title,id FROM sub_categories WHERE meta_k = ".$_GET['catCode'],$db); 
  if(!result)
   die;
		 if (mysql_num_rows($result) > 0){
   while ($myrow = mysql_fetch_array($result)){
    echo "obj.options[obj.options.length] = new Option('".$myrow['title']."','".$myrow['id']."');n";
   }
  }
}
?>

  • 1

#3 Kdes70

Kdes70
    Topic Starter
  • Пользователь
  • 55 сообщений
  • Репутация: 0

Отправлено 31 Май 2012 - 20:30

Блогодарю за дохотчивое пояснение!!!
  • 0

#4 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 31 Май 2012 - 20:52

Ой спасибо! А я только хотел тему с таким же вопросом создавать :(
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#5 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 01 Июнь 2012 - 07:39

А уже видишь, на все ответили :)


  • 1


Оформление форума – IPBSkins.ru