Foros del Web » Programando para Internet » PHP »

Consulta a tablas con campos comunes

Estas en el tema de Consulta a tablas con campos comunes en el foro de PHP en Foros del Web. Hola: Me pidieron un codigo que, por lo que me he documentado, debe ser algo asi: Tabla estudiantes: id cedula nombre fecha_nac telefono Tabla materias: ...
  #1 (permalink)  
Antiguo 13/04/2005, 21:16
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 15 años
Puntos: 0
Consulta a tablas con campos comunes

Hola:

Me pidieron un codigo que, por lo que me he documentado, debe ser algo asi:

Tabla estudiantes:
id
cedula
nombre
fecha_nac
telefono

Tabla materias:
id
materia

Tabla notas:
id
cedula
materia
nota
año
periodo
semestre


La idea es que el estudiante se encuentra una pagina con un form de usuario y password, al ingresar correctamente se encuentra con una pagina donde se le muestran sus materias con notas, semestre, año, etc

Hasta ahora, ya funciona el ingreso del usuario por medio de php y cookies, tambien los form para ingresar datos a la base de datos (no hice las tablas "relacionadas" porque siempre arrojaba error y no se como ingresar datos a varias tablas a la vez, mucho menos si se relacionan entre si), son tres form, uno para cada tabla.

Lo que no se hacer es usar correcatmente el famoso INNER JOIN con las tres tablas o con dos, no lo se. Se supone que lo que se va a mostrar es la informacion de las tablas "materias" y "notas", pero de la persona que ingreso con su clave, el mismo de la tabla "estudiantes" donde el campo comun es "cedula"

Coloco los codigos para mejor entender...

El formulario de ingreso:
Código HTML:
<form name="estudiante" method="post" action="ingreso.php">
                      <table width="390" border="0" cellspacing="0" cellpadding="2">
                        <tr class="general">
                          <td width="167"><div align="right">Estudiante</div></td>
                          <td width="4">&nbsp;</td>
                          <td width="198"><div align="left">
                            <input name="nombre" type="text" id="nombre">
                          </div></td>
                        </tr>
                        <tr class="general">
                          <td width="167"><div align="right">C&oacute;digo</div></td>
                          <td width="4">&nbsp;</td>
                          <td width="198"><div align="left">
                            <input name="cedula" type="password" id="cedula">
                          </div></td>
                        </tr>
                        <tr class="general">
                          <td colspan="3">&nbsp;</td>
                          </tr>
                        <tr class="general">
                          <td colspan="3"><div align="center">
                            <input type="submit" name="Submit" value="Ingresar">
                          </div></td>
                          </tr>
                      </table>
                    </form> 

Ahora, ingreso.php
Código PHP:
<?php 
include ("config.php"); 

