Foros del Web » Programando para Internet » PHP »

mostrar datos consulta multitabla

Estas en el tema de mostrar datos consulta multitabla en el foro de PHP en Foros del Web. ¡Hola!: He realizado una consulta multitabla como ejemplo, con dos de las tablas que tengo relacionadas,pero creo que el php está mal, no me muestra ...
  #1 (permalink)  
Antiguo 30/04/2012, 05:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Pregunta mostrar datos consulta multitabla

¡Hola!:
He realizado una consulta multitabla como ejemplo, con dos de las tablas que tengo relacionadas,pero creo que el php está mal, no me muestra los datos que le estoy pidiendo.En concreto, esto es un perfil de usuario y quiero que me muestre los datos de sólo esa persona (la que se acaba de logear) por lo que he utilizado sesiones (no sé si correctamente) A ver si me podéis echar una mano:
Código PHP:
<?php

// Configura los datos de tu cuenta 
include("conexion.php"); $link Conectarse ();
 

@
session_start(); 
// Recogemos el usuario en un Array($usuario)
$result mysql_query('SELECT * FROM usuarios WHERE usuario = "' $_SESSION['USUARIO'] . '"')
  or die(
mysql_error());
$usuario mysql_fetch_array($result);
mysql_free_result($result);
if(!isset(
$_SESSION['USUARIO'])){
header("location:login.php");
} else {

if(isset(
$_SESSION['USUARIO'])) { 
echo 
"BIENVENIDO ".$_SESSION['USUARIO']." este es tu perfil.";
}
}
?>
<html>
<head></head>
<body>
<?php
$sql 
mysql_query("SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal on usuarios.idusuario = animal.idusuario WHERE usuarios.usuario ='$usuario' && usuarios.idusuario='$animal.idusuario'") or die(mysql_error());
     if(
mysql_num_rows($sql)>0)
{

      while (
$campo=mysql_fetch_array($sql)){
?>
<form action="" method="get">
      <table width="292" height="461" border="0" cellspacing="0">
        <tr>
      <td height="45"><label for="usuario"></label>
        <input name="usuario" type="text" class="usuario" id="usuario" value="<?php echo $campo['usuario']; ?>"
 maxlength="40" readonly="readonly" /></td>
    </tr>
</table>
</form>
<?php 


}
mysql_free_result($sql); 
mysql_close($link); 

?> 
</body>
</html>
  #2 (permalink)  
Antiguo 30/04/2012, 07:40
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 11 años, 3 meses
Puntos: 139
Respuesta: mostrar datos consulta multitabla

Cita:
Iniciado por cheterporras2 Ver Mensaje
¡Hola!:
He realizado una consulta multitabla como ejemplo, con dos de las tablas que tengo relacionadas,pero creo que el php está mal, no me muestra los datos que le estoy pidiendo.En concreto
Php no es el que esta mal veamos por que.


Código PHP:
Ver original
  1. if(!isset($_SESSION['USUARIO'])){
  2. header("location:login.php");
  3. } else {
  4.  
  5. if(isset($_SESSION['USUARIO'])) {  
  6. echo "BIENVENIDO ".$_SESSION['USUARIO']." este es tu perfil.";
  7. }
  8. }

para comenzar tienes esta parte del código donde verificas la session usuario, dices que en caso de no estar definida redireccione a login.php y de lo contrario vuelva a verificar la session usuario se supone que ya antes fue verificada y por eso es que estas en el bloque del else.

La manera mas apropiada seria.
Código PHP:
Ver original
  1. if(!isset($_SESSION['USUARIO'])){
  2. header("location:login.php");
  3. }
  4.  
  5. echo "BIENVENIDO ".$_SESSION['USUARIO']." este es tu perfil.";

Aquí colocar un bloque else seria opcional.

Punto II.

Código PHP:
Ver original
  1. $result = mysql_query('SELECT * FROM usuarios WHERE usuario = "' . $_SESSION['USUARIO'] . '"')or die(mysql_error());
  2. $usuario = mysql_fetch_array($result);

Aqui haces una consulta a la tabla usuarios y le pasas el nombre del usuario a la variable $usuario eso es lo que tu piensas que haces pero no es asi lo que en realidad estas haciendo es pasando el Arreglo completo de la consulta a la variable $usuario, por tanto cuando hagas la consulta mas abajo no contendrá un dato coherente ya que $usuario no almacena ningún nombre.
Fíjate como lo hiciste mas abajo con $campo['usuario'].

Punto III.

Código PHP:
Ver original
  1. $sql = mysql_query("SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios
  2. INNER JOIN animal on usuarios.idusuario = animal.idusuario
  3. WHERE usuarios.usuario ='$usuario' && usuarios.idusuario='$animal.idusuario'") or die(mysql_error());

Aquí vemos que haces la consulta con tu variable $usuario el cual no contiene ningún nombre y ademas agregas esta parte && usuarios.idusuario='$animal.idusuario' la cual no tiene sentido.
Y ahora me pregunto quien esta mal ?

Saludos.
  #3 (permalink)  
Antiguo 30/04/2012, 10:13
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Definitivamente... yoooo!!! jajajaja. A ver, respecto al 1º punto:
Poner
Cita:
echo "BIENVENIDO ".$_SESSION['USUARIO']." este es tu perfil.";
, sé que era una redundancia, pero era mi manera de comprobar que la sesión estaba funcionando, porque no tengo mucha experiencia y procuro verificar casi a cada paso que doy. Lo quiero dejar así(y por lo que dices, sería lo más correcto), hacer session start, el select y :
Cita:
if(!isset($_SESSION['USUARIO'])){
header("location:login.php");
}
Respecto del 2º punto, lo que quería comprobar era que el nombre que ha rellenado la persona, en el campo usuario , es el mismo que el de la sesión (deberían ser iguales). Según dices, debería quedar así, ¿no?
Cita:
$result = mysql_query('SELECT * FROM usuarios WHERE usuario = "' . $_SESSION['USUARIO'] . '"')
or die(mysql_error());
if(mysql_num_rows($result)>0)
{

while ($usuario=mysql_fetch_array($result)){ lo que vaya después... }
Y respecto al punto 3º la variable $usuario (en teoría ya debería contener los datos correctos) y la igualación
Cita:
usuarios.idusuario='$animal.idusuario'
ha sido un lapsus, puesto que quería comparar las id de ambas tablas (que deberían ser las mismas y es lo que las relaciona y, por tanto, sería realmente
Cita:
usuarios.idusuario='animal.idusuario'
. ¿Algún fallo más?. Sería absolutamente genial saberlo, ya que así es como se aprende mejor
  #4 (permalink)  
Antiguo 30/04/2012, 12:33
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

De todas formas, sigue sin ir bien...¿Alguna ayuda please?
  #5 (permalink)  
Antiguo 01/05/2012, 14:48
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Por favor, no sé si no me contestáis porque no sabéis ni a qué me estoy refieriendo (porque me explico fatal), porque no es el foro adecuado o ya no sé por qué. Necesitaría que me orientárais por favor... :(
  #6 (permalink)  
Antiguo 01/05/2012, 15:33
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Hola, pones en un comentario "// Recogemos el usuario en un Array($usuario) " y luego le dices en la consulta directamente "[...] WHERE usuarios.usuario ='$usuario' [...]".
No le puedes preguntar si un campo es igual a un array. Saca el valor del array que te interese y ponlo ahi. Si es el primer valor quiza con algo como $usuario[0] serviria, pero es posible que no. En cualquier caso comprueba la consulta resultante por pantalla: despues de la segunda consulta pon un "echo $sql;" a ver como te queda ese array en la consulta.
  #7 (permalink)  
Antiguo 01/05/2012, 16:04
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Cuando te refieres a sacar el valor del array que me interese, ¿te refieres a esto?:
Cita:
$usuario= $_GET['usuario'];
Lo que me interesa es sacar los datos del usuario que se haya logueado previamente, en este caso esto usando uno de prueba.
  #8 (permalink)  
Antiguo 01/05/2012, 16:33
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Lo que me refiero es que has hecho una consulta de todos los campos (SELECT *...).
Luego has metido todos los campos del resultado en un array llamado $usuario.
Ahora $usuario no tiene 1 valor, tiene muchos, no puedes usarlo para ver si es igual al valor de un campo (usuarios.usuario ='$usuario')
Porque imaginemos que tu tabla tiene los campos (id, nombre, apellido, edad, ciudad, pais), entonces el array $usuario podria quedar algo como: ("182","pedro", "garcia","23","Valencia","España"). Y luego ponerle a la consulta que te saque el registro donde (WHERE) el usuarios.usuario ='$usuario' ... no es igual, esta claro, estas comparando un campo con un array, por lo que no encontrará ninguna coincidencia.
Por eso te decía que pusieras un "echo $sql;" despues de la consulta. Seguro que no saldrá como querías.
  #9 (permalink)  
Antiguo 02/05/2012, 00:08
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Evidentemente, no me saca ningún resultado.
Entiendo, entonces debería realizar el select así:
Cita:
$result = mysql_query('SELECT usuario FROM usuarios WHERE usuario = "' . $_SESSION['USUARIO'] . '"')
O en todo caso, como te comenté antes con
Cita:
$usuario= $_GET['usuario'];
Para sacar sólo un resultado, el de la persona que está en ese momento en la página.
  #10 (permalink)  
Antiguo 02/05/2012, 05:56
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Qué hay en la sesion de usuario? porque si tienes la id, te podrias ahorrar la primera consulta y en la segunda hacer directamente un "...usuarios.usuario = $_session['usuario']..."
  #11 (permalink)  
Antiguo 02/05/2012, 06:49
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

No es la id, es el nombre de usuario (que, como la id, es único), ¿debería contener mejor la id?. Lo que quiero es restringir los datos para que sólo el usuario en cuestión pueda verlos, ¿sería también factible haciendo sólo un Select, como me has recomendado?
  #12 (permalink)  
Antiguo 02/05/2012, 07:27
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Si lo que tienes en la sesion es el nombre, y es único, entonces el código del principio modificando esto:
Código PHP:
Ver original
  1. "SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal on usuarios.idusuario = animal.idusuario WHERE usuarios.usuario ='$usuario' && usuarios.idusuario='$animal.idusuario'"
por
Código PHP:
Ver original
  1. "SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal on usuarios.idusuario = animal.idusuario WHERE usuarios.usuario ='$_SESSION['USUARIO']' && usuarios.idusuario='animal.idusuario'"
debería dar resultados.
  #13 (permalink)  
Antiguo 02/05/2012, 07:33
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Perdona mi ignorancia pero, entonces, el primer Select sobraría, ¿no?. Con rescatar el "usuario" por GET y haciendo la comparación con el Select que me has propuesto, sería todo...
  #14 (permalink)  
Antiguo 02/05/2012, 07:52
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Son diferentes consultas, segun lo que quieras mostrar y cómo. Se podría hacer de otras formas, pero ya que lo tienes hecho, mira a ver si con las respuestas que hemos dado te da resultados tu código.
  #15 (permalink)  
Antiguo 02/05/2012, 09:50
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

No me muestra nada y, de hecho, la consulta que me has dado, me da error en la sintaxis... Además, no entiendo si me aconsejas o no, que ponga el anterior Select
Cita:
$result = mysql_query('SELECT usuario FROM usuarios WHERE usuario = "' . $_SESSION['USUARIO'] . '"')
Lo ponga o no, el resultado es el mismo, no me muestra nada...
  #16 (permalink)  
Antiguo 02/05/2012, 11:42
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

A ver, he hecho esto
Código PHP:
<?php

// Configura los datos de tu cuenta 
include("conexion.php"); $link Conectarse ();
 

@
session_start(); 

if(!isset(
$_SESSION['USUARIO'])){
header("location:login.php");
}else{
if(isset(
$_SESSION['USUARIO'])){
    echo 
"BIENVENIDO ".$_SESSION['USUARIO']." este es tu perfil."
?>
<html> 
<head></head> 
<body> 
<?php
$sql 
mysql_query("SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal ON usuarios.idusuario = animal.idusuario WHERE usuarios.usuario ='".$_SESSION['usuario']."' && animal.usuario='.$usuario.'") or die(mysql_error());

     if (
$campo mysql_fetch_array($sql))
{
    while (
$campo=mysql_fetch_array($sql)) { 

    
         
?>
<form action="" method="get">
<table width="292" height="461" border="0" cellspacing="0">
    <tr>
      <td height="25">&nbsp;</td>
    </tr>
    <tr>
      <td height="45"><label for="usuario"></label>
      
        <input name="usuario" type="text" class="usuario" id="usuario"  value="<?php echo ".$campo['usuario']." ?>
 maxlength="40" readonly="readonly" /></td>
    </tr>
</table>
</form>
<?php 


}
}

mysql_free_result($sql); 
mysql_close($link); 
}
?> 
</body>
</html>
pero hay algo en la sintaxis que falla, aquí
Cita:
<input name="usuario" type="text" class="usuario" id="usuario" value="<?php echo ".$campo['usuario']." ?>"
No sé si en algún sitio más, pero en esta linea es seguro.
  #17 (permalink)  
Antiguo 02/05/2012, 11:45
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

El error es por las comillas, disculpa, así supongo que mejor:

Código PHP:
Ver original
  1. "SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal on usuarios.idusuario = animal.idusuario WHERE usuarios.usuario ='".$_SESSION['USUARIO']."' && usuarios.idusuario='animal.idusuario'"
  #18 (permalink)  
Antiguo 02/05/2012, 11:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Ya lo arreglé, pero no me termina de ir bien, mira un poco más arriba en el comentario que he hecho, please.
  #19 (permalink)  
Antiguo 02/05/2012, 12:03
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Código PHP:
Ver original
  1. ... animal.usuario='.$usuario.'"

los puntos antes y despues de la variable sobran, solo se ponen para concatenar codigo php, pero estas usando esa variable dentro de la consulta.
  #20 (permalink)  
Antiguo 02/05/2012, 12:11
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Vale, ya lo he corregido, ¿y lo otro por favor?, ¿cómo muestro la información dentro del caja de texto?
  #21 (permalink)  
Antiguo 02/05/2012, 12:19
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Código PHP:
Ver original
  1. value="<?php echo ".$campo['usuario']." ?>"

saca los puntos, las comillas y pon un punto y coma al final a ver que pasa...

Código PHP:
Ver original
  1. value="<?php echo $campo['usuario']; ?>"

hay que revisar esas cosas antes de nada
  #22 (permalink)  
Antiguo 02/05/2012, 12:26
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

He mirado en un montón de sitios y ya tengo la cabeza hecha un lío, ya no hay errores de sintaxis, pero ¿por qué sigue sin funcionar...?qué desesperación...
  #23 (permalink)  
Antiguo 02/05/2012, 13:33
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

A ver, segun el ultimo codigo la variable (en realidad array) $usuario te la has cargado no?
pues quitala de animal.usuario=$usuario, pon la sesion.
  #24 (permalink)  
Antiguo 02/05/2012, 14:08
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

Ya he puesto la sesión, sigue sin funcionar...
  #25 (permalink)  
Antiguo 02/05/2012, 15:40
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

Tienes acceso a la base de datos para poder hacer la consulta directamente? phpmyadmin o algo asi.
Pon la consulta ahi con algun dato real que conozcas, algo como:

SELECT usuarios.usuario, usuarios.contrasenna, animal.especie FROM usuarios INNER JOIN animal on usuarios.idusuario = animal.idusuario WHERE usuarios.usuario='Pedrito' && usuarios.idusuario='Pedrito'

a ver si te devuelve algo, no vaya a estar el error en otra parte.
  #26 (permalink)  
Antiguo 03/05/2012, 08:30
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 8 años, 1 mes
Puntos: 2
Respuesta: mostrar datos consulta multitabla

He probado la consulta y va perfectamente, sustituyendo "Pedrito" por un nombre real e idusuario "Pedrito" por un número. Así que, funcionar, funciona la consulta.
  #27 (permalink)  
Antiguo 03/05/2012, 08:43
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 13 años
Puntos: 8
Respuesta: mostrar datos consulta multitabla

pues la idea es ir eliminando posibles errores, a ver si se encuentra el fallo, haz un echo $sql; despues de la consulta con las variables a ver si el resultado de la consulta también es correcto o deja de recibir algun valor. Si eso va bien haz un $echo del $campo['usuario'] sin toda la parafernalia de form, tabla, etc a ver si se ve. Puede que el error sea simplemente al mostrar el resultado, en tal caso prueba a poner un alias a los campos, osea "SELECT usuarios.usuario as uusuario ...." y luego mostrar $campo['uusuario'].

Etiquetas: mostrar-datos, multitabla, php+basedatos
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 11:03.