Duda sobre select en php

Quisiera saber como hacer para que con un select dentro de un bucle while, el cual sería uno por cada registro de una tabla que contiene informaciuón de personas, cada vez que yo elija una opción de ese select me referencie a un registro en particular. En nuestro caso el select tiene el mismo nombre en todo los registros ya que el mismo esta el el bucle, ahora nuestro problema es que al presionar una opción del select que se encuentra en el segundo y tercer registro, comienza tomando del primer registro y del segundo . Nosotros tenemos al select como un array y no sabemos como hacer. Esperamos haber sido claras, y obtener la respuesta en la brevedad posible, desde ya muchas gracias.
Acá va la parte del código a la cual nos referimos, el select se encuentra casi al final.
<form name="form2" method="post" action="registration.php">
<table align="left" border=1 width="80%">
<tr><th>SURNAME<th>NAME<th><th>Forum<th>Role</tr>
<?php
$consulta = "SELECT * FROM contact ";
$tabla = mysql_query($consulta,$link);
while($fila = mysql_fetch_row($tabla)){
?>
<tr>
<td height="42">
<a href="index.html"><?php printf($fila[2]); ?></a>
<td height="42">
<?php printf($fila[1]); ?>
<td height="42">
<input type="checkbox" name="selection[]" value="<?php echo $fila[12];?>" onClick=" var valor2=control(window.document.form2.select,window.document.form2.radio1); ">
<td height="42">
<select name="foro[]" value="" > <?php $consulta5 = "SELECT distinct forum_name
FROM forum, grupo where grupo.id_forum=forum.id_forum ";
$tabla5 = mysql_query($consulta5,$link) or die("falla la consulta");
while($fila5 = mysql_fetch_row($tabla5)){?>
<option><?php printf($fila5[0]);?> </option> <?php } ?>
</select>
<td height="42">
<select name="rol[]" value="">
<?php $consulta6 = "SELECT role_type
FROM role where id_role=2 or id_role=3 ";
$tabla6 = mysql_query($consulta6,$link) or die("falla la consulta");
while($fila6 = mysql_fetch_row($tabla6)){?>
<option><?php printf($fila6[0]);?> </option> <?php } ?>
</select>
</tr>
<?php }?>
</table>
<table align="center" width="40%">
<tr>
<input type="submit" value="Select" name="select" >
</tr>
</table>
</form>

1 Respuesta

