Como se que para un programador es un dolor de cabeza encontrar un buen codigo y que se entienda de como hacer combos dependientes, voy a explicar como hacer el tipico PAIS, ESTADO, CIUDAD/MUNICIPIO.
Lo primero es crear la base de datos con los paises, estados y ciudades del mundo, la cual adjunto en el comprimido se llama: mundo.sql
Dentro de la carpeta classes hay un archivo llamado: DataAccess.class donde debes configurar la conexion a tu bd.
Despues viene el formulario con los tres combos dependientes el cual consta de 3 partes de codigo:
La primera parte con las librerias que se invocan para crear los combos.
Código:
<?php
require 'classes/Form.class.php';
require 'classes/DataAccess.class.php';
require 'classes/ElementsFromDB.class.php';
require 'classes/LinkedSelect.class.php';
$form=new Form('form', 'post');
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'paises',
'values'=>'id',
'options'=>'pais',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_1',
'name'=>'select_1'
),
'externalclass'=>'elementsfromdb',
'selected'=>'49',
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
)
));
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'estados',
'values'=>'id',
'options'=>'estado',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_2',
'name'=>'select_2'
),
'externalclass'=>'linkedselect',
'linkedby'=>array(
'reference'=>'relacion',
'id'=>'select_1',
'showdefault'=>'0'
),
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
),
'locations'=>array(
'js'=>'js/',
'php'=>'classes/'
)
));
$form->AddInput(array(
'elementsfromdb'=>array(
'table'=>'municipios',
'values'=>'id',
'options'=>'municipio',
),
'attributes'=>array(
'type'=>'select',
'id'=>'select_3',
'name'=>'select_3'
),
'externalclass'=>'linkedselect',
'linkedby'=>array(
'reference'=>'relacion',
'id'=>'select_2',
'showdefault'=>'0'
),
'default'=>array(
'value'=>'0',
'option'=>'Elige...'
),
'locations'=>array(
'js'=>'js/',
'php'=>'classes/'
)
));
$form->GenerateForm();
?>
La segunda parte es el constructor que va antes del head:
Código:
<?php $form->GenerateAdditionalJS(); ?>
</head>
Y la tercera parte que agregar los controles en si:
Código:
<?php $form->GetInput('select_1'); ?>
<?php $form->GetInput('select_2'); ?>
<?php $form->GetInput('select_3'); ?>
Y la cuarta parte que es en el archivo php que recibe el formulario el del action del index averiguar que Pais, Estado y Ciudad seleccionaron asi:
Código:
//averiguar pais
$_SESSION["select_1"]=$_POST['select_1'];
$_select_1=$_SESSION["select_1"];
$link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
mysql_select_db("sistema4_ixelmoda",$link);
mysql_query("SET NAMES 'utf8'");
$consulta=mysql_query("select * from paises where id = '$_select_1'",$link);
mysql_close($link);
if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["pais"] = $array["pais"];
$_pais = $_SESSION["pais"];
mysql_free_result($consulta);
}
//fin pais
//averiguar departamento/estado
$_SESSION["select_2"]=$_POST['select_2'];
$_select_2=$_SESSION["select_2"];
$link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
mysql_select_db("sistema4_ixelmoda",$link);
mysql_query("SET NAMES 'utf8'");
$consulta=mysql_query("select * from estados where id = '$_select_2'",$link);
mysql_close($link);
if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["estado"] = $array["estado"];
$_departamento = $_SESSION["estado"];
mysql_free_result($consulta);
}
//fin depto/estado
//averiguar ciudad
if (empty($_POST['ciudad'])){
$_SESSION["select_3"]=$_POST['select_3'];
$_select_3=$_SESSION["select_3"];
$link=mysql_connect("localhost","sistema4_ixel","fashionxtg2011");
mysql_select_db("sistema4_ixelmoda",$link);
mysql_query("SET NAMES 'utf8'");
$consulta=mysql_query("select * from municipios where id = '$_select_3'",$link);
mysql_close($link);
if( mysql_num_rows($consulta) == 1) {
$array = mysql_fetch_array($consulta);
$_SESSION["municipio"] = $array["municipio"];
$_ciudad = $_SESSION["municipio"];
mysql_free_result($consulta);
}
}else{
$_SESSION["municipio"]=$_POST['ciudad'];
$_ciudad = $_SESSION["municipio"];
}
//fin ciudad
Descargar ejemplo:
http://www.4shared.com/rar/_nb9_-4_/select_dependientes.html
El descargable tiene dos carpetas una formulario_sencillo donde esta el codigo necesario solo para los combos, y otra formulario_completo donde esta un formulario comun con mas opciones para usuarios mas avanzados.
No olvides agregar a tu proyecto las carpetas classes y js, para que tus combos funcionen.
Espero les guste y les sirva esta adaptacion que hice de ese esplendido ejemplo de combos dependientes. Graphixx.
Fuente Original:
http://www.formatoweb.com.ar/blog/2007/08/20/clase-para-generar-automaticamente-select-combos-dependientes-multinivel/