From 09e4ecd527268f564ddfc24a27d08649fa720d6e Mon Sep 17 00:00:00 2001 From: VictorMongeM <victor.monge.morales@gmail.com> Date: Wed, 30 Apr 2025 14:47:05 -0600 Subject: [PATCH] codigo postal --- controllers/CatalogosController.php | 31 ++++++++++++ form_datos_extendidos.html | 5 +- js/buscarCodigo.js | 76 +++++++++++++++++++++++++++++ models/Catalogos.php | 51 ++++++++++--------- 4 files changed, 140 insertions(+), 23 deletions(-) create mode 100644 controllers/CatalogosController.php create mode 100644 js/buscarCodigo.js diff --git a/controllers/CatalogosController.php b/controllers/CatalogosController.php new file mode 100644 index 0000000..de417bd --- /dev/null +++ b/controllers/CatalogosController.php @@ -0,0 +1,31 @@ +<?php + +require_once __DIR__ . '/../models/Catalogos.php'; + +class CatalogosController { + private static $catalogosModel = null; + + public static function inicializar() { + if (self::$catalogosModel === null) { + self::$catalogosModel = new Catalogos(); + } + } + + public static function obtenerInfiCodigoPostal($codigo_postal){ + $result = self::$catalogosModel->obtenerInfiCodigoPostal($codigo_postal); + return $result; + } + +} + +CatalogosController::inicializar(); + +if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['codigo_postal'])) { + header('Content-Type: application/json'); + $codigo_postal = $_GET['codigo_postal']; + $result = CatalogosController::obtenerInfiCodigoPostal($codigo_postal); + + echo $result; +} + +?> \ No newline at end of file diff --git a/form_datos_extendidos.html b/form_datos_extendidos.html index d602654..68ce611 100644 --- a/form_datos_extendidos.html +++ b/form_datos_extendidos.html @@ -110,9 +110,11 @@ <div class="form-col"> <div class="form-group"> <label for="codigo_postal" class="required">Código Postal</label> - <input type="number" min="0" step="1" id="codigo_postal" name="codigo_postal" maxlength="10"> + <input type="number" min="0" step="1" id="codigo_postal" name="codigo_postal" maxlength="10" required> + <button type="button" id="buscarBtn"><span class="material-icons">search</span>Buscar</button> </div> </div> + <div class="form-col"> <div class="form-group"> <label for="id_estado">Estado</label> @@ -252,6 +254,7 @@ <script src="js/form.js"></script> <script src="js/form_datos_extendidos.js"></script> + <script src="js/buscarCodigo.js"></script> <script src="https://website-widgets.pages.dev/dist/sienna.min.js" defer></script> </body> </html> \ No newline at end of file diff --git a/js/buscarCodigo.js b/js/buscarCodigo.js new file mode 100644 index 0000000..b821922 --- /dev/null +++ b/js/buscarCodigo.js @@ -0,0 +1,76 @@ +document.addEventListener("DOMContentLoaded", function () { + var buscarBtn = document.getElementById("buscarBtn"); + + //Añadir un evento al boton de buscar + buscarBtn.addEventListener("click", function () { + var codigoPostal = document.getElementById("codigo_postal").value; + console.log(codigoPostal); + + //verificar si el codigo postal esta vacio + if (codigoPostal) { + console.log("Código postal ingresado:", codigoPostal); + //crear la url para la peticion + const url = "./controllers/CatalogosController.php?codigo_postal=" + encodeURIComponent(codigoPostal); + + //Realiza una solicitud HTTP GET a la URL especificada + fetch(url) + .then(response => { + //console.log("Estado de la respuesta:", response.status); + //console.log("Contenido de la respuesta:", response.json()); + // Verifica si la respuesta del servidor es exitosa + if (!response.ok) { + throw new Error("Error en la respuesta del servidor"); + } + //Convierte la respuesta que es unu array de objetos a formato JSON + return response.json(); + }) + .then(data => { + var estadoSelect = document.getElementById("id_estado"); + var municipioSelect = document.getElementById("id_municipio"); + var coloniaSelect = document.getElementById("id_colonia"); + + // Inicializa los elementos select con una opción por defecto + estadoSelect.innerHTML = "<option value=''>Seleccionar Estado</option>"; + municipioSelect.innerHTML = "<option value=''>Seleccionar Municipios</option>"; + coloniaSelect.innerHTML = "<option value=''>Seleccionar Colonia</option>"; + + // Verifica si se recibieron datos + if (data.length > 0) { + //Crea conjuntos para almacenar estados, ciudades y colonias únicos + let estados = new Set(); + let municipios = new Set(); + let colonias = []; + + // Itera sobre cada fila de datos recibidos + data.forEach(row => { + estados.add(row.estado); + municipios.add(row.municipio); + colonias.push(row.colonia); + }); + + //Añade las opciones de estados al elemento select + estados.forEach(estado => { + estadoSelect.innerHTML += "<option value='" + estado + "'>" + estado + "</option>"; + }); + + //Añade las opciones de ciudades al elemento select + municipios.forEach(municipio => { + municipioSelect.innerHTML += "<option value='" + municipio + "'>" + municipio + "</option>"; + }); + + //Añade las opciones de colonias al elemento select + colonias.forEach(colonia => { + coloniaSelect.innerHTML += "<option value='" + colonia + "'>" + colonia + "</option>"; + }); + } else { + alert("No se encontraron datos para el código postal ingresado."); + } + }) + .catch(error => { + console.error("Error en la solicitud:", error); + }); + } else { + alert("Por favor, ingrese un código postal."); + } + }); +}); diff --git a/models/Catalogos.php b/models/Catalogos.php index c33f2ff..d607cad 100644 --- a/models/Catalogos.php +++ b/models/Catalogos.php @@ -93,32 +93,39 @@ class Catalogos{ return $paises; } - public function obtenerInfoCodigoPostal($codigoPostal) { - $sql = " - SELECT - e.nombre AS id_estado, - m.nombre AS id_municipio, - c.nombre AS id_colonia - FROM colonias c - JOIN municipios m ON c.municipio = m.id - JOIN estados e ON m.estado = e.id - WHERE c.codigo_postal = ? - "; + /** + * Obtiene el estado, municipio y colonia en base al código postal proporcionado. + * @param int $codigo_postal El código postal a buscar. + */ + public function obtenerInfiCodigoPostal($codigo_postal){ + + // Consulta SQL para obtener estado, ciudad y colonia en base al código postal + $sql = "SELECT e.nombre AS estado, m.nombre AS municipio, c.nombre AS colonia + FROM colonias c + JOIN municipios m ON c.municipio = m.id + JOIN estados e ON m.estado = e.id + WHERE c.codigo_postal = ?"; + + // Preparar la sentencia SQL $stmt = $this->conn->prepare($sql); - if ($stmt === false) { - throw new Exception("Error en la preparación de la consulta: " . $this->conn->error); - } - $stmt->bind_param("i", $codigoPostal); - if (!$stmt->execute()) { - throw new Exception("Error al ejecutar la consulta CP: " . $stmt->error); - } + $stmt->bind_param("i", $codigo_postal); + $stmt->execute(); + + // Obtener los resultados $result = $stmt->get_result(); - $info = []; - while ($row = $result->fetch_assoc()) { - $info[] = $row; + + // Verificar si hay resultados + if ($result->num_rows > 0) { + $data = []; + while ($row = $result->fetch_assoc()) { + $data[] = $row; // Agregar cada resultado a un array + } + return json_encode($data); // Devolver los resultados en formato JSON + } else { + return json_encode([]); // Si no hay resultados, devolver un array vacío } + $stmt->close(); - return $info; } }