Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Llevo dias buscando en el foro y no encuentro solucion

Estas en el tema de Llevo dias buscando en el foro y no encuentro solucion en el foro de PHP en Foros del Web. Muy buenas tardes a todos, tengo un pequeño(o gran) problema que necesitaría me ayudéis a resolver. He de decir que he leído decenas de post ...
  #1 (permalink)  
Antiguo 26/05/2015, 10:56
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Pregunta Llevo dias buscando en el foro y no encuentro solucion

Muy buenas tardes a todos, tengo un pequeño(o gran) problema que necesitaría me ayudéis a resolver. He de decir que he leído decenas de post y no he encontrado(o no he sido capaz de verla)una solución. Os cuento:

-Tengo una base de datos, a la cual he llamado Ejemplo.
-Cuatro tablas dentro de Ejemplo.
-pais
paisId -- País
1 -- España
2 -- Francia
-ciudad
ciudadId -- Ciudad -- paisId
1 -- Madrid -- 1
2 -- Barcelona-- 1
3 -- Paris -- 2
4 -- Niza -- 2
-lugares
lugarid -- Lugar -- ciudadId
1 -- Museo -- 1
1 -- Museo -- 2
1 -- Museo -- 3
1 -- Museo -- 4
2 -- Cine -- 1
2 -- Cine -- 2
2 -- Cine -- 3
2 -- Cine -- 4
3 -- Teatro -- 1
3 -- Teatro -- 2
3 -- Teatro -- 3
3 -- Teatro -- 4
-datoslugares
ciudadId -- Población -- Museos -- Cines -- Teatros
1 -- PobA -- MusA -- CinA -- TeatA
1 -- PobB -- MusA -- CinA -- TeatA
1 -- PobC -- MusA -- CinA -- TeatA
2 -- PobA -- MusA -- CinA -- TeatA
2 -- PobB -- MusA -- CinA -- TeatA
2 -- PobC -- MusA -- CinA -- TeatA
3 -- PobA -- MusA -- CinA -- TeatA
3 -- PobB -- MusA -- CinA -- TeatA
3 -- PobC -- MusA -- CinA -- TeatA
4 -- PobA -- MusA -- CinA -- TeatA

Bien, he creado una pag a la cual he llamado ejemplo.html
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es">
  3.     <meta charset="UTF-8">
  4.     <title>Ejemplo</title>
  5.     <script src="../Js/jquery-1.11.2.js"></script>
  6.    
  7.     <script type="text/javascript">
  8.         $("document").ready(function(){
  9.             $("#pais").load("pais.php");
  10.            
  11.             $("#pais").change(function(){
  12.                 var id = $("#pais").val();
  13.                 $.get('ciudad.php',{param_id:id})
  14.                  .done(function(data){
  15.                      $("#ciudad").html(data);
  16.                      
  17.                      
  18.                         $("#ciudad").change(function(){
  19.                             var id2 = $("#ciudad").val();
  20.                             $.get('lugares.php',{param_id:id2})
  21.                              .done(function(data){
  22.                                  $("#lugares").html(data);
  23.                                    
  24.                                    
  25.                                     $("#lugares").change(function(){
  26.                                         var id2 = $("#ciudad").val();
  27.                                         var id3 = $("#lugares option:selected").text();
  28.                                         $.post('mostrar.php',{lug_id:id3, param_id:id2})
  29.                                          .done(function(data){
  30.                                              $("#mostrar").html(data);
  31.                                          })
  32.                                     })
  33.                              })
  34.                         })
  35.                  })
  36.             })
  37.  
  38.         })
  39.     </script>
  40.    
  41.    
  42. </head>
  43.     <label>Pais</label>
  44.     <select id="pais">
  45.        
  46.     </select>
  47.     <label>Ciudad:</label>
  48.     <select id="ciudad" >
  49.      
  50.        
  51.     </select>
  52.     <label>Lugares:</label>
  53.     <select id="lugares" >
  54.        
  55.     </select>
  56.    
  57.     <h2>resultados</h2>
  58.     <div id="mostrar">
  59.        
  60.    
  61.     </div>
  62. </body>
  63. </html>
