Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Asignar valor a select dependiendo de una variable

Estas en el tema de Asignar valor a select dependiendo de una variable en el foro de PHP en Foros del Web. saludos a todos tengo la siguiente calamidad: tengo dos combos dependientes de ciudades y oficinas. estos funcionan perfectamente, pero tengo un input text que en ...
  #1 (permalink)  
Antiguo 25/09/2015, 16:03
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Exclamación Asignar valor a select dependiendo de una variable

saludos a todos


tengo la siguiente calamidad:

tengo dos combos dependientes de ciudades y oficinas. estos funcionan perfectamente, pero tengo un input text que en el evento onblur=submit(); actualiza pagina y realiza una consulta a mysql dependiendo del codigo de la oficina y me trae los datos de ciudad y oficina. el problema radica en que cuando obtengo dichas variables, quiero que se ubiquen instantaneamente en el option correspondiente dentro de los select de ciudad y oficina. con el codigo que tengo a veces lo ubica, no funciona con todas las opciones, pero aunque lo ubica, el valor del post sigue siendo la anterior.
Código PHP:
Ver original
  1. <b>CODIGO: </b><input name=codigo placeholder="ejm : 248510" type="text" onblur="submit();" style="width:25%" >
  2.  
  3. <?php
  4. $modificar = array( '__'=>' - ', '_'=>' ');
  5.                 $modificar1 = array( ' - '=>'%%', ' '=>'%');
  6.                 if(isset($_POST['codigo']))
  7.                 {  
  8.                     if ($_POST['codigo'] != "")
  9.                     {   $codigo = $_POST['codigo'];
  10.                         $tipo = $_POST['tipo'];
  11.                         $query = mysqli_query($link,"SELECT ciudad, nombre FROM `oficina` WHERE entidad=14 AND codigo='$codigo' AND tipo='$tipo'");  
  12.                         $contar = mysqli_num_rows($query);
  13.                         $row = mysqli_fetch_array($query);
  14.                         if($contar > 0){
  15.                             if(substr($row['ciudad'],-1,1)=="_"){
  16.                                 $val_ciu = strtr(substr($row['ciudad'],0,-1), $modificar);
  17.                             }else{
  18.                                 $val_ciu = strtr($row['ciudad'], $modificar);
  19.                             }
  20.                             if(substr($row['nombre'],-1,1)=="_"){
  21.                                 $val_ofi = strtr(substr($row['nombre'],0,-1), $modificar);
  22.                             }else{
  23.                                 $val_ofi = strtr($row['nombre'], $modificar);
  24.                             }
  25.                         }else{  
  26.                             $val_ciu = "";
  27.                             $val_ofi = "";
  28.                             switch ($tipo){
  29.                                 case "C": $seleccion = "EL CAJERO";
  30.                                     break;
  31.                                 case "O": $seleccion = "LA OFICINA";
  32.                                     break;
  33.                                 case "E": $seleccion = "EL EDIFICIO";
  34.                                     break;
  35.                             }
  36.                             echo "<script> window.alert(' NO SE ENCONTRÓ $seleccion. POR FAVOR, INTENTELO NUEVAMENTE. '); </script>";
  37.                         }
  38.                     }else{
  39.                         $val_ciu = "";
  40.                         $val_ofi = "";
  41.                     }
  42.                 } ?>
  43.  
  44.  
  45.  
  46. <select name=ciudad onchange=submit(); style='width:50%'>
  47.                         <option value='s' disabled>Seleccione</option>
  48.                         <option></option><?php
  49.                         $consulta2=mysqli_query($link,"SELECT ciudad FROM `oficina` WHERE estado='A' AND entidad=14 GROUP BY ciudad ORDER BY ciudad");
  50.                             while ($fila2=mysqli_fetch_array($consulta2)) // se reemplazan _ por espacios para que no se visualicen en el select.
  51.                             {
  52.                                 if(substr($fila2['ciudad'],-1,1)=="_"){ //valida si el ultimo caracter de ciudad es _ para hacer la conversion de espacios.
  53.                                     $val_ciudad = strtr(substr($fila2['ciudad'],0,-1), $modificar);
  54.                                 }else{
  55.                                     $val_ciudad = strtr($fila2['ciudad'], $modificar);
  56.                                 }
  57.                                 ?>
  58.                         <option  <?php if(isset($_POST['ciudad'])) {  if($val_ciu==$val_ciudad){ ?>selected<?php }
  59.                         elseif($_POST['ciudad']==$val_ciudad) { ?>selected<?php }  } ?>>
  60.                         <?php  echo $val_ciudad;?></option><?php
  61.                             } ?>
  62.                     </select>
  63.  
  64.  
  65. <td>
  66.                     <select name=ciudad onchange=submit(); style='width:50%'>
  67.                         <option value='s' disabled>Seleccione</option>
  68.                         <option></option><?php
  69.                         $consulta2=mysqli_query($link,"SELECT ciudad FROM `oficina` WHERE estado='A' AND entidad=14 GROUP BY ciudad ORDER BY ciudad");
  70.                             while ($fila2=mysqli_fetch_array($consulta2)) // se reemplazan _ por espacios para que no se visualicen en el select.
  71.                             {
  72.                                 if(substr($fila2['ciudad'],-1,1)=="_"){ //valida si el ultimo caracter de ciudad es _ para hacer la conversion de espacios.
  73.                                     $val_ciudad = strtr(substr($fila2['ciudad'],0,-1), $modificar);
  74.                                 }else{
  75.                                     $val_ciudad = strtr($fila2['ciudad'], $modificar);
  76.                                 }
  77.                                 ?>
  78.                         <option  <?php if(isset($_POST['ciudad'])) {  if($val_ciu==$val_ciudad){ ?>selected<?php }
  79.                         elseif($_POST['ciudad']==$val_ciudad) { ?>selected<?php }  } ?>>
  80.                         <?php  echo $val_ciudad;?></option><?php
  81.                             } ?>
  82.                     </select>
  83.                 </td>
  #2 (permalink)  
