Имеются три селекта: страна>регион>город при выборе страны подгружается список регионов, при выборе региона подгружается список городов, а при выборе города нужно делать переход на страницу index.php?country=RU®ion=2&city=3 тоесть с теми значениями, которые были выбраны в трёх селектах, по ним нужно сделать переход на страницу.
<?php
/* Выбор страна, регион, город с использованием технологии Ajax
Взято http://htmlweb.ru/ajax/example/region.php
Разрешается использование в любых своих разработках.
Размешение кода в открытом доступе разрешается только с сохранением активной ссылки на источник.
Все остальные права принадлежат Колесникову Дмитрию Геннадьевичу.
Полная платная версия с базой доступна по запросу на WMID 467585298788, E-Mail kdg@htmlweb.ru, ICQ 17754093.
*/
define("db_prefix","geo_");

function sql($query) {
$res=mysql_query ( $query );
if(!$res)die("Запрос:\n".$query."\n");
return $res;
}

// capital - ссылка на город столица государства
// telcod - телефонный код страны
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'country (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY ( id ),
        name VARCHAR(64) NOT NULL UNIQUE,
        fullname VARCHAR(64) NOT NULL,
        english VARCHAR(64) NOT NULL,
        country_code2 CHAR(2) NOT NULL, 
        country_code3 CHAR(3) NOT NULL, 
        iso CHAR(3) NOT NULL, 
        telcod CHAR(4) NOT NULL,
        location ENUM("Азия", "Океания", "Европа", "Африка", "Антарктика", "Америка"),
        capital INT UNSIGNED NOT NULL
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

// capital - ссылка на город, обласной центр
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'area (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY ( id ),
        name VARCHAR(64) NOT NULL, 
        okrug VARCHAR(64) NOT NULL,
        country INT UNSIGNED NOT NULL,
        autocod VARCHAR(12) NOT NULL,
        capital INT UNSIGNED NOT NULL
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'city (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY ( id ),
        name VARCHAR(64) NOT NULL, 
        area INT UNSIGNED NOT NULL,
        telcod CHAR(7) NOT NULL,
        latitude FLOAT(10,6),
        longitude FLOAT(10,6),
        country INT UNSIGNED NOT NULL
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

// ip - начальный IP адрес диаппазона ip-адрессов одного провайдера
// count - количество ip-адресов
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'geo_ip (
        ip BIGINT UNSIGNED NOT NULL UNIQUE,
        count INT UNSIGNED NOT NULL,
        city INT UNSIGNED NOT NULL
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

if(isset($_GET['country'])){
   echo "<option value='0'>выбрать регион</option>\n";
   $res = sql('SELECT * FROM '.db_prefix.'area WHERE country="'.addslashes(param('country')).'"');
   while($row = mysql_fetch_array($res))
    echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
   die;    
   }
elseif(isset($_GET['region'])){
   echo "<option value='0'>выбрать город</option>\n";
   $res = sql('SELECT * FROM '.db_prefix.'city WHERE area="'.addslashes(param('region')).'"');
   while($row = mysql_fetch_array($res))
    echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
   die;    
   }
elseif(isset($_GET['city'])){
$city=addslashes(param('city')); LoadGeo();
echo "
<div style='border: #C5D3DC 1px solid; padding: 10px; width: 97%;'>
Город: <b>". $geo['city']."</b><br />
Регион: <b>". $geo['region']."</b><br />
Округ: <b>". $geo['okrug']."</b><br />
Страна: <b>".$geo['country']."</b><br />
Код страны: <b>".$geo['country_code2']."</b><br />
Код страны: <b>".$geo['country_code3']."</b><br />
Широта: <b>".$geo['latitude']."</b><br />
Долгота: <b>".$geo['longitude']."</b><br />
Телефонный код страны:<b>".$geo['telcod']."</b><br />
Телефонный код города:<b>".$geo['country_telcod']."</b><br />
Автомобильный код региона:<b>".$geo['autocod']."</b><br />
Столица <b>". $geo['capital']."</b><br />
Областной центр <b>". $geo['capital']."</b><br />
</div>";
   die;    
}

