Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2015, 09:51
CJaramillo
 
Fecha de Ingreso: diciembre-2014
Ubicación: Colombia
Mensajes: 18
Antigüedad: 9 años, 5 meses
Puntos: 0
Exclamación Cargar un select, dependiendo de otro

Buenos Días


Como el título lo dice, busco llenar un select dependiendo de la selección que se haya hecho en otro select anterior.

Bueno he desarrollado el siguiente código:

Form:
Código HTML:
<form class="bootstrap-frm" name="f1" action="registro.php" method="POST" enctype="multipart/form-data" onsubmit="return comprobar(this)">
		<table>
		<tr >
			<h1>Formulario de Registro de Funcionarios</h1>
		</tr>
		<tr>
			<td></td>			
			<td class="FormLabel" align="center">
				<strong><label>Datos Personales</label></strong>
			</td>
		</tr>
		<tr><td></td><td><hr width=355></td></tr>				
		<tr>
			<td class="FormLabel">
				<label>Nombres</label>
			</td>
			<td>
				<input required type="text" title="Solo se Permiten Letras Mayusculas o Minusculas de la A a la Z,
 maximo 50 caracteres." required pattern="[a-zA-Z\s]{1,50}" name="name">
			</td>
		</tr>
		<tr>
			<td class="FormLabel">
				<label>Apellidos</label>
			</td>
			<td class="FormFieldContent">
				<input title="Solo se Permiten Letras Mayusculas o Minusculas de la A a la Z,
 maximo 50 caracteres." required pattern="[a-zA-Z\s]{1,50}" type="text" name="surname">
			</td>
		</tr>		
		<tr>
			<td>
				<label>Tipo de Documento</label>
			</td>
			<td>
				<select required name="ofi1">					
					<option value="01">Cédula de Ciudadanía</option>
					<option value="02">Cédula de Extranjería</option>
					<option value="03">Tarjeta de Identidad</option>
					<option value="04">Pasaporte</option>
					<option value="05">Otro</option>
				</select>
			</td>
		</tr> 
		<tr>
			<td class="FormLabel">
				<label>Documento</label>
			</td>
			<td class="FormFieldContent">
				<input title="El documento debe tener maximo 32 caracteres." required pattern="{1,32}" type="text" name="doc">
			</td>
		</tr>
		<tr>
			<td class="FormLabel">
				<label>Correo Electrónico</label>
			</td>
			<td class="FormFieldContent">
				<input required pattern="[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+){1,100}" title="El email debe tener este formato: [email protected],
 maximo 100 caracteres." type="email" name="email" placeholder="Ingrese su email.">
			</td>
		</tr>
		<tr>
			<td></td>			
			<td class="FormLabel" align="center">
				<strong><label>Estructura Administrativa</label></strong>
			</td>
		</tr>
		<tr><td></td><td><hr width=355></td></tr>		
		<tr>
			<td class="FormLabel">
				<label>Seleccione</label>
			</td>
			<td class="FormFieldContent">
				<select required name="rango" onchange='cargarSelect2();'>
					<option value="0">-</option> <?php
					$con = mysql_connect($host,$user_db,$pw);
					mysql_select_db($db,$con);
					$registro = mysql_query("SELECT DISTINCT cod_ran,rango_dep FROM ESTRUCTURA",$con);
					while($reg=mysql_fetch_array($registro)){?>
						<option value=" <?php echo $reg['cod_ran']; ?> "> <?php echo utf8_encode($reg['rango_dep']); ?> </option> <?php 
					} ?>					
				</select>
			</td>
		</tr>
		<tr>
			<td class="FormLabel">
				<label>Seleccione</label>
			</td>
			<td class="FormFieldContent">
				<div id="states_container"></div>
			</td>
		</tr>
		<tr><td></td><td><hr width=355></td></tr>		
		<tr>
			<td class="FormLabel">
				<label>Contraseña</label>
			</td>
			<td class="FormFieldContent">
				<input required title="La contraseña debe tener minimo 5 caracteres y maximo 32." pattern="{5,20}" type="password" name="password">
			</td>
		</tr>
		<tr>
			<td class="FormLabel">
				<label>Confirme la contraseña</label>
			</td>
			<td class="FormFieldContent">
				<input required title="La contraseña debe tener minimo 5 caracteres y maximo 32." pattern="{5,20}" type="password" name="password2">
			</td>
		</tr>
		
	</table>
	<div align="right">		
	<input class="button" style="cursor:pointer;" type="submit" value="Crear Usuario">
	</div>
	</form> 
Función JavaScript:
Código HTML:
<script type="text/javascript">
	
		function cargarSelect2(){
            
            var formName = 'f1'; 
            var dat = document[formName]['rango'].value;
            
            var xmlhttp = null;
            if(typeof XMLHttpRequest != 'udefined'){
                xmlhttp = new XMLHttpRequest();
            }else if(typeof ActiveXObject != 'undefined'){
                xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
            }else 
                throw new Error('El navegador no soporta AJAX');
                
            xmlhttp.open('GET', 'llena_select2.php?dat='+dat, true);
            xmlhttp.onreadystatechange = function (){
                if(xmlhttp.readyState == 4)
                    insertStates(xmlhttp);
            };
            xmlhttp.send(null);
        }

        function insertStates(xhr){
            if(xhr.status == 200){
                document.f1.getElementById('states_container').innerHTML = xhr.responseText;
            }else 
                throw new Error('El servidor ha encontrado un error\n'+
                                 'Codigo de Error = '+xhr.status);
        }
	</script> 
Archivo PHP(llena_select2.php):
Código HTML:
<?php 
	
	include("conexion.php");
	//$valor = strip_tags(addslashes($_REQUEST['q']));
	$c = $_GET['dat'];
	$con = mysql_connect($host,$user_db,$pw);
	mysql_select_db($db,$con);
	$registro = mysql_query("SELECT id,dep FROM  ESTRUCTURA WHERE  cod_ran = '$c'",$con) or die(mysql_error());
	
	if(isset($_GET['dat'])) 
        {
            $states = '';            
            while($row = mysql_fetch_assoc($registro))
            {
                $states .= '<option value="'.$row['id'].'">'.$row['dep'].'</option> <br>';                 
            }
            if($states == '')
                echo '';
            else 
                echo '<select name="rango2"><option disabled>-</option>'.$states.'</select>';
            
        }
 ?> 
El problema es que no logro que aparezca el segundo select. No se en que me estoy equivocando, agradezco su ayuda.