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.
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?
Puesto que seleccionas en el query el id_alum y suponinedo que es un auto_increment podrias poner de nombre al input ese id.
<td class="nota"><input type="text" name="'.$alumnos['id_alum'].'" maxlength="2" /></td>
Saludos
bien drvy | BSM algo asi habia pensado. Lo voy a probar y cualquier cosa vuelvo a molestar ;D. Gracias
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?
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
<?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
<?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
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'])
Lo pongo porque asi tendria varios campos con el mismo nombre pero en forma de array que podre recuperar facilmente luego.
<?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
print '<td><input type="text" name="notaalumno[]" value="'.$alumno['nota'].'">';
seria
print '<td><input type="text" name="notaalumno[]" value="">';
Saludos