function LoadGeo() // для $city заполняет $geo и переменные $region, $country
{global $geo, $city, $region, $country;
   $res = sql('SELECT * FROM '.db_prefix.'city WHERE id='.$city.' LIMIT 1');
   if($row = mysql_fetch_array($res)){
     $geo['city']=$row['name'];
     $region=$row['area'];
     $geo['city_telcod']=$row['telcod'];
     $geo['latitude']=$row['latitude'];
     $geo['longitude']=$row['longitude'];
     $res = sql('SELECT * FROM '.db_prefix.'area WHERE id='.$region.' LIMIT 1');
     if($row = mysql_fetch_array($res)){
    $geo['region']=$row['name'];
    $geo['okrug']=$row['okrug'];
    $geo['autocod']=$row['autocod'];
    $country=$row['country'];
    $res = sql('SELECT * FROM '.db_prefix.'country WHERE id='.$country.' LIMIT 1');
    if($row = mysql_fetch_array($res)){
       $geo['country']=$row['name'];
       $geo['fullname']=$row['fullname'];
       $geo['english']=$row['english'];
       $geo['country_code2']=$row['country_code2'];
       $geo['country_code3']=$row['country_code3'];
       $geo['iso']=$row['iso'];
       $geo['country_telcod']=$row['telcod'];
       $geo['location']=$row['location'];
       }
    }
     }    
}

$ip2=ip2long(getenv('REMOTE_ADDR'));
$f_add=false;
if($ip2>0){
   $res = sql('SELECT * FROM '.db_prefix.'geo_ip where '.$ip2.' BETWEEN ip and ip+count LIMIT 1');
   if ($geo = mysql_fetch_assoc($res)) {$city=$geo['city']; LoadGeo();}
   }
?>

<div id='r7'>
</div>
<br /><br />
<select name="country" id="country" onLoad="this.focus = false;"
    onChange="ajaxLoad('region', '/ajax/example/region.php?country='+this.options[this.selectedIndex].value, '','',''); document.getElementById('region').disabled='';">
<option value="0">выбрать страну</option> 

<?php
$res = sql('SELECT * FROM '.db_prefix.'country');
while($row = mysql_fetch_array($res)){
   if($row['id']==@$country){
        echo "<option value='" . $row['id'] . "' selected='selected'>" . $row['name'] . "</option>\n";
        $country=$row['id'];}
   else
        echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
}
?>
</select>

<select name="region" id="region" <?=(@$country?'':'disabled="disabled"')?>
    onChange="ajaxLoad('city', '/ajax/example/region.php?region='+this.options[this.selectedIndex].value, '','',''); document.getElementById('city').disabled='';">
<option value="0" disabled="disabled">выбрать регион</option> 
<?php
if(@$country){
$res = sql('SELECT * FROM '.db_prefix.'area WHERE country='.$country);
while($row = mysql_fetch_array($res)){
   if($row['id']==@$region){
        echo "<option value='" . $row['id'] . "' selected='selected'>" . $row['name'] . "</option>\n";
        $region=$row['id'];}
   else
        echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
   }
}
?>

</select>

<select name="city" id="city" <?=(@$region?'':'disabled="disabled"')?>
    onChange="ajaxLoad('info', '/ajax/example/region.php?city='+this.options[this.selectedIndex].value, '','','');"> 

<option value="0" disabled="disabled">выбрать город</option> 
<?php
if(@$region){
$res = sql('SELECT * FROM '.db_prefix.'city WHERE area='.$region);
while($row = mysql_fetch_array($res)){
   if($row['id']==@$city){
        echo "<option value='" . $row['id'] . "' selected='selected'>" . $row['name'] . "</option>\n";
        $region=$row['id'];}
   else
        echo "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>\n";
   }
}
?>
</select>

<div id="info">
</div>

<script language=JavaScript><!--
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>

?>