Ayuda con Consulta.

Iniciado por royerphpmysql, 19 Marzo 2010, 22:16 PM

0 Miembros y 1 Visitante están viendo este tema.

royerphpmysql

El alumno  ALMANZA MAURICIO de matricula: 91901014429 obtuvo las siguiente calificaciones:
Codigo de Materia: M12 | Calificacion: 70
Codigo de Materia: M11 | Calificacion: 90
Codigo de Materia: M10 | Calificacion: 80
Codigo de Materia: M10 | Calificacion: 90


jajajajajajajjaa ya jaloooooooo gracias a todosss los quieroooo

^Tifa^

Gracias a Skeletron por aportar codigo funcional  ;)   ;)   ;)

Skeletron

Perfecto tio...
Cualquier otra cosita, grita! :)


Cya!!

royerphpmysql

Skeletron tengo otra bronca D: D: espeor no te molestes.

fijate que quiero filtrar la consulta por matricula y hago una pregunta asi.

<form action="consultasola.php" method="post">
   <div align="left">
     <h1 align="center">Consulta de Calificaciones</h1>
     <p> <br>
       Matricula del Alumno:
       <input name="matricula" type="text" id="matricula" size="17">
       <input type=submit name="Buscar" value="Buscar">
       </p>
   </div>
   <td><div align="center">
     <h3><a href="entra.php">Retornar al Men&uacute; Principal </a></h3>
     <p>&nbsp;</p>
     <p>Tarea Sistema de Administracion de Alumnos</p>
   </div>
   </form>


y el otro programa qe se llama consultasola.php est asi

   // Conectar con el servidor de base de datos
      $conexion = mysql_connect ("localhost", "root", "root")
         or die ("No se puede conectar con el servidor");

   // Seleccionar base de datos
      mysql_select_db ("escuela")
         or die ("No se puede seleccionar la base de datos");

   // Obtener datos
$matricula= $_REQUEST['matricula']; <---------aqui tambien utilice el GET y me sigue mostrando el resultado anterior, le puse el POST y tampoco me lo aceptal


   
       $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula");

       $row=mysql_fetch_array($res); //hago esto, para poder tomar el nombre antes de entrar al WHILE.
       echo "El alumno ".$row['nombres']." ".$row['apellidos']." y con  Matricula: ".$row[matricula]." obtuvo las siguientes calificaciones:</br>";

         while($row=mysql_fetch_array($res)){   
         
         echo "Materia: ".$row['codigomateria']." | Calificacion: ".$row['calif1A']."</br>";


       }
echo "<ul> </ul>";

      
              echo "<ul> </ul>";
       echo "<td><div align=left><a href=entra.php>Retornar al Menú Principal</a></div></td>";

no me acepta leer una variable de afuera.


royerphpmysql

le puse el trim

trim ($matricula);
if (!$matricula || !$matricula)
{
echo "Campo de búsqueda vacío . Inténtalo de nuevo. ";
exit;

pero no me funciono nomas me sale la primer matricula

Skeletron

Bien tio... Por lo que vemos, te falta mucho de PHP.. Pero no te preocupes.. PHP es facil de aprender.. Si sigues tocando mucho, aprenderas rapido..

La primer pagina esta perfecta..
Pero la 2º (la de la consulta) esta mal..

SI lo que tu quieres, es filtrar las consultas por una matricula especifica, entonces, los cambios no tienen que ser en el codigo, sino, solamente en la consulta SQL...

Tu tienes ésto:
Código (php) [Seleccionar]
// Obtener datos
$matricula= $_REQUEST['matricula'];
 
      $res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula");


Primero, borra: $_REQUEST['matricula'] <<<< no es necesario

Y luego, hay que hacer los cambios en el SQL...
Si esa consulta devuelve todas las matriculas por alumnos, simplemente le tienes que agregar al WHERE, lo siguiente:
AND alumno.matricula=".$_POST['matricula']
Para que quede así:

     
Código (php) [Seleccionar]
$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula AND alumno.matricula=".$_POST['matricula']);

OJO...
Supongamos que alguien, en el campo de MATRICULA, en vez de escribir un numero de matricula, escribe un codigo SQL...
Por ejemplo:
'' UNION XXXXXXXXXXXXXXXXXX
La consulta SQL se trasformaría a un ataque contra tu base de datos...
Tienes que leer en que consiste el ataque: SQL INYECTION.
Una vez que entiendas como es, y en que consiste (que es MUY FACIL DE ENTENDER), querras saber como se evita ese tipo de ataques, y es muy facil:
Agrega a cada variable que coloques dentro de la sentencia SQL, lo siguiente:
mysql_real_escape_string()

Para que quede así:

Código (php) [Seleccionar]
$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria FROM alumnos, kardex WHERE kardex.matricula=alumnos.matricula AND alumno.matricula=".mysql_real_escape_string($_POST['matricula']));




Y tio... ahora que lo pienso:
El primer codigo que te dí de PHP, ese funcionaba cuando solo habia 1 alumnos en tu base de datos... ya que tampoco filtrabamos nombrs de alumnos,, ni nada de eso...
Y efectivamente, éste es el codigo correcto ;)


Un placer ayduarte..
Si el codigo no te funciona, o sigues teniendo dudas, tu sigue preguntando

royerphpmysql

que onda amigo.

quedo asi.

$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria, kardex.fechacalif FROM alumnos INNER JOIN kardex ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula = $matricula");


donde desde otro formulaio pregunt por la matricula. y ya me da la matricula queyo quiero..

efectivamente me falta mas en php y mysql y aqui aprendere mucho con ustedes, muchas gracias ahora lo que voy a hacer es acomodr los echo en una tabla o determinada parte con un formato.

royerphpmysql

no viene adjunto el codigo de las 2 post anteriores tuyos.

Skeletron

Mira, ese codigo que te di ultimo, es lo que debes reemplazarle a todo el codigo anterior, para que funcione bien POR MATRICULA...
Entiendes?

Tu ingresas la matricula en la pagina xxx.php la cual tiene un form que dirije a yyy.php..
en yyy.php tienes que tener lo anterior, ese while($row=....) que te he dado, en reemplazar la cadena mysql_query() por lo que te dí ahí...

Digamos que tiene que quedar así:

Código (php) [Seleccionar]

$res=mysql_query("SELECT alumnos.nombres, alumnos.apellidos, alumnos.matricula, kardex.calif1A, kardex.codigomateria, kardex.fechacalif FROM alumnos INNER JOIN kardex ON kardex.matricula=alumnos.matricula WHERE alumnos.matricula =".$_POST['matricula']);

$row=mysql_fetch_array($res) //hago esto, para poder tomar el nombre antes de entrar al WHILE.

echo 'El alumno '.$row['apellido'].' '.$row['nombre'].' de matricula: '.$row[matricula].' obtuvo las siguiente calificaciones:</br>';

echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calificacion'].'</br>';

while($row=mysql_fetch_array($res)){

   echo 'Codigo de Materia: '.$row['codigomateria'].' | Calificacion: '.$row['calificacion'].'</br>';

}


royerphpmysql

yessss muchas gracias señor ya pude...