Hola a todos.
Tengo un problema a la hora de consultar datos de dos tablas en una base de datos para despues insertar. Os cuento un poco. Es una base de datos para una Admon. de Fincas con una tabla "comunidades" (IDComunidad (Clave Primaria), Nombre, CIF, Direccion) y otra tabla "usuarios" (IDComunidad, Login, Pwd, Nivel), ambas tablas relacionadas mediante la clave primaria de "comunidades", IDComunidad.
La tabla de "comunidades" no da ningún problema. Con PHP y MySQL consigo consultar sus datos, añadir nuevas comunidades, modificar y borrar sin problemas.
El problema viene a la hora de asignar usuarios desde el panel de control y relacionar a cada usuario con su comunidad en particular. ¿Alguna idea sobre el tema?
Muchas gracias de antemano. Un saludo a todos!!
Hola:
¿Cómo esta implementado el panel de control? Específicamente el que ejecuta las consultas SQL (muéstranos el código PHP y también dime si están relacionadas las tablas a través de llaves primarias y foráneas - sé que existe la primaria, pero no la foránea).
Saludos.
Muy sencillo a la tabla de usuarios recreala o añade al principio usuario_id INT(11) not null primary key auto_increment y dejas solo como INT a IDcomunidad , despues para relacionarlas ingresas el id de la comunidad que pertenecera al usuario.
Si es en un panel puedes hacer un while a select
<select name="comunidad_del_usuario">
exactamente aqui iria el script en el que recuperarias los nombres e ids de las comunidades y despues se los podras asignar al usuario
<option value="5">Comunidad 5</option>
</select>
Una vez hecho click al boton submit recuperas por post la comunidad que le asignaras al usuario y haces un simple insert into solo insertando en todos los campos menos en user_id
Ahora para recuperar usuarios por comunidad haces un select mas un where en la consulta.
Ejemplo :
mysql_query("SELECT * FROM usuarios WHERE IDComunidad='5'");
Asi seleccionaras todos los usuarios que pertenezcan a la comunidad 5 y quedan relacionados .
Un saludo.
PD: cualquier duda y si no era asi lo que deseabas preguntame.
Gracias a los dos. Os explico un poco mas para aclarar un poco el tema.
Las tablas las tengo así:
"comunidades" (IDComunidad (Clave Primaria), Nombre, CIF, Direccion)
"usuarios" (IDUsuario(Clave Primaria), IDComunidad, Login, Pwd, Nivel) (perdona SurKaiser, se me olvidó que tenía la IDUsuario al poneros los datos :))
Ya tengo insertadas algunas comunidades sin problema y quiero crear los usuarios para estas comunidades. Los quiero crear a mano, no dejar que los usuarios se registren sino darles yo el Login y la Pwd de usuarios (son comunidades y no puedo permitir que los vecinos cambien o elijan esta Pwd sin informar a los demás).
Os pongo el código tal y como lo tengo (muy muy parecido a lo que tú me dices SurKaiser):
***insertar.php***
<?php
if ($_POST) {
$idcomunidad = abs(intval($_POST["idcomunidad"]));
$login = trim($_POST["login"]);
$pwd = encriptar($_POST["pwd"]);
$nivel = abs(intval($_POST["nivel"]));
if ($idcomunidad == null && $login != "" && $pwd != "" && $nivel == 1) {
$consulta = "insert into usuarios
(Login, Pwd, Nivel) values
('" . mysql_real_escape_string($login) . "',
'" . mysql_real_escape_string($pwd) . "',
'" . mysql_real_escape_string($nivel) . "')";
$resultado = mysql_query($consulta);
}
if ($idcomunidad != null && $login != "" && $pwd != "" && $nivel == 2) {
$consulta = "insert into usuarios
(IDComunidad, Login, Pwd, Nivel) values
('" . mysql_real_escape_string($idcomunidad) . "',
'" . mysql_real_escape_string($login) . "',
'" . mysql_real_escape_string($pwd) . "',
'" . mysql_real_escape_string($nivel) . "')";
$resultado = mysql_query($consulta);
} else {
$resultado = false;
}
}
$archivo = obtenerPlantilla($seccion);
if (file_exists($archivo)) {
require_once ($archivo);
}
?>
***insertar.tpl.php***
<?php if ($_POST): ?>
<?php if ($resultado): ?>
<p class="ok">
Registro insertado con éxito.
</p>
<?php else: ?>
<p class="nok">
Error al insertar registro.
</p>
<?php endif; ?>
<?php endif; ?>
<div id="formulario">
<form id="f" method="post" action="index.php?seccion=<?php echo $seccion; ?>">
<ol>
<li>
<label for="idcomunidad">Comunidad:</label>
<select id="idcomunidad" name="idcomunidad">
<?php while ($fila = mysql_fetch_assoc($resultado)): ?>
<option value="<?php echo $fila["IDComunidad"]; ?>"><?php echo $fila["Nombre"]; ?></option>
<?php endwhile; ?>
</select>
</li>
<li>
<label for="login">Login: *</label>
<input type="text" id="login" name="login" size="100" />
</li>
<li>
<label for="pwd">Contraseña: *</label>
<input type="text" id="pwd" name="pwd" size="100" />
</li>
<li>
<label for="nivel">Nivel: *</label>
<input type="text" id="nivel" name="nivel" size="100" />
</li>
<li>
<input class="btn" type="submit" value="Crear Nuevo Usuario" />
</li>
</ol>
</form>
</div>
***
Creo que el problema está en que me falta una consulta de selección pero por más que lo intento no consigo obyener los datos cruzados de las tablas.
Muchas gracias de antemano!!!
Sinceramente, no le veo el error... Si el problema que tienes es al sacar/leer los datos, entonces la consulta de SurKaiser debería funcionar: SELEC * FROM usuarios WHERE IDComunidad = X. Ahora, si quieres extraer todo de ambas tablas, entonces utiliza: SELECT * FROM usuarios, comunidades.
Saludos.
Gracias Skaparate, veré si haciendo el SELECT para todo de ambas tablas lo soluciono.
Si consigo dar con la solución os lo pondré para ver en qué ha quedado todo y saber donde está el fallo.
Saludos!