y cuatro más en php:

país.php
Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-1');
  3. $servidor="localhost";
  4. $usuario="root";
  5. $pass="";
  6. $bd="Ejemplo";
  7.  
  8. $con = mysqli_connect($servidor,$usuario, $pass, $bd); //realizamos conexion y seleccionamos base de datos
  9.  
  10. $result = mysqli_query($con, "SELECT * FROM paises" );//almacenamos en $result todos(*) los resultados de la tabla paises
  11. echo'<option>Selecciona:</option>';
  12. while ($row = mysqli_fetch_array($result)){
  13.     echo '<option value="'.$row['paisId'].'">'.$row['Pais'].' </option>';//Mostramos los resultados de Pais dentro de las opciones
  14. }
  15.  
  16. ?>

ciudad.php

Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-1');
  3. $paisid = $_GET['param_id'];
  4.  
  5. $servidor="localhost";
  6. $usuario="root";
  7. $pass="";
  8. $bd="Ejemplo";
  9.  
  10. $con = mysqli_connect($servidor,$usuario, $pass, $bd); //realizamos conexion y seleccionamos base de datos
  11.  
  12. $result = mysqli_query($con, "SELECT * FROM ciudad WHERE paisId = $paisid");//almacenamos en $result todos(*) los resultados de la tabla ciudad que coincidan en el paisIdId
  13. echo'<option>Selecciona:</option>';
  14. while ($row = mysqli_fetch_array($result)){
  15.     echo '<option value="'.$row['ciudadId'].'">'.$row['Ciudad'].' </option>';//Mostramos los resultados de Ciudad dentro de las opciones
  16. }
  17.  
  18. ?>

lugares.php

Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-1');
  3. $ciudadid = $_GET['param_id'];
  4.  
  5. $servidor="localhost";
  6. $usuario="root";
  7. $pass="";
  8. $bd="Ejemplo";
  9.  
  10. $con = mysqli_connect($servidor,$usuario, $pass, $bd); //realizamos conexion y seleccionamos base de datos
  11.  
  12. $result = mysqli_query($con, "SELECT * FROM lugares WHERE ciudadId = $ciudadid");//almacenamos en $result todos(*) los resultados de la tabla lugares que coincidan en el ciudadId
  13. echo'<option>Selecciona:</option>';
  14. while ($row = mysqli_fetch_array($result)){
  15.     echo '<option >'.$row['lugares'].' </option>';//Mostramos los resultados de lugares dentro de las opciones
  16. }
  17.  
  18. ?>

y mostrar.php

Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-1');
  3.  
  4. $ciudadid = $_POST['param_id'];
  5. $lugar = $_POST['prop_id'];
  6. //echo $tropa;
  7. //echo $propiedad;
  8.  
  9. $servidor="localhost";
  10. $usuario="root";
  11. $pass="";
  12. $bd="Ejemplo";
  13.  
  14. $con = mysqli_connect($servidor,$usuario, $pass, $bd); //realizamos conexion y seleccionamos base de datos
  15. $result = mysqli_query($con, "SELECT * FROM  datoslugares WHERE ciudadId=$ciudadid");
  16.        
  17.            
  18.             switch ($propiedad){
  19.                 case['Museos']:
  20.                     while ($row = mysqli_fetch_array($result)){
  21.                     echo $row[1];//que corresponde a la columna Poblacion
  22.                     echo $row[2];}//que corresponde a la columna Museos en la tabla
  23.                     break;
  24.                    
  25.                 case['Cines']:
  26.                     while ($row = mysqli_fetch_array($result)){
  27.                     echo $row[1];  
  28.                     echo $row[3];}//que corresponde a la columna Cines
  29.                     break;
  30.  
  31.                 case['Teatros']:
  32.                     while ($row = mysqli_fetch_array($result)){
  33.                     echo $row[1];  
  34.                     echo $row[4];}//que corresponde a la columna Teatros
  35.                     break;
  36.                    
  37.                 default:
  38.                     break;
  39.         }
  40.    
  41. ?>

