elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Me dan una idea con una codigo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Me dan una idea con una codigo?  (Leído 2,802 veces)
mark182


Desconectado Desconectado

Mensajes: 395


Ver Perfil WWW
Me dan una idea con una codigo?
« en: 15 Octubre 2010, 04:21 am »

Lo que estoy haciendo es mostrar nombres y apellidos desde una BD, y a continuacion un input tipo text para poner la nota de un examen a cada uno de los nombres. Todo esto en un formulario que apunta a otra web que validara las notas.

El problema: estoy mostrando todo con un while (nombres e input) por lo tanto los input tienen el mismo name y nose como diferenciarlos entre ellos y asociarlos a cada nombre y apellido.

Habia pensado poner un contador ($i) dentro del while para saber cuantos alumnos son y poner este contador como name del input (concatenar) pero no me dio resultado, o al menos no lo codie correctamente.

Les dejo el codigo:

Código:
<?php
                echo '<form action="validar-notas.php?r='.$i.'" enctype="multipart/form-data" method="post">
                    <div class="tit-registro">
                        <hr />
                    </div>
                    <div class="datos">';
                   
                       
                        $busq=$conexion->ejecutarQuery("SELECT id_alum,nombre,apellido FROM alumnos WHERE
                        colegio='$_POST[colegio]' ORDER BY apellido,nombre ASC");
                        $i=0;             
                        if( $_POST['colegio'] == "Pedro B. Palacios 1º (ESB)")
                        {
                          echo '<table>
                                    <thead>
                                        <tr>
                                            <th>Apellido y Nombre</th>
                                            <th>Nota</th>
                                        </tr>
                                    </thead>'; 
                          while($alumnos= $conexion->resultadoQuery($busq))
                          {                             
                             echo  '<tr>
                                       <td>'.$alumnos['apellido'].' '.$alumnos['nombre'].'</td>
                                       <td class="nota"><input type="text" name="'.$i.'" maxlength="2" /></td>
                                    </tr>';                             
                             $i++;                                                                                                                               
                          }
                          echo '</table>';
                           
                        }
                    ?>

Si necesitan mas detalles me avisan. Muchas gracias.


En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #1 en: 15 Octubre 2010, 05:24 am »

No entendí xD. Es decir, tienes que ingresar los nombres y notas o solo las notas?. De ser cualquiera de las dos opciones, donde esta la sentencia INSERT?


En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #2 en: 15 Octubre 2010, 17:48 pm »

Puesto que seleccionas en el query el id_alum y suponinedo que es un auto_increment podrias poner de nombre al input ese id.
Código
  1. <td class="nota"><input type="text" name="'.$alumnos['id_alum'].'" maxlength="2" /></td>


Saludos
En línea

mark182


Desconectado Desconectado

Mensajes: 395


Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #3 en: 16 Octubre 2010, 22:46 pm »

bien drvy | BSM algo asi habia pensado. Lo voy a probar y cualquier cosa vuelvo a molestar  ;D. Gracias
En línea

mark182


Desconectado Desconectado

Mensajes: 395


Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #4 en: 19 Octubre 2010, 02:40 am »

Estuve probando el codigo de drvy | BSM  pero la verdad que nose como puedo ase para diferenciar cada input en la pagina de validacion de los mismos. Me dan una idea?
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #5 en: 19 Octubre 2010, 15:28 pm »

Veras, según lo que entiendo primero les imprimes y luego apuntas a otra web para validarlos. La pregunta que tengo es como los validas ? me refiero. Que es lo que haces para validar que validas y todo eso.

Darte una idea ? hmm

ya que tienes el id_alum puesto de nombre al input podrías luego al enviar los datos buscar con una query si es id existe y tal. El problema es que no se exactamente lo que validas y para que lo haces entonces como mucho te doy un ejemplo que se me ocurre xD

pagina_imprime_notas.php
Código
  1. <?php
  2. // conexion base de datos "test"
  3. $conx = mysql_connect('localhost','root','');
  4. mysql_select_db('test',$conx);
  5.  
  6. // suponiendo que en la base de datos tengo 4 campos "id_alumn,nombre,apellido y nota"
  7. $resultado = mysql_query('SELECT * FROM alumnos ORDER BY id_alum');
  8.  
  9. // imprimo la tabla y el formulario
  10. print '<form action="validar.php" method="POST">';
  11. print '<table border="1">';
  12. print '<tr><th>Nombre</th><th>Apellido</th><th>Nota</th>';
  13.  
  14.  
  15. // saco los datos
  16. while($alumno = mysql_fetch_array($resultado))
  17.  {
  18. print '<tr><td>'.$alumno['nombre'].'</td>';
  19. print '<td>'.$alumno['apellido'].'</td>';
  20. print '<td><input type="text" name="notaalumno[]" value="'.$alumno['nota'].'">';
  21. print '<input type="hidden" name=idalumno[]" value="'.$alumno['id_alum'].'"></td></tr>';
  22.  }
  23.  
  24. // cierro la tabla y el formulario
  25. print '</table>';
  26. print '<hr><input type="submit" value="Validar"></form>';
  27.  
  28.  
  29. // cierro conexion mysql
  30. mysql_close($conx);
  31. ?>

validar.php
Código
  1. <?php
  2. // conexion base de datos "test"
  3. $conx = mysql_connect('localhost','root','');
  4. mysql_select_db('test',$conx);
  5.  
  6. if(isset($_POST['notaalumno']) && isset($_POST['idalumno']))
  7. {
  8. $i = 0;
  9. $cnt = count($_POST['idalumno']);
  10. while ($i < $cnt)
  11. {
  12. // imprimo ID del alumno
  13. print 'ID = '.$_POST['idalumno'][$i];
  14.  
  15. // imprimo NOTA del alumno obtenida mediante POST
  16. print ' NOTA = '.$_POST['notaalumno'][$i];
  17.  
  18. // compruebo si la nota es = que la de la base de datos
  19. // obtengo la nota asociada al ID del alumno enviado mediante POST
  20. $query = mysql_query('Select nota FROM alumnos WHERE id_alum ='.$_POST['idalumno'][$i]);
  21. $nota = mysql_fetch_array($query);
  22. print ' VALIDA? =';
  23. // en caso de valida imprime "Si" si no imprime "No"
  24. if($nota['nota'] == $_POST['notaalumno'][$i]) {print '<b>Si</b>';} else {print '<b>No</b>';}
  25. print '<br>';
  26. $i++;
  27. }
  28.  
  29. }
  30. // cierro conexion mysql
  31. mysql_close($conx);
  32. ?>

Lo que hace es poner un campo oculto que almacena el ID del alumno. Se puede mejorar y la seguridad es muy baja pero es solo pa que te sirva de referencia.


Saludos

En línea

mark182


Desconectado Desconectado

Mensajes: 395


Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #6 en: 19 Octubre 2010, 16:40 pm »

Gracias por tu respuesta, lo que quiero validar es la nota (que sea del 1 al 10, que no sean letras, y en el caso que sea una letra, que sea una A unicamente). O sea, la nota la va a poner el usuario, no es un dato sacado de una base de datos. Por eso, necesito validarlo y guardarlo en una BD, y que cada nota este asociada al nombre y apellido que aparecen (que eso si esta sacado de una BD). Se entiende maso menos?

En tu ejemplo no entiendo porque pones de name un vector y luego cuando lo capturas con post no lo pones como vector. Por ejemplo:

Código:
print '<input type="hidden" name=idalumno[]" value="'.$alumno['id_alum'].'"></td></tr>';

Código:
 isset($_POST['idalumno'])
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Me dan una idea con una codigo?
« Respuesta #7 en: 19 Octubre 2010, 19:33 pm »

Lo pongo porque asi tendria varios campos con el mismo nombre pero en forma de array que podre recuperar facilmente luego.
Código
  1. <?php
  2. // conexion base de datos "test"
  3. $conx = mysql_connect('localhost','root','');
  4. mysql_select_db('test',$conx);
  5.  
  6. if(isset($_POST['notaalumno']) && isset($_POST['idalumno']))
  7. {
  8. // definir $i como 0.
  9. $i = 0;
  10. // contar todos los inputs con nombre "idalumno"
  11. $cnt = count($_POST['idalumno']);
  12.  
  13. // mientras $i es menor a los inputs "idalumno" hacer while
  14. while ($i < $cnt)
  15. {
  16. // permitir solo 2 numeros o letra A.
  17. $regex = '/[a-zB-Z \/\'"]/';
  18. $nota = preg_replace($regex,'',substr($_POST['notaalumno'][$i],0,2));
  19.  
  20. // permitir solo numeros
  21. $alumno = (int)$_POST['idalumno'][$i];
  22.  
  23. // insertar en base de datos
  24. $query = mysql_query("UPDATE alumnos SET nota = '".$nota."' WHERE id_alum = ".$alumno);
  25.  
  26. // sumar +1
  27. $i++;
  28.  
  29. // imprimir
  30. print 'La nota del alumno con <b>ID</b>: '.$alumno.' ha sido actualizada.<br />';
  31. }
  32. }
  33.  
  34. // cierro conexion mysql
  35. mysql_close($conx);
  36. ?>

creo que esto es mas o menos lo que pides no ?

PD: La pagina inicial seria la misma excepto que
Código
  1. print '<td><input type="text" name="notaalumno[]" value="'.$alumno['nota'].'">';
seria
Código
  1. print '<td><input type="text" name="notaalumno[]" value="">';

Saludos
« Última modificación: 19 Octubre 2010, 19:37 pm por drvy | BSM » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines