Hola,
Voy a plantear el problema de otra manera que alomejor es más sencillo y alguien con más conocimiento que yo podrá ayudarme. La explicación es un poco larga pero si tenéis paciencia de leerla queda más clara y posiblemente lo entenderéis mejor y así posiblemente también me podáis ayudar.
Gracias de antemano
Comienzo:
Tengo estas 3 tablas:
[table]
[tr]
[td]
USUARIOS[/td]
[/tr]
[tr]
[td]
id_usuario(primary Key)[/td]
[/tr]
[tr]
[td]nombre[/td]
[/tr]
[tr]
[td]correo[/td]
[/tr]
[tr]
[td]user[/td]
[/tr]
[tr]
[td]fecha[/td]
[/tr]
[tr]
[td]estado[/td]
[/tr]
[tr]
[td]
id_perfil[/td]
[/tr]
[/table]
[table]
[tr]
[td]PERFILES[/td]
[/tr]
[tr]
[td]
id_perfil(primary Key)[/td]
[/tr]
[tr]
[td]perfil[/td]
[/tr]
[tr]
[td]
id_tipoperfil[/td]
[/tr]
[/table]
[table]
[tr]
[td]TIPO_PERFIL[/td]
[/tr]
[tr]
[td]
id_tipoperfil(primary Key)[/td]
[/tr]
[tr]
[td]Descripcion[/td]
[/tr]
[/table]
Lo que necesito es mostrar todos los usuarios con sus campos, y ademas debería de mostrar su perfil y la Descripción del tipo perfil. Para que quede más claro muestro el contenido de las tablas PERFILES y TIPO_PERFIL que es un contenido no dinámico y siempre será el mismo:
Contenido PERFILES:
id_perfil, perfil, id_tipoperfil)
(1, 'Administrador', 1),
(2, 'Administrador', 11),
(3, 'Administrador', 111),
(4, 'Administrador', 112),
(5, 'Administrador', 1112),
(6, 'Editor', 1),
(7, 'Editor', 11),
(8, 'Editor', 111),
(9, 'Editor', 112),
(10, 'Editor', 1112),
(11, 'Registrado', 1),
(12, 'Registrado', 11),
(13, 'Encuestador', 1),
(14, 'Encuestador', 11),
(15, 'Encuestador', 111),
(16, 'Encuestador', 112),
(17, 'Encuestador', 1112);
Contenido TIPO_PERFIL:
(id_tipoperfil, Descripcion)
(1, 'Leer'),
(11, 'Leer, modificar'),
(111, 'Leer, modificar, insertar'),
(112, 'Leer, modificar, eliminar'),
(1112, 'Leer, modificar, insertar y eliminar');
Como habréis podido observar; USUARIOS se relaciona con PERFILES a través del campo
id_perfil y PERFILES se relaciona con TIPO_PERFIL a través del capo
id_tipoperfil.
Las relaciones serían:
USUARIOS (
id_perfil) -->
PERFILES (
id_perfil, id_tipoperfil) -->
TIPO_PERFIL(
id_tipoperfil)
Bien, explicado esto muestro como debería ser el resultado (sólo pongo un registro para resumir, es decir como si hubiera sólo 1 usuario):
Nombre Correo User Fecha Estado Perfil Descripción
Pepito pepito@pepe.com pepe 25/12/2011 activo administrador Leer,modificar,eliminar
En este caso si seguimos la relación anterior:
Las relaciones serían:
USUARIOS (
id_perfil=4) -->
PERFILES (
id_perfil=4, id_tipoperfil=112) -->
TIPO_PERFIL(
id_tipoperfil=112)
Hasta aquí he explicado lo que deseo mostrar y como tengo los datos estructurados en las tablas. Ahora os voy a indicar lo que hago bien y lo que no hago bien y por tanto necesito ayuda:
1.: Mostrar los datos de la tabla USUARIOS
En este punto no tengo ningún problema.
Tengo una clase Usuarios en la cual hay un método
get_usuarios()
que hace la llamada a la base de datos.
Copio el método:
public function get_usuarios()
{
$sql="SELECT * FROM usuarios ORDER BY fecha DESC";
$res=mysql_query($sql,Conectar::con());
while ($reg=mysql_fetch_assoc($res))
{
$this->usuario[]=$reg;
}
return $this->usuario;
}
Copio trozo de código desde el cual llamo a esté método y aparte muestro los datos de este array:
<?php
$n=$not->get_usuarios(); //Aqui llamo al método
for ($i=0;$i<sizeof($n);$i ) //Realizo un for para recorrer el array
{
?>
<tr>
<td valign="top" align="left">
<?php echo $n[$i]["nombre"];?> //muestro campo nombre
</td>
<td valign="top" align="left">
<?php echo $n[$i]["correo"];?>//muestro campo correo
</td>
<td valign="top" align="left">
<?php echo $n[$i]["user"];?>//muestro campo user
</td>
<td valign="top" align="left">
<?php echo $not->get_descripcion_perfil_by_id_usuario($n[$i]["id_usuario"]);?>
</td>
<td valign="top" align="left">
<?php echo $n[$i]["fecha"];?>//muestro campo fecha
</td>
<td valign="top" align="left">
<?php echo $n[$i]["estado"];?>//muestro campo estado
</td>
<td valign="top" align="center">
<a href="edit_usuarios.php?id_usuario=<? echo $n[$i]["id_usuario"];?>" title="Editar <?php echo $n[$i]["user"];?>"><img src="ima/editar.png" border="0" /></a>
</td>
<td valign="top" align="center">
<a href="javascript:eliminar_usuario('eliminar_usuario.php?id_usuario=<? echo $n[$i]["id_usuario"];?>');" title="Eliminar <?php echo $p[$i]["user"];?>"><img src="ima/eliminar.png" border="0" /></ a>
</td>
</tr>
<?php
}
?>
</table>
Hasta aquí todo correcto, ahora vamos al paso 2:
2.: Mostrar los datos Descripcion de la tabla TIPO_PERFIL y campoperfil de la tabla PERFILES
He aquí mi problema, no tengo ni idea de hacer esto.
Yo lo he hecho de la siguiente manera:
Tengo un método al que le paso por referencia un
id_usuario y que me devuelve la descripción que le corresponda según la tabla TIPO_PERFIL.
El método es el siguiente:
public function get_descripcion_perfil_by_id_usuario($id_usuario)
{
$sql="select tp.Descripcion from usuarios AS u, tipo_perfil AS tp, perfiles AS p where id_usuario='".strip_tags($id_usuario)."' AND u.id_perfil = p.id_perfil AND p.id_tipoperfil = tp.id_tipoperfil";
$res=mysql_query($sql,Conectar::con());
while ($reg=mysql_fetch_array($res))
{
$this->usuariodescripcion[]=$reg;
}
return $this->usuariodescripcion;
}
}
El trozo de código, dentro de la tabla que he apuntado antes, dónde llamo a ese método es:
<td valign="top" align="left">
<?php echo $not->get_descripcion_perfil_by_id_usuario($n[$i]["id_usuario"]);?>
</td>
Bien, pues esto no funciona, no sé porqué. El resultado que me dá esto es "Array". La sql funciona, ya que la he puesto en PhPMyadmin (lógicamente sustituyendo '".strip_tags($id_usuario)."' por un '1', le pongo el id usuario 1).
Espero que la explicación haya sido clara y alguien me pueda decir que puedo hacer.
Gracias a tod@s.