function 
quitar($mensaje

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","&#92",$mensaje); 
return 
$mensaje


if(
trim($HTTP_POST_VARS["nombre"]) != "" && trim($HTTP_POST_VARS["cedula"]) != ""

$nickN quitar($HTTP_POST_VARS["nombre"]); 
$passN quitar($HTTP_POST_VARS["cedula"]); 

$result mysql_query("SELECT cedula FROM estudiantes WHERE nombre='$nickN'"); 
if(
$row mysql_fetch_array($result)) 

if(
$row["cedula"] == $passN
{  
?>  
<SCRIPT LANGUAGE="javascript"> 
location.href = "informacion.php"; 
</SCRIPT> 
<? 

else 

?>  
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 


else 

?>  
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 

mysql_free_result($result); 

else 

?>  
<SCRIPT LANGUAGE="javascript"> 
location.href = "error.php"; 
</SCRIPT> 
<? 

mysql_close(); 
?>
***Es un codigo ya reusado por mi y si le quito los dos enlaces de error que estan, no me funciona el codigo***


Ahora, login.php (nunca tuve muy claro su uso):
Código PHP:
<?php 
$loginCorrecto 
false
$idUsuarioL
$nickUsuarioL
$fechaUsuarioL
$telefonoUsuarioL
if(isset(
$HTTP_COOKIE_VARS["usNick"]) && isset($HTTP_COOKIE_VARS["usPass"])) 

$result mysql_query("SELECT * FROM estudiantes WHERE nombre='".$HTTP_COOKIE_VARS["usNick"]."' AND cedula='".$HTTP_COOKIE_VARS["usPass"]."'"); 

if(
$row mysql_fetch_array($result)) 

setcookie("usNick",$HTTP_COOKIE_VARS["usNick"],time()+7776000); 
setcookie("usPass",$HTTP_COOKIE_VARS["usPass"],time()+7776000); 
$loginCorrecto true
$idUsuarioL $row["id"]; 
$nickUsuarioL $row["nombre"]; 
$fechaUsuarioL $row["fecha_nac"]; 
$telefonoUsuarioL $row["telefono"]; 

else 

//Destruimos las cookies. 
setcookie("usNick","x",time()-3600); 
setcookie("usPass","x",time()-3600); 

mysql_free_result($result); 

?>
Luego, debo ir si es correcto el login, a una pagina informacion.php que es en donde debo mostrar los datos de materi, nota, semestre, etc (esa pagina incluye en su parte superior lo siguiente:
Código PHP:
<?
include ("config.php");
include (
"login.php");
?>
donde config. php es la conexion a la base de datos

Espero puedan ayudarme, gracias
  #2 (permalink)  
Antiguo 13/04/2005, 22:07
 
Fecha de Ingreso: abril-2005
Ubicación: Montevideo, Uruguay
Mensajes: 102
Antigüedad: 12 años, 8 meses
Puntos: 0
La verdad que es media grande la pregunta, y además suena por lo que decís a que reutilizás código de PHP pero mucha mano no le metés. No sé si en este foro se estila dar respuestas muy largas, porque prácticamente habría que hacerte todo el código de los inserts y las consultas, revisar el código ya existente, y de paso darte un curso.

Para hacer insterts en todas las tablas, vas a hacer INSERTS en cada una a la vez, simplemente asignando correctamente la clave foranea del elemento al que querés vincular el renglón nuevo que estás insertando. Por ejemplo, si vas a insertar una nota, indicando el id de la materia.

Hablemos de las tablas primero que nada y vemos como vá el caso.

Me parece que tenés algunas redundancias en las tablas que son para problemas.

Por ejemplo, no entiendo para qué en la tabla notas pusiste "cedula" y "materia", si a su vez estás usando campos id, que asumo son campos autoincrementados para identificar a cada elemento, en este caso el estudiante y la materia.

Según lo que infiero del ejemplo, me parece que las tablas sin redundancias quedarían así:

Tabla estudiantes:
id
cedula
nombre
fecha_nac
telefono

Tabla materias:
id
materia

Tabla notas:
id
id_estudiante
id_materia
nota
anno
periodo
semestre


Fijate que un campo no puede llevar la letra ñ, así que año debería ser anno , ano o alguna palabra menos relativa al recto que se te ocurra.

Por ahí podríamos empezar.

¿Cómo andan el login.php y el ingreso.php? Ahora no me da para leer esa chorrera de código.

Saludos!
__________________
Mauricio Etcheverry

WebMaster de YoReparo.com
  #3 (permalink)  
Antiguo 13/04/2005, 23:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 15 años
Puntos: 0
Hola y gracias por responder...

De meterle mano, si lo hago y mucho, pero apenas ya domino las cosas basicas como un buscador, un pequeño directorio y consultas sencillas (insertar, borrar, modificar etc)

Sinceramente debo reconocer que las sesiones, tablas relacionadas y demás avances me quedan grandes... seguire aprendiendo de los sabios consejos que pueda recibir de aquí.

Con el codigo anterior ya me dio respuesta sin errores, el problema es hacer que me las respuestas "solo" de quien ingreso con usuario y password.

El archivo informacion.php (donde debe salir la respuesta a la consulta) lo estoy manejando asi:

Código PHP:
<?
include ("config.php");
include (
"login.php");

$sql="SELECT * FROM estudiantes INNER JOIN (notas INNER JOIN materias ON notas.materia = materias.materia) ON estudiantes.cedula = notas.cedula"
$result=mysql_query($sql);

while(
$row=mysql_fetch_array($result)) 
{
 
echo 
"<div align='left'>";
if (!empty(
$row[materia])){
echo 
"".$row[materia]."<br><br>";
}
if (!empty(
$row[nota])){
echo 
"".$row[nota]."<br><br>";
}
if (!empty(
$row[ano])){
echo 
"".$row[ano]."<br><br>";
}
if (!empty(
$row[periodo])){
echo 
"".$row[periodo]."<br><br>";
}
if (!empty(
$row[semestre])){
echo 
"".$row[semestre]."<br><br>";
}
}
}
?>
Asi va perfecto, solo que por supuesto me muestra todos los campos de "todos" los estudiantes.

Ahora, si le coloco antes de la consulta algo asi:
Código PHP:
if (isset($_POST['cedula'])){ 
y realizo la misma asi:
Código PHP:
$sql="SELECT * FROM estudiantes INNER JOIN (notas INNER JOIN materias ON notas.materia = materias.materia) ON estudiantes.cedula = notas.cedula WHERE cedula='".$_POST['cedula']."' 
Entonces no me muestra nada. Mis pocos conocimientos me dicen que algo asi debo hacer para indicarle al codigo que son los datos de a quien pertenezca la cedula que me traigo del formulario.

gracias
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 15:10.