Cita:
Iniciado por Alexis88 Si los <select>
cargarán la información de manera dinámica, es decir, elegirás una opción del primer <select>
y luego tendrán que cargar opciones relacionadas a dicha opción pero en el segundo <select>
y la misma situación será con el segundo y tercer <select>
, puedes hacer lo que explicaré a continuación.
Un saludo
Primero que nada gracias.
Amigo los selects me funcionan de manera perfecta como mostré en la imagen que comente en este post, use este código javascript(esto se encuentra dentro del index.php entre [inline]<script></script>
Código Javascript
:
Ver original$("#estado").on("change", buscarMunicipios);
$("#municipio").on("change", buscarLocalidades);
function buscarMunicipios(){
$("#localidad").html("<option value=''>Seleccione una Localidad</option>");
$estado = $("#estado").val();
if($estado == ""){
$("#municipio").html("<option value=''>Seleccione un Estado</option>");
}
else {
$.ajax({
dataType: "json",
data: {"estado": $estado},
url: 'include/buscar.php',
type: 'post',
beforeSend: function(){
//Lo que se hace antes de enviar el formulario
},
success: function(respuesta){
//lo que se si el destino devuelve algo
$("#municipio").html(respuesta.html);
},
error: function(xhr,err){
alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
}
});
}
}
function buscarLocalidades(){
$municipio = $("#municipio").val();
$.ajax({
dataType: "json",
data: {"municipio": $municipio},
url: 'include/buscar.php',
type: 'post',
beforeSend: function(){
//Lo que se hace antes de enviar el formulario
},
success: function(respuesta){
//lo que se si el destino devuelve algo
$("#localidad").html(respuesta.html);
},
error: function(xhr,err){
alert("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\n \n responseText: "+xhr.responseText);
}
});
}
en otro archivo llamado buscar.php tengo esto:
Código PHP:
<?php
require_once("funciones.php");
if(isset($_POST['estado'])){
$municipios = dameMunicipio($_POST['estado']);
$html = "<option value=''>Seleccione un Municipio</option>";
foreach($municipios as $indice => $registro){
$html .= "<option value='".$registro['idmunicipio']."'>".$registro['nombremunicipio']."</option>";
}
$respuesta = array("html"=>$html);
echo json_encode($respuesta);
}
if(isset($_POST['municipio'])){
$localidades= dameLocalidad($_POST['municipio']);
$html = "<option value=''>Seleccione una Localidad</option>";
foreach($localidades as $indice => $registro){
$html .= "<option value='".$registro['idlocalidad']."'>".$registro['nombrelocalidad']."</option>";
}
$respuesta = array("html"=>$html);
echo json_encode($respuesta);
}
if(isset($_POST['categoria'])){
$categorias = dameCategoria($_POST['categoria']);
$html = "<option value=''>Seleccione su busqueda</option>";
foreach ($categorias as $indice => $registro) {
$html .= "<option value='".$registro['idcategoria']."'>".$registro['nombrecategoria']."</option>";
}
$respuesta = array("html"=>$html);
echo json_encode($respuesta);
}
?>
y en otro llamado
funciones.php
tengo esto:
Código PHP:
<?php
/* Archivo para funciones */
function conectaBaseDatos(){
try{
$servidor = "xxx";
$puerto = "xxx";
$basedatos = "xxx";
$usuario = "xxx";
$contrasena = "xxx";
$conexion = new PDO("mysql:host=$servidor;port=$puerto;dbname=$basedatos",
$usuario,
$contrasena,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$conexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $conexion;
}
catch (PDOException $e){
die ("No se puede conectar a la base de datos". $e->getMessage());
}
}
function dameEstado(){
$resultado = false;
$consulta = "SELECT * FROM estados";
$conexion = conectaBaseDatos();
$sentencia = $conexion->prepare($consulta);
try {
if(!$sentencia->execute()){
print_r($sentencia->errorInfo());
}
$resultado = $sentencia->fetchAll();
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia->closeCursor();
}
catch(PDOException $e){
echo "Error al ejecutar la sentencia: \n";
print_r($e->getMessage());
}
return $resultado;
}
function dameMunicipio($estado = ''){
$resultado = false;
$consulta = "SELECT * FROM municipios";
if($estado != ''){
$consulta .= " WHERE idestado = :nombreestado";
}
$conexion = conectaBaseDatos();
$sentencia = $conexion->prepare($consulta);
$sentencia->bindParam('nombreestado',$estado);
try {
if(!$sentencia->execute()){
print_r($sentencia->errorInfo());
}
$resultado = $sentencia->fetchAll();
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia->closeCursor();
}
catch(PDOException $e){
echo "Error al ejecutar la sentencia: \n";
print_r($e->getMessage());
}
return $resultado;
}
function dameLocalidad($municipio = ''){
$resultado = false;
$consulta = "SELECT * FROM localidades";
if($municipio != ''){
$consulta .= " WHERE idmunicipio = :nombremunicipio";
}
$conexion = conectaBaseDatos();
$sentencia = $conexion->prepare($consulta);
$sentencia->bindParam('nombremunicipio',$municipio);
try {
if(!$sentencia->execute()){
print_r($sentencia->errorInfo());
}
$resultado = $sentencia->fetchAll();
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia->closeCursor();
}
catch(PDOException $e){
echo "Error al ejecutar la sentencia: \n";
print_r($e->getMessage());
}
return $resultado;
}
function dameCategoria(){
$resultado = false;
$consulta = "SELECT * FROM categorias";
$conexion = conectaBaseDatos();
$sentencia = $conexion->prepare($consulta);
try {
if(!$sentencia->execute()){
print_r($sentencia->errorInfo());
}
$resultado = $sentencia->fetchAll();
//$resultado = $sentencia->fetchAll(PDO::FETCH_ASSOC);
$sentencia->closeCursor();
}
catch(PDOException $e){
echo "Error al ejecutar la sentencia: \n";
print_r($e->getMessage());
}
return $resultado;
}
?>
Bueno la verdad esto me funciona perfectamente para lo que ya hable de los selects que al momento de seleccionar un estado cambia de inmediato, me pregunto si eso que me mandaste hay alguna manera de adaptarlo a este código ya que pues como ves ya lo tengo listo y eso que me mandaste pues tengo que ponerme a estudiar AJAX porque no entendí practicamente casi nada, entonces ¿Habría alguna manera de adaptar eso que me mandaste a este para que pueda redirigirme a
http://localhost/estados/trujillo/valera
(tomo como ejemplo tomo esa url), se podría hacer o crees que es mejor hacerlo como tu dijiste?
Mil gracias por responder y por explicarme eso.