Antiguo 27/09/2015, 15:17
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Asignar valor a select dependiendo de una variable

<saludo>
Pues que funcione en ocasiones quiere decir una de dos cosas,
o hay data que da el incorrecto funcionamiento (tema de base de datos)
o hay algo en la lógica de las selecciones que hace que el comportamiento
cambie.
Sin embargo, para eso necesitariamos
1. La info de la base de datos
2. Archivos que se incluyen (si los hay)
3. Datos de prueba (saber con cuales funciona, y con cuales no)
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 28/09/2015, 12:43
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Asignar valor a select dependiendo de una variable

hola mortiprogramador

mira lo extraño es que digamos esto funciona una vez con un ejemplo bogota, pruebo con otro dato y tal vez funciona, luego pruebo de nuevo con bogota y ya no funciona. Sé que no es tema de base de datos, porque lso combos funcionan con los mismos datos y no hay error.
este es el codigo de lo que se ejecuta cuando se da click fuera de la caja de texto y se actualiza la pagina:
Código PHP:
Ver original
  1. $val_ciu = "";
  2.                 $val_ofi = "";
  3.                 $modificar = array( '__'=>' - ', '_'=>' '); //validan que tipo de caracter tienen los datos de los combos y los reemplaza.
  4.                 $modificar1 = array( ' - '=>'%%', ' '=>'%');  //valida los campos mostrados en los select y les asigna % para hacer las busquedas dentro de la BD.
  5.                 if(isset($_POST['codigo']))
  6.                 {  
  7.                     if ($_POST['codigo'] != "")
  8.                     {   $codigo = $_POST['codigo'];
  9.                         $tipo = $_POST['tipo'];
  10.                         $query = mysqli_query($link,"SELECT ciudad, nombre FROM `oficina` WHERE entidad=14 AND codigo='$codigo' AND tipo='$tipo'");  
  11.                         $contar = mysqli_num_rows($query);
  12.                         $row = mysqli_fetch_array($query);
  13.                         if($contar > 0){
  14.                             if(substr($row['ciudad'],-1,1)=="_"){  //verifica los datos de ciudades que tienen en el ultimo caracter _, esto porque al generar la modificacion a espacios genera error al consultar en bd.
  15.                                 $val_ciu = strtr(substr($row['ciudad'],0,-1), $modificar);
  16.                             }else{
  17.                                 $val_ciu = strtr($row['ciudad'], $modificar);
  18.                             }
  19.                             if(substr($row['nombre'],-1,1)=="_"){
  20.                                 $val_ofi = strtr(substr($row['nombre'],0,-1), $modificar);
  21.                             }else{
  22.                                 $val_ofi = strtr($row['nombre'], $modificar);
  23.                             }
  24.                         }else{  
  25.                             $val_ciu = "";
  26.                             $val_ofi = "";
  27.                             switch ($tipo){
  28.                                 case "C": $seleccion = "EL CAJERO";
  29.                                     break;
  30.                                 case "O": $seleccion = "LA OFICINA";
  31.                                     break;
  32.                                 case "E": $seleccion = "EL EDIFICIO";
  33.                                     break;
  34.                             }
  35.                             echo "<script> window.alert(' NO SE ENCONTRÓ $seleccion. POR FAVOR, INTENTELO NUEVAMENTE. '); </script>";
  36.                         }
  37.                     }else{
  38.                         $val_ciu = "";
  39.                         $val_ofi = "";
  40.                     }
  41.                 }