Respuesta
1
No me he enterado bien cual es el problema.
Para crear el select puedes usar su atributo ID de la siguiente forma:
<select name="foro[]" value="" ID = 'foro[]'>
Luego para saber qué opción está seleccionada mediante JavaScript tienes que usar:
ele = document.getElementById( 'foro[]' );
seleccionado = ele.selectedIndex);
Si necesitas saberlo desde php usa lo siguiente:
$seleccionado = $_POST['foro'][0];
Esto te devuelve el contenido, y no un índice. Es decir te devolverá la palabra que ha seleccionado el usuario en vez del número de opción que ocupa dentro del select como hace selectedIndex.
Nuestro planteo es el siguiente, tenemos un while que surge de hacer una consulta a la base de datos, o sea es una while que recorre todos los registros de una tabla. Ahora nosotros por cada registro tenemos un select, el cual esta dentro de un while, para poder así imprimir uno por registro, la cuestión es que dentro de ese while tenemos <select name="foro[]" value=""> y entonces se imprimiría el mismo select para todos los registros. Ahora bien si nosotros seleccionamos una opción, por ejemplo, una opción para el select que se corresponde con el segundo registro y una opción para el select que se corresponde con el tercer registro, pero para el select del primer registro no hacemos nada, o sea queda por defecto el valor que tiene, entonces nos toma ese valor en vez de tomarnos desde el segundo registro como quisiéramos.
La operatoria seria así por cada registro, selecciono mediante un checkbox al registro que quiero, y entonces al select que se corresponde a ese registro le marco la opción, y así con todos los registros que yo quiera, como hacer entonces que ese registro seleccionado se corresponda con la opción del select que marco para ese registro.
Sabemos que si por cada registro hay un select con nombre diferentes, no habría problema, pero en este caso como el mismo esta en un bucle nuestro select tiene el mismo nombre para todos los registros.
Acá va la parte del código. El checkbox selección es para marcar el registro que queremos y los select foro[] y rol[], es con los cuales estamos teniendo el problema planteado.
<form name="form2" method="post" action="">
<table align="left" border=1 width="80%">
<tr><th>SURNAME<th>NAME<th><th>Forum<th>Role</tr>
<?php
$consulta = "SELECT * FROM contact ";
$tabla = mysql_query($consulta,$link);
$nro='aa';
$nro1='bb';
while($fila = mysql_fetch_row($tabla)){
?>
<tr>
<td height="42">
<a href="index.html"><?php printf($fila[2]); ?></a>
<td height="42">
<?php printf($fila[1]); ?>
<td height="42">
<input type="checkbox" name="selection[]" value="<?php echo $fila[12];?>" onClick=" var valor2=control(window.document.form2.select,window.document.form2.radio1); ">
<td height="42">
<select name="foro[]" value="" ID='foro[]'> <?php $consulta5 = "SELECT distinct forum_name
FROM forum, grupo where grupo.id_forum=forum.id_forum ";
$tabla5 = mysql_query($consulta5,$link) or die("falla la consulta");
while($fila5 = mysql_fetch_row($tabla5)){?>
<option><?php printf($fila5[0]);?> </option> <?php } ?>
</select>
<td height="42">
<select name="rol[]" value="" ID='rol[]'>
<?php $consulta6 = "SELECT role_type
FROM role where id_role=2 or id_role=3 ";
$tabla6 = mysql_query($consulta6,$link) or die("falla la consulta");
while($fila6 = mysql_fetch_row($tabla6)){?>
<option><?php printf($fila6[0]);?> </option> <?php } ?>
</select>
</tr>
<?php }?>
</table>
<table align="center" width="40%">
<tr>
<input type="submit" value="Select" name="select" >
</tr>
</table>
</form>
Como son arrays, cada uno tiene que tener el mismo nombre pero distinto índice. Solo te falta ponerle el índice y te funcionará. El siguiente código te puede ayudar. No lo pongo completo, solo las modificaciones que tienes que realizar sobre el tuyo. Los puntos suspensivos son líneas de tu código que me salto:
$indice = 0;
while($fila = mysql_fetch_row($tabla)){
?>
...
<input type="checkbox" name="selection[$indice]" value="<?php echo $fila[12];?>" onClick=" var valor2=control(window.document.form2.select,window.document.form2.radio1); ">
<td height="42">
<select name="foro[$indice]" value="" ID='foro[$indice]'> ...
<select name="rol[$indice]" value="" ID='rol[$indice]'>
...
Ahora para acceder a cada elemento del formulario puedes usar lo siguiente.
- Para acceder a los select:
$numCheckBoxes = count($_POST['selection']);
$select0 = $_POST['selection'][0];
$select1 = $_POST['selection'][1];
- Para acceder a los select foro y rol usa lo mismo:
$numSelectsForo = count($_POST['foro']);
$foro1 = $_POST['foro'][1];
$numSelectsRol = count($_POST['rol']);
$rol3 = $_POST['rol'][3];
Te he puesto solo ejemplos de cómo acceder a esos select. Ahora tienes que adaptarlo a tu código. Con count obtienes el número de elementos, es decir, el número de selects de cada tipo creados por el while. Eso te ayuda a recorrerlos. Solo tienes que ver si el elemento del array selection tiene un valor indicando que se ha seleccionado, y luego leer el correspondiente select.
Si necesitas más, dime cómo quieres acceder a esos select.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas