![]()
Algunas veces necesitamos listar elementos que ya se encuentran en la base de datos y los queremos dar de alta en otra tabla mediante checkbox; por ejemplo, necesitamos dar de alta un alumno y los idiomas que conoce.
Previamente tendriamos que tener cargada una tabla en la DB:
- nombre tabla: tabla_idiomas
- formada por los campos: id_idioma, nom_idioma
y una tabla creada para cargar los datos nuevos:
- nombre tabla: alumno_idiomas
- formada por los campos: id_alu, nom_alu, id_idioma
Ahora veamos como mostrar ese listado de idiomas y dar de alta uno o varios de ellos, para un alumno en particular. Recuerden de realizar antes la conexion a la DB (demostrado en post anterior).
Archivo: alta_checkbox.php
//Conexion a la DB
include(conexion.php);
//Formulario donde ingresa el alumno y los idiomas que conoce
echo "<form name='form_alta' action='' method='post'><table>";
echo "<input type='text' name='alumno'/>";
//Consulta tabla_idiomas
$consulta = mysql_query('SELECT * FROM `tabla_idiomas` ');
//Guardo los idiomas en un arreglo para mostrarlos de forma ordenada
$arreglo = array();
$items_por_linea = 2;
while( $row = mysql_fetch_row( $consulta ) ) {
array_push( $arreglo, $row );
}
//Imprime
$i=0;
for( $j= 0; $j < count($arreglo); $j++ )
{
$ididioma = $arreglo[$j][0];
$nomidioma = $arreglo[$j][1];
if( $j % $items_por_linea == 0 ) print '<tr>';
echo "<td align='left'><input name='.$i.' type='checkbox' value='.$ididioma ; if($_POST[$i]) {echo "checked";} />".$nomidioma."</td>";
$i++;
if( ($j + 1) % $items_por_linea == 0 ) print '</tr>';
}
//En campo oculto guardo la cantidad de registros que fueron tildados
echo "<input type='hidden' name='numerototal' value='.$i.' id='numerototal'/>";
echo "</table><input type="button" onclick="return verificar()" value="Enviar" name="btenviar" /></form>";
Antes de que se envien los datos al archivo guardar_datos.php, controlaremos en JavaScript, como en el alta realizada el post anterior, que todos los datos solicitados sean ingresados.
function verificar()
{
//Verifica si marco algun checkbox
contador=0;
form = document.forms["form_alta"]
for(i = 0; i < form.elements.length; i++)
{
if(form.elements[i].type == "checkbox")
if(form.elements[i].checked) contador++
}
if(contador==0) alert('Marque una opción en Idiomas.');
else{
document.form_alta.action="guardar_datos.php";
document.form_alta.submit();
}
}
Luego de completar el formulario y presionar el boton Enviar, sucede lo siguiente:Archivo: guardar_datos.php
//Conexion a la Base de Datos
include ("conexion.php");
$alumno=$_POST['alumno'];
//Verifica los idiomas seleccionados
$numerototal = $_POST['numerototal'];
for ($i = 0; $i <= $numerototal; $i++)
{
$nombre_check = $_POST[$i];
if ($nombre_check != "")
{
//Carga la tabla alumno_idiomas, en donde se muestra cada alumno con sus respectivos idiomas
$resultado = mysql_query("insert into alumno_idiomas (`id_alu`,`nom_alu`,`id_idioma`) VALUES('".$idinf."','".$alumno."','".$nombre_check.value."')");
}
}
Esepro que les sirva. Hasta el proximo post.
Muy bueno el post. Te felicito por compartir tus conocimientos con todos nosotros, es de mucho valor. Saludos
P/D: a la majadita también.
ERES una pistola macho…. gracias por transmitir tus conocimientos , como dicen en mi pueblo
yahooooooooooooo
Hola muchachos bueno el aporte, yo estoy necesitando como checkear checkbox apartir de una base de datos que luego quiera mostrar un formulario con los checkbox que se seleccionaron
no podrian subir los archivos php??me marca error el primero no se cmo pegarlo
oye muy interesante, pero tengo un problema al ejecutar el codigo alta_checkbox.php me sale error en la linea 31 me parece que es por $i, dice algo de string por fa si puede indicarme como hacer para que me funcione seria maravilloso, gracias
Saludos.
Bueno amigo ud se acerco mucho a lo que yo andaba buscando el problema es que me marcaba errores, los cuales corregi, pero al ejecutarlo no funciona…. podria ud subir los fuentes para que todos podamos estudiarlos mejor. Gracias
gracias por compartir tus conocimientos, funcionó a la perfección.
Muchas gracias, La respuesta me vino como anillo al dedo
!!!!
necesito una ayuda urgente ¿saber cual seria el error en el codigo en esta parte?
if( $j % $items_por_linea == 0 ) print ”;
echo “”.$nomidioma.”";
$i++;
me salta el siguiente error:
Parse error: syntax error, unexpected T_STRING, expecting ‘,’ or ‘;’ in C:\wamp\www\checkbox\alta_checkbox1.php on line 51
Hola Nestor! Te cuento donde podria estar el error:
if( $j % $items_por_linea == 0 ) print ”; //Aqui estas imprimiendo una comilla doble solita, quizas agregando otra comilla doble imprime al menos vacio, o sea colocando de esta manera print “”;
echo “”.$nomidioma.””;//Aqui no hacen falta las comillas, con solo colocar echo $nomidioma; es suficiente.
$i++;
Espero que te sirva la respuesta.
Gracias por tu consulta.
Saludos!
que tal! tengo un problema en la linea 31, por favor una ayuda urgente.
Perdon por la respuesta anterior pero no salio bien. Vamos a ver ahora… hace mucho que no posteo
La línea 31 quedaría algo así:
<td align="left"><input name="<? echo $i;?> type="checkbox" value="<? echo $ididioma;?>" <? if($_POST[$i]) {echo "checked";}?> /><? echo $nomidioma;?></td>Tengo un problema con mi codigo php…es el siguiente…ojala alguien me pueda ayudar….
1.-Realizo un checkbox dinamico a partir de una consulta…ahora al elejir los elementos de checkbox los guardo como arreglo…osea queda asi “array”en donde contiene los elementos escogidos que en mi caso SON LOS ASIENTOS QUE UNA PERSONA PUEDE ELEJIR…de guardar lo guardardo pero como “array” en mysql…Aqui viene el problema como lo saco para poder ver estos valores y utilizarlo en esta misma pagina “comparando” para k en este checkbox salgan chekeados los ya elejidos anteriormente…Ojala me hayan entendido…soy nuevo en php…y me estanke aaqui…
conectar();
$id=$_REQUEST['id'];
?>[/color]
Elejir Asientos
Escoger asientos
<[color=#FCE94F]?php
$j=4;
for($i=1;$i
[color=#FCE94F]<?php echo"$i”; ?>[/color][/color]
<[color=#FCE94F]?php echo"$i”; ?>[/color]
Pasadizo
[color=#FCE94F]<?php echo"$i”; ?>[/color]
De antemano gracias por su ayudaaa….Ojala me den una solucion mas experta k la mia….