SELECT - Динамический вывод.

micr0b

Новичок
Здравствуйте!

Хотелось бы получить помощь).

Для начала покажу полный файл с скриптом:

index.php
PHP:
<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">
$(document).ready(function(){
	
	$("#selecing").change(function(){
		/*
		* В переменную width, height, diameter, idfirma ложим значение селекта
		*/
		var width = $("#width").val();
		var height = $("#height").val();
		var diameter = $("#diameter").val();
		var idfirma = $("#idfirma").val();
		
		/*
		* Формируем данные, которые будут отправлены серверу
		* var dataString = 'width='+width+'&height='+height+'&diameter='+diameter+'&idfirma='+idfirma; // если POST
		*/
		var dataString = {'width':width, 'height':height, 'diameter':diameter, 'idfirma':idfirma}; // если GET

		/*
		* Отправляєм на обработку запрос серверу для получения ответа,
		* с помощю которого потом заполним селекты новыми значениями
		*/
		//alert("1"+width+"\n2"+height+"\n3"+diameter+"\n4"+idfirma);
		$.ajax({
			type: "GET",
			url: "pick.php",
			dataType: "text", // or "json"
			data: dataString,
			cache: false,
			success: function(msg)
			{
				var result;
				try{
					result = eval('(' + msg + ')'); // or delete a line of code if dataType: "json"
					/*
					* проходимся по пришедшему массиву циклом
					*/
					for (var key in result)
					{
						/*
						* Очищаем селект от предыдущих элементов 
						*/
						// переменная хранит имя селекта
						var nameArr = $('#'+key);
						nameArr.each(function(){ $(this).empty().append('<option value="">' + key + '</option>');});
						// переменная хранит значения елементов конкретного селекта
						var valuesArr = result[key];
						for (i in valuesArr)
						{
							/* 
							* Добавляем в селект соответствующие элементы
							*/
							nameArr.append('<option value="' + valuesArr[i] + '">' + valuesArr[i] + '</option>');
						}
					}
				}catch(e){ alert("Error"); }
			},
			//complete: function(){alert('Дані добавлені');},
			error: function(){alert('Виникла помилка при відправленні даних, спробуйте ще раз.');}
		});

	});

});
</script>

<div id="selecing">
	<select id="width" name="width" />
		<option rel="" value="">width</option>
		<option value="195">195</option>
		<option value="200">200</option>
		<option value="170">170</option>
		<option value="342">342</option>
	</select>

	<select id="height" name="height" />
		<option value="">height</option>
		<option value="65">65</option>
		<option value="50">50</option>
		<option value="30">30</option>
		<option value="24">24</option>
		<option value="34">34</option>
	</select>
	
	<select id="diameter" name="diameter" />
		<option value="">diameter</option>
		<option value="15">15</option>
		<option value="8">8</option>
		<option value="34">34</option>
		<option value="9">9</option>
	</select>
	
	<select id="idfirma" name="idfirma" />
		<option value="">idfirma</option>
		<option value="1">1</option>
		<option value="2">2</option>
	</select>
</div>
pick.php
PHP:
<?PHP
// http://ajax.shuna/pick.php?width=&height=&diameter&idfirma=

include "config.php";

$width = mysql_escape_string($_GET['width']);
$height = mysql_escape_string($_GET['height']);
$diameter = mysql_escape_string($_GET['diameter']);
$idfirma = mysql_escape_string($_GET['idfirma']);

$sql = "SELECT `width`, `height`, `diameter`, `idfirma` FROM `objects` WHERE `active`='0'";

if(!empty($width))
{
	$sql .= " AND `width`='".$_GET['width']."'";
}
if(!empty($height))
{
	$sql .= " AND `height`='".$_GET['height']."'";
}
if(!empty($diameter))
{
	$sql .= " AND `diameter`='".$_GET['diameter']."'";
}
if(!empty($idfirma))
{
	$sql .= " AND `idfirma`='".$_GET['idfirma']."'";
}

$query = mysql_query($sql);

while($arr = @mysql_fetch_array($query))
{

	if(empty($width)){$origArr['width'][] = $arr['width'];}
	if(empty($height)){$origArr['height'][] = $arr['height'];}
	if(empty($diameter)){$origArr['diameter'][] = $arr['diameter'];}
	if(empty($idfirma)){$origArr['idfirma'][] = $arr['idfirma'];}
}

// Pick
if(!empty($origArr))
{
	$resultArr = array();
	foreach($origArr as $key => $val)
	{
		$resultArr[$key] = array_values(array_unique($val));
	}
	echo json_encode($resultArr);
}
?>
Так вот, скрипт работает вроде отлично, но я не могу сделать так чтобы наполнение select-а при запуске скрипта наполнялся автоматически.


Приблизительный пример моего скрипта есть на сайте shinteh.com.ua
 

micr0b

Новичок
database:

PHP:
CREATE TABLE `objects` (
  `idobject` int(5) NOT NULL auto_increment,
  `idfirma` int(2) NOT NULL,
  `idmodel` int(4) NOT NULL,
  `width` varchar(4) NOT NULL,
  `height` varchar(4) NOT NULL,
  `diameter` varchar(4) NOT NULL,
  `inip` varchar(10) NOT NULL,
  `typetc` varchar(15) NOT NULL,
  `reinforced` varchar(15) NOT NULL,
  `cina` varchar(7) NOT NULL,
  `active` int(1) NOT NULL,
  PRIMARY KEY  (`idobject`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;

--
-- Дамп данных таблицы `objects`
--

INSERT INTO `objects` VALUES(1, 1, 1, '195', '65', '15', '81T', 'легковой', '', '994,00', 0);
INSERT INTO `objects` VALUES(2, 1, 2, '200', '50', '8', '107V', 'легковой', '', '1299,00', 0);
INSERT INTO `objects` VALUES(3, 1, 2, '170', '30', '8', '100H', 'внедорожник', 'XL', '1096,00', 0);
INSERT INTO `objects` VALUES(4, 1, 3, '195', '24', '34', '234', '654', '3', '535', 0);
INSERT INTO `objects` VALUES(5, 2, 3, '342', '34', '9', '234', '654', '3', '535', 0);
 

~WR~

Новичок
Обратил внимание - какой смысл делать mysql_escape_string, если все равно потом в запрос подставляется голый $_GET ? :D
 
Сверху