Todos los select funcionan perfectamente, se llenan dependiendo de la selección del usuario, pero no soy capaz de lograr que ,tras seleccionar la opción en el ultimo select, muestre los datos correctos, o sea que el fallo esta en mostrar.php.
He de decir que ya he probado varias opciones
p.ej.
- Al realizar la consulta a la bd poner lo siguiente
Código:
$result = mysqli_query($con, "SELECT '".$lugar."' FROM  datoslugares WHERE ciudadId=$ciudadid");
while ($row = mysqli_fetch_array($result)){
	echo $row[$lugar] </option>';
Gracias anticipadas.

P.D. ya se que el código se podría simplificar añadiendo un include :conexión p. ej. pero ahora lo que me preocupa es hacerlo funcionar.
  #2 (permalink)  
Antiguo 26/05/2015, 11:20
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

veamos, en el ajax estas enviando: lug_id:id3 y param_id:id2, pero en tu archivo mostrar.php estas recuperando $_POST['prop_id'] en lugar de $_POST['lug_id'], ya esto te debería botar un error de index inexistente (controla tu configuración de php.ini para mostrar todos los errores si estas en local). Después, en el switch pones $propiedad que simplemente nunca inicializaste.
  #3 (permalink)  
Antiguo 26/05/2015, 11:40
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Gracias jamie_88, efectivamente, como dices, hay un par de errores ahí, pero te explico, han sido errores de transcripción, he modificado los nombres de las tablas, su contenido y las variables para hacerlo mas ..."entendible" y se me ha pasado modificar lo que comentas, pero en los archivos originales esta correctamente puesto, modifico el mostrar.php y te lo muestro. Es mas, si te fijas en las líneas 6 y 7 de mostrar.php si las dejo sin comentar, me imprimen el valor de las dos variables, es decir, las toma correctamente con el POST


mostrar.php corregido
Código PHP:
Ver original
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-1');
  3.  
  4. $ciudadid = $_POST['param_id'];
  5. $lugar = $_POST['lug_id'];
  6. //echo $ciudadid;
  7. //echo $lugar;
  8.  
  9. $servidor="localhost";
  10. $usuario="root";
  11. $pass="";
  12. $bd="Ejemplo";
  13.  
  14. $con = mysqli_connect($servidor,$usuario, $pass, $bd); //realizamos conexion y seleccionamos base de datos
  15. $result = mysqli_query($con, "SELECT * FROM  datoslugares WHERE ciudadId=$ciudadid");
  16.        
  17.            
  18.             switch ($lugar){
  19.                 case['Museos']:
  20.                     while ($row = mysqli_fetch_array($result)){
  21.                     echo $row[1];//que corresponde a la columna poblacion  
  22.                     echo $row[2];}// que corresponde a la columna Museos
  23.                     break;
  24.                    
  25.                 case['Cines']:
  26.                     while ($row = mysqli_fetch_array($result)){
  27.                     echo $row[1];  
  28.                     echo $row[3];}//que corresponde a la columna Cines
  29.                     break;
  30.  
  31.                 case['Teatros']:
  32.                     while ($row = mysqli_fetch_array($result)){
  33.                     echo $row[1];  
  34.                     echo $row[4];}// que corresponde a la columna Teatros
  35.                     break;
  36.                    
  37.                 default:
  38.                     break;
  39.         }
  40.    
  41. ?>

Perdon por el error y gracias por tu tiempo
  #4 (permalink)  
Antiguo 26/05/2015, 13:11
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

pero te sale algún error? que es lo que te muestra?

prueba a hacer esto para que puedas notar donde esta el error...
Código PHP:
Ver original
  1. $con = mysqli_connect($servidor,$usuario, $pass, $bd);
  2.     echo mysqli_connect_error();
  3.     exit;
  4. }
  5. $result = mysqli_query($con, "SELECT * FROM  datoslugares WHERE ciudadId=$ciudadid");
  6. $numeroItems = mysqli_num_rows($result)
  7. echo 'numero de items: ' .  $numeroItems;
  8. if($numeroItems > 0){
  9.     while ($row = mysqli_fetch_array($result)) {
  10.         var_dump($row);
  11.     }
  12. }
  #5 (permalink)  