No sé si me entiendas lo que espero que esto haga, pero s puedes ayudarme te agradecería infinitamente, o si tal vez sabes de otra forma que pueda hcer esto, ya sea corrigiendolo o con algun framework o no sé, no soy muy experto.

muchas gracias (Y)
  #4 (permalink)  
Antiguo 28/09/2015, 17:10
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Asignar valor a select dependiendo de una variable

<saludo>
Hola jmg1189
Pues revisando el código y haciendo pruebas,
yo digo que el tema es de como se está
tratando de seleccionar el valor de la oficina en el listado

Para ello tengo estos datos de prueba

ciudad=bogota, nombre=centrobog, entidad=14, codigo=12345, tipo=1, estado=A
ciudad=medellin, nombre=centromed, entidad=14, codigo=6789, tipo=1, estado=A

Luego, usando el formulario tengo este comportamiento

1. Con datos de bogotá
entra a if y selecciona bien
2. Con datos de medellín
entra a if, y luego a else if
3. Con datos de bogotá
entra a if, y luego a else if (Por ende, sigue dejando seleccionado a medellín)

Luego
1. Con datos de medellín
entra a if
2. Con datos de bogotá
entra a if, y a else if (Por ende, sigue dejando seleccionado a medellín) (Mismo resultado del primer test.

Ahora bien, sí entiendo lo que quieres lograr, es que del listado que traiga,
quede seleccionada la oficina que se digitó (Es decír, el código es único)

1. En el if de $contar > 0
Código PHP:
$val_cod $codigo
en el else
Código PHP:
$val_cod ''
2. En el select del query del listado, traer el campo código
3. No usar el if de isset de post ciudad (ni el if, else if interno)
4. Una vez realizado el punto 3, se puede usar este if
Código PHP:
if($val_cod==$fila2['codigo']){ ?>selected<?php }
Con esos cambios, ahora sí selecciona bogotá o medellín sin importar
el orden.

Espero esto solucione la 'calamidad', jajaja, ménudo término el que usaste!
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 29/09/2015, 07:50
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Asignar valor a select dependiendo de una variable

hola mortiprogramador, antes que todo muchas gracias por tu colaboración y por tomarte el tiempo de analizar esto, enserio muchas gracias.

jajaja si calamidad porque me ha sacado canas, ya no se como más hacerlo. bueno teniendo en cuenta tus recomendaciones, he cambiado la validación dentro de los option asi:

para el de ciudad:

Código PHP:
Ver original
  1. <option  <?php if(isset($_POST['ciudad'])){ if($val_ciu==$val_ciudad || $_POST['ciudad']==$val_ciudad){ ?>selected <?php } } ?>
  2.                             value = "<?php  echo $val_ciudad; ?>"><?php  echo $val_ciudad; ?></option>

y para el de oficina así:
Código PHP:
Ver original
  1. <option <?php  if(isset($_POST['oficina'])){ if($_POST['oficina']==$var_oficina || $val_ofi==$var_oficina) { ?>selected<?php } } ?>
  2.                             value = "<?php  echo $var_oficina; ?>"><?php echo $var_oficina;?></option>


Pero sigue sucediendo lo mismo. ademas que cuando los datos si se cargan en el combo, de igual manera el valor del $_post sigue siendo el mismo de la selección anterior, aspi muestre la coincidencia, el valor de la variable no cambia, y se debe actualizar 3 veces para que se carguen correctamente los valores.

ya no sé que más hacer.
  #6 (permalink)  
Antiguo 29/09/2015, 16:48
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Asignar valor a select dependiendo de una variable

<saludo>
De nada jmg1189

En cuanto a lo que te sigue sucediendo, veo que sigues usando
las variables de nombres, por qué no usas los códigos?

Usando esos como te comenté a mí me funciona,
pero la primera vez que te respondí ambos combos hacían lo mismo,
ahora veo que uno es de ciudades y otro de oficinas, a lo que pregunto,
el código que digitas es un combinado de código de ciudad y oficina?

O el código que ingresas es de oficina solamente?

Si fuese combinado, pues sería hacer una división al mismo y buscar
en las consultas por los códigos correspondientes, y en los listados
comparar los códigos digitados vs los de la base de datos,
y seleccionar los que son iguales.

Sí el código es de oficina solamente, la oficina según el modelo de
base de datos, ya está relacionado con una ciudad, en cuyo caso
también se puede manejar lo de los códigos.

Lee con calma mi respuesta anterior, e intenta con los códigos,
creo que es la mejor apuesta.

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 30/09/2015, 07:25
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Asignar valor a select dependiendo de una variable

hola mortiprogramador

respecto a lo que me dices del codigo de la oficina, no puedo tomarlo porque los combos los utilizo para hacer unos filtros sobre solicitudes, las cuales quieren que sean filtradas por ciudades y por oficinas.

pero gracias por su ayuda, ya pude solucionarlo, tuve que crear una funcion en otro archivo cargando los select y le pasaba los valores dentro de los parametros. algo así:

Código PHP:
Ver original
  1. function ciudades($val_ciu, $val_ofi) {
  2.     include("conectar.php");
  3.     $modificar = array( '__'=>' - ', '_'=>' ');
  4.     if($val_ciu!=""){ ?>
  5.         <td style='background :#cccccc;'><b><label for="ciudad">CIUDAD</label></b></td>
  6.         <td><select name=ciudad onchange=submit(); style='width:50%'>
  7.             <option value='s' disabled>Seleccione</option>
  8.             <option></option><?php
  9.             $consulta2=mysqli_query($link,"SELECT ciudad FROM `oficina` WHERE estado='A' AND entidad=14 GROUP BY ciudad ORDER BY ciudad");
  10.             while ($fila2=mysqli_fetch_array($consulta2)) {
  11.                 if(substr($fila2['ciudad'],-1,1)=="_"){ //valida si el ultimo caracter de ciudad es _ para hacer la conversion de espacios.
  12.                     $val_ciudad = strtr(substr($fila2['ciudad'],0,-1), $modificar);
  13.                 }else{
  14.                     $val_ciudad = strtr($fila2['ciudad'], $modificar);
  15.                 }
  16.                 ?><option  <?php if(isset($_POST['ciudad'])) {  if($val_ciudad==$val_ciu ) { ?>selected<?php }  } ?>><?php  echo $val_ciudad;?></option><?php      
  17.             } ?>
  18.             </select></td>
  19.     </tr>
  20.     <tr><td style="background :#cccccc;"><b><label for="oficina" >OFICINA</label></b></td>
  21.         <td><select name=oficina id="id1" onchange=submit();  style="width:50%">
  22.             <option value="s" disabled>Seleccione</option>
  23.             <option></option><?php
  24.                 $consulta=mysqli_query($link,"SELECT nombre FROM `oficina` WHERE ciudad='$val_ciu' and estado='A' AND entidad='14' order by nombre");
  25.                 while ($fila=mysqli_fetch_array($consulta)){
  26.                     if(substr($fila['nombre'],-1,1)=="_"){
  27.                         $var_oficina = strtr(substr($fila['nombre'],0,-1), $modificar);
  28.                     }else{
  29.                         $var_oficina = strtr($fila['nombre'], $modificar);
  30.                     } ?>
  31.             <option <?php if(isset($_POST['oficina'])) {  if($var_oficina==$val_ofi){?>selected<?php }  } ?>><?php echo $var_oficina;?></option>
  32.          <?php } ?>
  33.         </select></td>
  34.     <?php
  35.     }else{
  36.             ?><td style='background :#cccccc;'><b><label for="ciudad">CIUDAD</label></b></td>
  37.             <td><select name=ciudad onchange=submit(); style='width:50%'>
  38.                 <option value='s' disabled>Seleccione</option>
  39.                 <option></option><?php
  40.                 $consulta2=mysqli_query($link,"SELECT ciudad FROM `oficina` WHERE estado='A' AND entidad=14 GROUP BY ciudad ORDER BY ciudad");
  41.                 while ($fila2=mysqli_fetch_array($consulta2)) {
  42.                 if(substr($fila2['ciudad'],-1,1)=="_"){ //valida si el ultimo caracter de ciudad es _ para hacer la conversion de espacios.
  43.                     $val_ciudad = strtr(substr($fila2['ciudad'],0,-1), $modificar);
  44.                 }else{
  45.                     $val_ciudad = strtr($fila2['ciudad'], $modificar);
  46.                 }
  47.                 ?><option  <?php if(isset($_POST['ciudad'])) {  if($val_ciudad==$_POST['ciudad']) { ?>selected<?php }  } ?>><?php  echo $val_ciudad;?></option><?php       
  48.                 } ?>
  49.                 </select></td>
  50.         </tr>
  51.         <tr>
  52.             <td style="background :#cccccc;"><b><label for="oficina" >OFICINA</label></b></td>
  53.             <td><select name=oficina id="id1" onchange=submit();  style="width:50%">
  54.                 <option value="s" disabled>Seleccione</option>
  55.                 <option></option><?php
  56.                 if(isset($_POST['ciudad'])){   
  57.                 $ciudad1=str_replace(" ","_",$_POST['ciudad']);
  58.                 $consulta=mysqli_query($link,"SELECT nombre FROM `oficina` WHERE ciudad='$ciudad1' and estado='A' AND entidad='14' order by nombre");
  59.                 while ($fila=mysqli_fetch_array($consulta)){
  60.                     if(substr($fila['nombre'],-1,1)=="_"){
  61.                     $var_oficina = strtr(substr($fila['nombre'],0,-1), $modificar);
  62.                     }else{
  63.                     $var_oficina = strtr($fila['nombre'], $modificar);
  64.                     } ?>
  65.                 <option <?php if(isset($_POST['oficina'])) {  if($var_oficina==$_POST['oficina']){?>selected<?php }  } ?>><?php echo $var_oficina;?></option>
  66.             <?php } } ?>
  67.             </select></td>
  68.         <?php
  69.     }
  70. }

y aqui dentro de la ejecucion del boton realizo el llamado y me funciona perfecto, se cargan los valores dependiendo del codigo que digite y el post toma los valores correctos.

Código PHP:
Ver original
  1. $val_ciu = "";
  2.                 $val_ofi = "";
  3.                 $modificar = array( '__'=>' - ', '_'=>' ');
  4.                 $modificar1 = array( ' - '=>'%%', ' '=>'%');
  5.                 if(isset($_POST['cod'])){
  6.                     if ($_POST['cod'] == "BUSCAR") {
  7.                         if ($_POST['codigo'] != "") {
  8.                             $codigo = $_POST['codigo'];
  9.                             $tipo = $_POST['tipo'];
  10.                             $query = mysqli_query($link,"SELECT ciudad, nombre FROM `oficina` WHERE entidad=14 AND codigo='$codigo' AND tipo='$tipo'");  
  11.                             $contar = mysqli_num_rows($query);
  12.                             $row = mysqli_fetch_array($query);
  13.                             if($contar > 0){
  14.                                 if(substr($row['ciudad'],-1,1)=="_"){
  15.                                     $val_ciu = strtr(substr($row['ciudad'],0,-1), $modificar);
  16.                                 }else{
  17.                                     $val_ciu = strtr($row['ciudad'], $modificar);
  18.                                 }
  19.                                 if(substr($row['nombre'],-1,1)=="_"){
  20.                                     $val_ofi = strtr(substr($row['nombre'],0,-1), $modificar);
  21.                                 }else{
  22.                                     $val_ofi = strtr($row['nombre'], $modificar);
  23.                                 }
  24.                                 ciudades($val_ciu, $val_ofi);
  25.                             }else{  
  26.                                 $val_ciu = "";
  27.                                 $val_ofi = "";
  28.                                 switch ($tipo){
  29.                                     case "C": $seleccion = "EL CAJERO";
  30.                                         break;
  31.                                     case "O": $seleccion = "LA OFICINA";
  32.                                         break;
  33.                                     case "E": $seleccion = "EL EDIFICIO";
  34.                                         break;
  35.                                 }
  36.                                 ciudades($val_ciu, $val_ofi);
  37.                                 echo "<script> window.alert(' NO SE ENCONTRÓ $seleccion CON EL CODIGO $codigo. POR FAVOR, INTENTELO NUEVAMENTE. '); </script>";
  38.                             }
  39.                         }else{
  40.                             ciudades($val_ciu, $val_ofi);
  41.                             echo "<script> window.alert('NO SE HA INGRESADO UN CODIGO AUN.'); </script>";
  42.                         }
  43.                     }else{
  44.                         ciudades($val_ciu, $val_ofi);
  45.                         $val_ciu = "";
  46.                         $val_ofi = "";
  47.                     }
  48.                 }else{
  49.                     ciudades($val_ciu, $val_ofi);  
  50.                 } ?>



muchas gracias por la ayuda, me sirvió bastante también. saludos.

Etiquetas: js, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:35.