Me dan una idea con una codigo?

Iniciado por mark182, 15 Octubre 2010, 04:21 AM

0 Miembros y 2 Visitantes están viendo este tema.

mark182

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:


<?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.

Shell Root

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?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

#!drvy

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 (php) [Seleccionar]
<td class="nota"><input type="text" name="'.$alumnos['id_alum'].'" maxlength="2" /></td>


Saludos

mark182

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

mark182

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?

#!drvy

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 (php) [Seleccionar]
<?php
// conexion base de datos "test"
$conx mysql_connect('localhost','root','');
mysql_select_db('test',$conx);

// suponiendo que en la base de datos tengo 4 campos "id_alumn,nombre,apellido y nota"
$resultado mysql_query('SELECT * FROM alumnos ORDER BY id_alum');

// imprimo la tabla y el formulario
print '<form action="validar.php" method="POST">';
print 
'<table border="1">';
print 
'<tr><th>Nombre</th><th>Apellido</th><th>Nota</th>';


// saco los datos
while($alumno mysql_fetch_array($resultado))
  {
print '<tr><td>'.$alumno['nombre'].'</td>';
print '<td>'.$alumno['apellido'].'</td>';
print '<td><input type="text" name="notaalumno[]" value="'.$alumno['nota'].'">';
print '<input type="hidden" name=idalumno[]" value="'.$alumno['id_alum'].'"></td></tr>';
  }

// cierro la tabla y el formulario
print '</table>';
print 
'<hr><input type="submit" value="Validar"></form>';


// cierro conexion mysql
mysql_close($conx);
?>


validar.php
Código (php) [Seleccionar]
<?php
// conexion base de datos "test"
$conx mysql_connect('localhost','root','');
mysql_select_db('test',$conx);

if(isset(
$_POST['notaalumno']) && isset($_POST['idalumno']))
{
$i 0;
$cnt count($_POST['idalumno']);
while ($i $cnt)
{
// imprimo ID del alumno
print 'ID = '.$_POST['idalumno'][$i];

// imprimo NOTA del alumno obtenida mediante POST
print ' NOTA = '.$_POST['notaalumno'][$i];

// compruebo si la nota es = que la de la base de datos
// obtengo la nota asociada al ID del alumno enviado mediante POST
$query mysql_query('Select nota FROM alumnos WHERE id_alum ='.$_POST['idalumno'][$i]);
$nota mysql_fetch_array($query);
print ' VALIDA? =';
// en caso de valida imprime "Si" si no imprime "No"
if($nota['nota'] == $_POST['notaalumno'][$i]) {print '<b>Si</b>';} else {print '<b>No</b>';} 
print '<br>';
$i++;
}

}
// cierro conexion mysql
mysql_close($conx);
?>


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


mark182

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:

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

isset($_POST['idalumno'])

#!drvy

#7
Lo pongo porque asi tendria varios campos con el mismo nombre pero en forma de array que podre recuperar facilmente luego.
Código (php) [Seleccionar]
<?php
// conexion base de datos "test"
$conx mysql_connect('localhost','root','');
mysql_select_db('test',$conx);

if(isset(
$_POST['notaalumno']) && isset($_POST['idalumno']))
{
// definir $i como 0.
$i 0;
// contar todos los inputs con nombre "idalumno"
$cnt count($_POST['idalumno']);

// mientras $i es menor a los inputs "idalumno" hacer while
while ($i $cnt)
{
// permitir solo 2 numeros o letra A.
$regex '/[a-zB-Z \/\'"]/';
$nota preg_replace($regex,'',substr($_POST['notaalumno'][$i],0,2));

// permitir solo numeros
$alumno = (int)$_POST['idalumno'][$i];

// insertar en base de datos
$query mysql_query("UPDATE alumnos SET nota = '".$nota."' WHERE id_alum = ".$alumno);

// sumar +1
$i++;

// imprimir
print 'La nota del alumno con <b>ID</b>: '.$alumno.' ha sido actualizada.<br />'
}
}

// cierro conexion mysql
mysql_close($conx);
?>


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

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

Saludos