Имеются два селекта: марка и модель и переключатель: иностранное или отечественное авто. При выборе значения переключателя подгружается список марок автомобилей, при выборе марки подгружается список моделей, а при выборе модели можно ввести дополнительно год выпуска и/или загрузить некоторую информацию об этом автомобиле.
Исходный код примера:
<?php
/* Выбор марка, модель, год выпуска автомобиля с использованием технологии Ajax
Взято http://htmlweb.ru/ajax/example/automarka.php
Разрешается использование в любых своих разработках.
Размешение кода в открытом доступе разрешается только с сохранением активной ссылки на источник.
Все остальные права принадлежат Колесникову Дмитрию Геннадьевичу (kdg@htmlweb.ru, ICQ 17754093).
*/
require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');
CREATE TABLE IF NOT EXISTS pb_marka (
id int(10) unsigned NOT NULL auto_increment,
`name` char(64) collate cp1251_bin NOT NULL,
product tinyint(3) unsigned NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
CREATE TABLE IF NOT EXISTS pb_model (
id int(10) unsigned NOT NULL auto_increment,
marka int(10) unsigned NOT NULL,
`name` char(64) collate cp1251_bin NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;
if(isset($_GET['product'])){
$product=$_SESSION['product']=intval($_GET['product']); // 1-импортная
echo '<option value=0 selected>Выберите марку</option>';
$res = sql('SELECT * FROM '.db_prefix.'marka WHERE product='.$product.' ORDER by name');
while($row = mysql_fetch_array($res))
echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
exit;
}
elseif(isset($_GET['marka'])){
$marka=$_SESSION['marka']=intval($_GET['marka']);
$res = sql('SELECT * FROM '.db_prefix.'model WHERE marka='.$marka.' ORDER by name');
/* todo if(mysql_num_rows($res)>1) */ echo '<option value=0 selected>Выберите модель</option>';
while($row = mysql_fetch_array($res))
echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
exit;
}elseif(isset($_GET['model'])){
$id_model=intval(param('model'));
$res = sql('SELECT * FROM '.db_prefix.'model WHERE id='.$id_model.' LIMIT 1');
if(!($row = mysql_fetch_array($res)))die;
$model=$row['name'];
$id_marka=intval($row['marka']);
$res = sql('SELECT * FROM '.db_prefix.'marka WHERE id='.$id_marka.' LIMIT 1');
if(!($row = mysql_fetch_array($res)))die;
$marka=$row['name'];
$product=intval($row['product']);
echo "
<div style='border: #C5D3DC 1px solid; padding: 10px; width: 97%;'>
производитель=<b>".($product==1?' импортное ТС':'отечественное ТС')."</b>
<br/>марка=<b>".$marka."</b>
<br/>модель=<b>".$model."</b>
</div>";
mysql_close();
die;
}
$script=@$_SERVER['SCRIPT_URL']; if(!$script)$script=@$_SERVER['REQUEST_URI'];
$_SESSION['marka']=$_SESSION['model']=0;
$_SESSION['product']=1;
?>
<table border="0" cellspacing="0" cellpadding="5" align="center">
<tr>
<td width="250">Производитель транспортного средства (ТС)
<td>
<input type="radio" CHECKED value="1" name="product"
onClick="ajaxLoad('marka', '<?=$script?>?product='+this.value, '','',''); "> Иностранное ТС<br>
<input type="radio" value="2" name="product"
onClick="ajaxLoad('marka', '<?=$script?>?product='+this.value, '','',''); "> Отечественное ТС<br>
<td width="250">
<tr>
<td colspan="3" class="blank">
<tr>
<td id="markat">Марка ТС
<td><select style="WIDTH: 200px; height:21" name="marka" id="marka" onLoad='this.focus = false;'
onChange="getObj('model').disabled=''; ajaxLoad('model', '<?=$script?>?marka='+this.options[this.selectedIndex].value, '','','');">
<option value=0 selected>Выберите марку</option>
<?
$res = sql('SELECT * FROM '.db_prefix.'marka WHERE product=1 ORDER by name');
while($row = mysql_fetch_array($res))
echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
?>
</select>
<tr>
<td colspan="3" class="blank">
<tr>
<td id="modelt">Модель ТС
<td><select style="WIDTH: 200px; height:21" name="model" id="model" <?=(@$marka?'':'disabled="disabled"') ?>
onChange="ajaxLoad('info', '<?=$script?>?model='+this.options[this.selectedIndex].value, '','','');" >
<option value selected disabled="disabled">Выберите модель</option>
</select>
<tr>
<td colspan="3" class="blank">
<tr>
<td id="explt">Год выпуска ТС
<td><select style="WIDTH: 200px; height:21" name="expl">
<option value selected>Выберите значение</option>
<? for($i=0;$i<=15;$i++) echo "<option value='".$i."'>".(intval(date("Y"))-$i)."</option>\n";
?>
</select>
</table>
<div id="info"></div>
<script language=JavaScript><!--
function getObj(objID)
{
if (document.getElementById) {return document.getElementById(objID);}
else if (document.all) {return document.all[objID];}
else if (document.layers) {return document.layers[objID];}
}
function ajaxLoad(obj,url,defMessage,post,callback){
var ajaxObj;
if (defMessage) document.getElementById(obj).innerHTML=defMessage;
if(window.XMLHttpRequest){
ajaxObj = new XMLHttpRequest();
} else if(window.ActiveXObject){
ajaxObj = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
ajaxObj.open ((post?'POST':'GET'), url);
if (post&&ajaxObj.setRequestHeader)
ajaxObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251;");
ajaxObj.onreadystatechange = ajaxCallBack(obj,ajaxObj,(callback?callback:null));
ajaxObj.send(post);
return false;
}
function updateObj(obj, data, bold, blink){
if(bold)data=data.bold();
if(blink)data=data.blink();
document.getElementById(obj).innerHTML = data; // упрощенный вариант, работает не во всех браузерах
}
function ajaxCallBack(obj, ajaxObj, callback){
return function(){
if(ajaxObj.readyState == 4){
if(callback) if(!callback(obj,ajaxObj))return;
if (ajaxObj.status==200)
updateObj(obj, ajaxObj.responseText);
else updateObj(obj, ajaxObj.status+' '+ajaxObj.statusText,1,1);
}
}}
//--></script>
?>