
Enviar dos parametros o variables por URL
Publicado por Rafael (2 intervenciones) el 23/08/2023 23:39:25
Buena tarde estimados, estoy aprendiendo a programar en php y JS, me ha costado un poco, he visto manuales en youtube y otras paginas para ir aprendiendo. Estoy bloqueado con un tema de poder enviar dos variables o parametros por medio de URL, es para poder realizar una consulta sql.
Les explico o detallo como funciona lo que estoy haciendo y lo que necesito:

Tengo estos campos en un formulario, de departamento, municipio y poblado. Logro poder ir generando los select dependiendo del departamento seleccionado, me muestra el listado de municipio sin problema, el de poblados me lo muestra pero aca necesito hacer validacion por 2 campos, parametros o variables, las cuales son, coddepto y codmuni.
El codigo en el htm de estos campos es el siguiente:
<div class="col-md-3">
<label for="depto">Departamento:</label>
<select class="form-select" aria-label="Default select example" id="depto" name="depto" onchange="buscarMunicipio(event);">
<option value="">Seleccione un Departamento</option>
<?php
foreach($data['departamentos'] as $row){?>
<option value="<?php echo $row['coddepto']?>"><?php echo $row['nomdepto'];?></option>
<?php } ?>
</select>
</div>
<div class="col-md-3" id="divmuni">
<label for="muni">Municipio:</label>
<select class="form-select" aria-label="Default select example" id="muni" name="muni" onchange="buscarPoblado(event);">
<!-- aca llena los datos js desde funciones.js -->
</select>
</div>
<div class="col-md-3" id="divpoblado">
<label for="poblado">Poblado/Aldea/Caserio/Zona:</label>
<select class="form-select" aria-label="Default select example" id="poblado" name="poblado">
<!-- aca llena los datos js desde funciones.js -->
</select>
</div>
Mi codigo es el siguiente cuando busco un municipio: (esto por medio de un archivo funciones.js)
function buscarMunicipio(e){
e.preventDefault();
const cod = document.getElementById("depto").value;
if (cod != '') { /* aca validamos si el codigo contiene un valor */
const url = base_url + "Ventas2/buscarMuni/"+cod; /* esta ruta esta en la carpeta controlador */
const http = new XMLHttpRequest();
http.open("GET", url, true);
http.send();
http.onreadystatechange = function(){
if(this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.responseText);
if (res) {
let html = '';
/* aca lleno el select de los municipios */
res['municipios'].forEach(row => {
html += `<option value="${row['codmuni']}">${[row['nommuni']]}</option>`;
});
document.getElementById("muni").innerHTML = html;
} else {
alertas('Municipios No Cargados','warning');
}
}
}
} else {
alertas('Debe seleccionar un Departamento', 'warning');
}
}
const url = base_url + "Ventas2/buscarMuni/"+cod;
esta url que tengo indicada busca dentro de la carpeta controlador una funcion para sacar el listado de municipios
public function buscarMuni($cod){
$data['municipios'] = $this->model->getMuni($cod);
echo json_encode($data, JSON_UNESCAPED_UNICODE);
die();
}
esta funcion va hacia el modelo a generar la consulta SQL
public function getMuni(String $cod){
$sql = "SELECT * FROM municipios WHERE coddepto = '$cod' ORDER BY nommuni";
$data = $this->selectAll($sql);
return $data;
}
en si todo esto me funciona bien, ahora mi problema es que para generar el listado de poblados, necesito pasarle dos parametros, dos valores o variables dentro de la URL, lo cual espero se pueda.
He intentado lo siguiente:
function buscarPoblado(e){
e.preventDefault();
const cod = document.getElementById("muni").value;
const cod2 = document.getElementById("depto").value;
let valores = [cod,cod2];
const url = base_url + "Ventas2/buscarPobla/"+valores;
aca pasando los datos como un array, lo cual me lo pasa, pero ya dentro del controlador no me los reconoce.
probe tambien de esta forma:
const url = base_url + "Ventas2/buscarPobla/"+cod+cod2;
tampoco, no se si hay alguna forma de pasarle esas dos constantes por la url y que en el controlador pueda usarlas asi:
public function buscarPobla($cod,$cod2){
$data['poblados'] = $this->model->getPoblado($cod,$cod2);
echo json_encode($data, JSON_UNESCAPED_UNICODE);
die();
}
y en el modelo asi:
public function getPoblado(String $cod, string $cod2){
$sql = "SELECT * FROM poblados WHERE codmuni = '$cod' AND coddepto = '$cod2' ORDER BY nompoblado";
$data = $this->selectAll($sql);
return $data;
}
espero haberme explicado, les agradeceria mucho sus comentarios, como les digo soy un poco novato en estos lenguajes y ya busque por todos lados pero no encuentro solucion.
Saludos
Les explico o detallo como funciona lo que estoy haciendo y lo que necesito:

Tengo estos campos en un formulario, de departamento, municipio y poblado. Logro poder ir generando los select dependiendo del departamento seleccionado, me muestra el listado de municipio sin problema, el de poblados me lo muestra pero aca necesito hacer validacion por 2 campos, parametros o variables, las cuales son, coddepto y codmuni.
El codigo en el htm de estos campos es el siguiente:
<div class="col-md-3">
<label for="depto">Departamento:</label>
<select class="form-select" aria-label="Default select example" id="depto" name="depto" onchange="buscarMunicipio(event);">
<option value="">Seleccione un Departamento</option>
<?php
foreach($data['departamentos'] as $row){?>
<option value="<?php echo $row['coddepto']?>"><?php echo $row['nomdepto'];?></option>
<?php } ?>
</select>
</div>
<div class="col-md-3" id="divmuni">
<label for="muni">Municipio:</label>
<select class="form-select" aria-label="Default select example" id="muni" name="muni" onchange="buscarPoblado(event);">
<!-- aca llena los datos js desde funciones.js -->
</select>
</div>
<div class="col-md-3" id="divpoblado">
<label for="poblado">Poblado/Aldea/Caserio/Zona:</label>
<select class="form-select" aria-label="Default select example" id="poblado" name="poblado">
<!-- aca llena los datos js desde funciones.js -->
</select>
</div>
Mi codigo es el siguiente cuando busco un municipio: (esto por medio de un archivo funciones.js)
function buscarMunicipio(e){
e.preventDefault();
const cod = document.getElementById("depto").value;
if (cod != '') { /* aca validamos si el codigo contiene un valor */
const url = base_url + "Ventas2/buscarMuni/"+cod; /* esta ruta esta en la carpeta controlador */
const http = new XMLHttpRequest();
http.open("GET", url, true);
http.send();
http.onreadystatechange = function(){
if(this.readyState == 4 && this.status == 200) {
const res = JSON.parse(this.responseText);
if (res) {
let html = '';
/* aca lleno el select de los municipios */
res['municipios'].forEach(row => {
html += `<option value="${row['codmuni']}">${[row['nommuni']]}</option>`;
});
document.getElementById("muni").innerHTML = html;
} else {
alertas('Municipios No Cargados','warning');
}
}
}
} else {
alertas('Debe seleccionar un Departamento', 'warning');
}
}
const url = base_url + "Ventas2/buscarMuni/"+cod;
esta url que tengo indicada busca dentro de la carpeta controlador una funcion para sacar el listado de municipios
public function buscarMuni($cod){
$data['municipios'] = $this->model->getMuni($cod);
echo json_encode($data, JSON_UNESCAPED_UNICODE);
die();
}
esta funcion va hacia el modelo a generar la consulta SQL
public function getMuni(String $cod){
$sql = "SELECT * FROM municipios WHERE coddepto = '$cod' ORDER BY nommuni";
$data = $this->selectAll($sql);
return $data;
}
en si todo esto me funciona bien, ahora mi problema es que para generar el listado de poblados, necesito pasarle dos parametros, dos valores o variables dentro de la URL, lo cual espero se pueda.
He intentado lo siguiente:
function buscarPoblado(e){
e.preventDefault();
const cod = document.getElementById("muni").value;
const cod2 = document.getElementById("depto").value;
let valores = [cod,cod2];
const url = base_url + "Ventas2/buscarPobla/"+valores;
aca pasando los datos como un array, lo cual me lo pasa, pero ya dentro del controlador no me los reconoce.
probe tambien de esta forma:
const url = base_url + "Ventas2/buscarPobla/"+cod+cod2;
tampoco, no se si hay alguna forma de pasarle esas dos constantes por la url y que en el controlador pueda usarlas asi:
public function buscarPobla($cod,$cod2){
$data['poblados'] = $this->model->getPoblado($cod,$cod2);
echo json_encode($data, JSON_UNESCAPED_UNICODE);
die();
}
y en el modelo asi:
public function getPoblado(String $cod, string $cod2){
$sql = "SELECT * FROM poblados WHERE codmuni = '$cod' AND coddepto = '$cod2' ORDER BY nompoblado";
$data = $this->selectAll($sql);
return $data;
}
espero haberme explicado, les agradeceria mucho sus comentarios, como les digo soy un poco novato en estos lenguajes y ya busque por todos lados pero no encuentro solucion.
Saludos
Valora esta pregunta


0