Antiguo 26/05/2015, 14:47
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Hola de nuevo jamie_88. Pues mira, dejándolo tal y como lo he puesto en el primer post(con las variables corregidas, claro), no muestra absolutamente nada. Pero te cuento, si saco el "while" y los dos "echos" del "switch", si que muestra correctamente los datos que quiero, es decir, los datos de la columna 1 y los datos de la columna 2 en el primer "case",por ejemplo

Pasando tu código a mi archivo original muestra lo siguiente:
numero de ítems: X(dependiendo de lo que seleccione en el select)
y a continuación me muestra los X "arrays" con sus correspondientes datos:
array (size=34)
0 => string 'xx' (length=2)
'xxxxxx' => string 'xx' (length=2)
1 => string 'xxxxx'(length=7)
'xxxxx' => string 'xxxxxxx'(length=7)
2 => string 'xx' (length=2)
'xxxxx' => string 'xx' (length=2)
3 => string 'xxxx'(length=4)
'xxxxx' => string 'xxxx'(length=4)
  #6 (permalink)  
Antiguo 26/05/2015, 15:26
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

ok, entonces el problema no es la query

Prueba así y abre el firebug (o consola de chrome) y controla cuando haces el ajax si te bota algún error

Código PHP:
<?php
header
('Content-Type: text/html; charset=ISO-8859-1');
 
$ciudadid $_POST['param_id'];
$lugar $_POST['lug_id'];
//echo $ciudadid;
//echo $lugar;
 
$servidor="localhost";
$usuario="root";
$pass="";
$bd="Ejemplo";
 
$con mysqli_connect($servidor,$usuario$pass$bd); //realizamos conexion y seleccionamos base de datos 
$result mysqli_query($con"SELECT * FROM  datoslugares WHERE ciudadId=$ciudadid");

