codigo postal

This commit is contained in:
VictorMongeM 2025-04-30 14:47:05 -06:00
parent 972f1bcd1f
commit 09e4ecd527
4 changed files with 140 additions and 23 deletions

View File

@ -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;
}
?>

View File

@ -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>

76
js/buscarCodigo.js Normal file
View File

@ -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.");
}
});
});

View File

@ -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;
}
}