if (
$lugar == 'Museos') {
    
$indiceRow 2;
} elseif (
$lugar == 'Cines') {
    
$indiceRow 3;
} elseif (
$lugar == 'Teatros') {
    
$indiceRow 4;
}
while (
$row mysqli_fetch_array($result)) { ?>
    <option><?php echo $row[1?></option>
    <option><?php echo $row[$indiceRow?></option>
<?php ?>
  #7 (permalink)  
Antiguo 26/05/2015, 16:21
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Hola de nuevo jamie_88, de esta manera que me dices, también había probado(con el elseif en lugar de switch) y no da ningún error.

imprime correctamente el $row[1]
y manda dos Notice:
1.- Notice: undefined variable: $indiceRow in.....mostrar.php
2 Notice: undefined index: in ....... mostrar.php
  #8 (permalink)  
Antiguo 26/05/2015, 16:40
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

ok, es que no estuvimos muy atentos que digamos, tu estas mandando un entero (un id) y estas condicionando con un string. Osea, $lugar = $_POST['lug_id']; vale 2 (creo que asi dice en tu ajax) pero luego condiciones que $lugar sea igual a un texto (Museos, Cines, Teatros), ahí esta el error, tienes que condicionar con un id, por ejempli
if ($lugar == 2)
elseif($lugar == 5)
etc

hay manera de mejorar el código, pero condicionando como te digo debería funcionar.
  #9 (permalink)  
Antiguo 26/05/2015, 16:54
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

De esa manera sigue dando los mismos notice que antes
undefined variable: $indiceRow....
undefined index:....

Pero si yo imprimo las variables
$ciudadid = $_POST[param_id]
$lugar = $_POST[lug_id]

echo $ciudadid si que devuelve un entero, ya que lo tomo de esa manera var id2 = $("#ciudad").val();

sin embargo

echo $lugar devuelve Cines(por ejemplo) por que está tomado de esta manera var id3 = $("#lugares option:selected").text();

Gracias de nuevo.
  #10 (permalink)  
Antiguo 28/05/2015, 02:48
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

El problema parece estar en que no se asigna el valor de $lugares a la variable $indiceRow.

Si hago:

Código PHP:
Ver original
  1. echo $lugares;//imprime Museos, Cines o Teatros, según la selección.
pero al asignarle el valor

Código PHP:
Ver original
  1. if ($lugares == ['Museos']){
  2. $indiceRow = 2;
  3. }
no parece asignarle el valor, ya que tras ejecutar

Código PHP:
Ver original
  1. while ($row = mysqli_fetch_array($result)) { ?>
  2.     <option><?php echo $row[1] ?></option>
  3.     <option><?php echo $row[$indiceRow] ?></option>
  4. <?php } ?>

devuelve:

Código:
Notice:Undefined variable $indiceRow
Alguna otra sugerencia??
  #11 (permalink)  
Antiguo 28/05/2015, 08:22
Avatar de jamie_88  
Fecha de Ingreso: abril-2011
Ubicación: Lima
Mensajes: 161
Antigüedad: 13 años
Puntos: 28
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

el problema esta en el if,

if ($lugares == ['Museos'])
debería ser
if ($lugares == 'Museos')

['Museos'] es igual a array('Museos'), y no puedes comparar un string con un array
  #12 (permalink)  
Antiguo 28/05/2015, 10:21
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Hola jamie_88,
el if lo tengo tal cual tu me dijiste, sin los corchetes, no se por que lo puse así en la ultima respuesta.
  #13 (permalink)  
Antiguo 28/05/2015, 10:34
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Hola ranijo,

Si sale esto:
Código:
Notice:Undefined variable $indiceRow
Es que esta dando false
Código PHP:
// doy por echo que esto está antes del While
if ($lugares == 'Museos')
{
    
$indiceRow 2;

Comprueba el valor de $lugares con var_dump() a ver si es el que esperas. Que no debe serlo.

Si no es el que esperas, ve analizando hacia atrás donde está el error de asignación.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #14 (permalink)  
Antiguo 28/05/2015, 12:45
 
Fecha de Ingreso: mayo-2015
Mensajes: 8
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Hola Uncontroled_Duck, gracias por tu tiempo.

Pues, tema solucionado, resulta que la variable $lugares, aun no se por qué, tomaba el valor que yo pretendía, pero con un espacio al final.
Al ejecutar
Código PHP:
Ver original
  1. var_dump($lugares);
devuelve
Código PHP:
Ver original
  1. string 'Museos ' (lenght= 7)//y no 6 como debería.
Asi que con cambiar las asignaciones en el if:

Código PHP:
Ver original
  1. if ($lugar == 'Museos') {
  2.     $indiceRow = 2;
  3. } elseif ($lugar == 'Cines') {
  4.     $indiceRow = 3;
  5. } elseif ($lugar == 'Teatros') {
  6.     $indiceRow = 4;
  7. }
por
Código PHP:
Ver original
  1. if ($lugar == 'Museos ') {
  2.     $indiceRow = 2;
  3. } elseif ($lugar == 'Cines ') {
  4.     $indiceRow = 3;
  5. } elseif ($lugar == 'Teatros ') {
  6.     $indiceRow = 4;
  7. }
añadiendo un espacio al final....SOLUCIONADO!!

Por eso al imprimir $lugares, si que parecía el valor correcto, era lo mismo pero con un espacio al final.


Muchas gracias por la ayuda a los dos.

Saludos.
  #15 (permalink)  
Antiguo 28/05/2015, 12:58
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: Llevo dias buscando en el foro y no encuentro solucion

Buenas,

Me alegra que tengas la solución.

Sobre eso es igual, ve siguiendo la pista hasta dar de donde viene el espacio. Lo normal es que no lo tenga si tu no lo quieres.

Debería ser 'Museos' como planteabas en un principio y no 'Museos ' con el espacio después.

Sobre todo por que puede generarte mas problemas en el futuro.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: buscando, dias, encuentro, foro, html, mysql, select, solucion, tabla
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 00:24.