Foros del Web » Programando para Internet » PHP »

ayuda Checkbox

Estas en el tema de ayuda Checkbox en el foro de PHP en Foros del Web. Hola amigos estoy haciendo una pagina de matriculas donde mediante varios checkbox elijo el curso que quiero , pero no se como enviar los datos ...
  #1 (permalink)  
Antiguo 04/06/2004, 23:18
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
ayuda Checkbox

Hola amigos estoy haciendo una pagina de matriculas donde mediante varios checkbox elijo el curso que quiero , pero no se como enviar los datos a la base de datos , no se si eso se hace con un checkbox , almenos eso eh visto , tengo todos lo cursos en un base de datos...les pongo algo del codigo

<? } elseif($acurso[ciclo]=='I' and $acurso[estado]==1) { ?>
<tr>
<td align="center"><?=$acurso[cod_cur] ?></a></td>
<td> <?=$acurso[nomb_curso] ?></td>
<td align="center"><?=$acurso[ciclo] ?></td>
<td align="center"><?=$acurso[creditos] ?></td>

<td align="center"><input type="checkbox" value="<?=$acurso[nomb_curso]>" name="nomb_cur"></td>
  #2 (permalink)  
Antiguo 05/06/2004, 09:51
 
Fecha de Ingreso: diciembre-2003
Mensajes: 213
Antigüedad: 20 años, 4 meses
Puntos: 0
vamos a ver, no se si voy a responder bien a lo que quieres, pero desde luego en ese codigo falta escribir <form action='un fichero donde proceses la informacion'>....aqui va tienes ahi escrito......</form>, aun asi lo que tienes escrito tampoco lo veo claro, concreta mas tu pregunta
  #3 (permalink)  
Antiguo 05/06/2004, 17:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si usas un array para el nombre de tu checkbox .. (y los repietes en un bucle como supongo que lo haras para representar tus N cursos de tu BD ..) en PHP recibieras un array de nombre = name de tu checkbox:

Código PHP:
"><input type="checkbox" value="<?=$acurso[nomb_curso]>" name="nomb_cur[]"></td>
Y en PHP .. lo lees con un bucle:

Código PHP:
foreach ($_POST['nomb_cur'] as $curso){
// Y aquí haces tus INSERT o UPDATE a tu BD con ese dato .. $curso
// Una iteraccióndel bucle por checkbox que seleccionastes. Sólo pasan a PHP los scripts que marques con el valor que indiques en su "value"

Tienes una FAQ's con un ejemplo más completo:
http://www.forosdelweb.com/showthrea...710#post518710

Un saludo,

Última edición por Cluster; 05/06/2004 a las 17:24
  #4 (permalink)  
Antiguo 05/06/2004, 22:51
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
checkbox y header

Gracias Cluster realmente solucione ese problema , pero tengo algunos mas ,tengo mas campos como por ejemplo el nombre del alumno, el codigo y unos campos que quiero que tambien se envien a la BD, pero yo solo envio un solo dato el del value del checkbox , como puedo hacer con los demas .

<? } elseif($acurso[ciclo]=='II' and $acurso[estado]==0) { ?>
<tr>
<td align="center"><?=$acurso[cod_cur] ?></td>
<td> <?=$acurso[nomb_curso] ?></td>
<td align="center"><?=$acurso[ciclo] ?></td>
<td align="center"><?=$acurso[creditos] ?></td>
<tD>Desaprobado </tD>
<td align="center"><input type="checkbox" value="<?=$acurso[nomb_curso]?>" name="nomb_cur[]"></td>


Tambien cuando hago el insert a la base de datos le pongo un header para que se redireccione a otra pagina , pero yo previamnete en esa pagina tenia datos ( como los cursos) que habia extraido de la BD, pero al momento de redirecionar desaparece todo , como puedo hacer , me parece que puedo hacerlo con sesiones , pero desconozco como ,por favor explicame como hacerlo ...gracias ah y discupa un poco mi ignorancia...pero me gustaria aprender mas de php..realmente me gusta mucho.. byeee

<?
$link=mysql_connect("localhost","root","") or die ("error Conexion");
mysql_select_db("bd_matricula",$link) or die ("error en la base de datos");
foreach ($_POST['nomb_cur'] as $curso){
$sql="insert into matricula values('$cod_alu','$nombre','$apellido', '$curso','$ciclo','$cod_cur','$credito')";
mysql_query($sql) or die ("error en la Bd");
}
header("location:record_alu.php");
?>
  #5 (permalink)  
Antiguo 06/06/2004, 02:24
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
efectivamente lo puedes hacer con sesiones, pero recuerda que el foro no es un "Helpdesk", o un tutorial personalizado. Procura documentarte antes de buscar que te digan el código y formas exactas para hacer las cosas. Te recomiendo que leas sobre sesiones en http://mx.php.net/manual/es/ref.session.php

Es sencillo, has algunas pruebas y estarás del otro lado...

un saludo
  #6 (permalink)  
Antiguo 08/06/2004, 06:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En el ejemplo de código que pusistes . .sólo se vé donde usas tu "checkbox" .. no se vén los otros campos del foromulario que van asociados bajo ese mismo "registro" ..

En tal caso, para pasar a tu script de proceso (PHP) más datos .. tan sólo tienes que usar la misma técnica: usar "array's" como el ejemplo donde el "name=" de tu elemento de formulario ahora será: nombre[] ... Al usar este método y tener X arrays (una por cada elmento de tu formulario: un checkbox .. unos input .. etc ...) en PHP recibieras igualmente un array por elemento de "mismo indice" de esos arrays . .así que para ese caso te vendrá mejor usar un bucle for en lugar del foreach() para recorrer los X arrays que tengas a la vez (bajo su mismo indice del array).

Código PHP:
for ($x=0$x<count($_POST['nomb_cur']); $x++){
   echo 
$_POST['nomb_cur'][$x];
   echo 
$_POST['otracosa'][$x];
   echo 
$_POST['etc'][$x];

El tema que al "redireccionar" pierdes toda variable; así es como funciona un lenguaje del lado del servidor (no sólo PHP .. sino ASP, Perl y cualquier otro de este estilo).

Si "redireccionas" y necesitas las variables a donde redirecciones .. necesitas propagarlas por algún médio: URL (en el link) .. Formularios (en campos hidden) .. cookies o sesiones.

Un saludo,
  #7 (permalink)  
Antiguo 12/06/2004, 10:43
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola cluster...gracias...ya arregle lo de las sesiones...pero tengo problemas al enviar todos los campos que tengo en mi formulario , yo utilizo un campo oculto para enviar los demas datso, dime tu si es correcto te envio el codigo:

<? } elseif($acurso[ciclo]=='I' and $acurso[estado]==1) { ?>
<input type="hidden" value="<?=$acurso[nombre] ?>" name="nombre[]">
<input type="hidden" value="<?=$acurso[apellido] ?>" name="apellido[]">
<tr>
<td align="center"><input type="hidden" value="<?=$acurso[cod_cur] ?>" name="cod_cur[]"><?=$acurso[cod_cur] ?></a></td>
<td> <?=$acurso[nomb_curso] ?></td>
<td align="center"><input type="hidden" value="<?=$acurso[ciclo] ?>" name="ciclo[]"><?=$acurso[ciclo] ?></td>
<td align="center"><input type="hidden" value="<?=$acurso[creditos] ?>" name="creditos[]"><?=$acurso[creditos] ?></td>
<tD>Aprobado</tD>
<td align="center"><input type="checkbox" value="<?=$acurso[nomb_curso]?>" name="nomb_curso[]"></td>

y lo recibo con el siguiente codigo:

grabamatriculas.php
<?
$link=mysql_connect("localhost","root","") or die ("error Conexion");
mysql_select_db("bd_matricula",$link) or die ("error en la base de datos");

for ($x=0; $x<count($_POST['nomb_curso']); $x++){
$_POST['nombre'][$x];
$_POST['apellido'][$x];
$_POST['cod_curso'][$x];
$_POST['creditos'][$x];
$_POST['ciclo'][$x];
$_POST['nomb_curso'][$x];

$sql="insert into matricula values('$cod_alu','$nombre','$apellido', '$nomb_curso','$ciclo','$cod_cur','$creditos')";
mysql_query($sql) or die ("error ");
}
header("location:record_alu.php");
?>


esto solo me grababa solo un curso las veces que marco en el checkbox y en otros camos aperece solo ARRAY no se que estoy haciendo mal ...ah cuando imprimo ese valor si lo hace correctamente ( echo $_POST['nomb_curso'][$x]; )
muchas gracias por todo.
  #8 (permalink)  
Antiguo 14/06/2004, 07:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero ... esos nombre[] .. apellidos[] .. cod_cur[] y demás .. Los generas con un bucle (o bien son fijos pero hay N grupos) ?

Tu rutina ha de guardar los N registros que en el formulario presentes (los que tengan datos al menos) y el checkbox es sólo un dato más de ese registro (propiedad) .. Por qué si es así .. No cuentes los checkbox marcados: count($_POST['nomb_curso']); sinio que ejecuta ese bucle FOR las N veces que tengas en tu formulario.

Para asegurarte de que sólo vas hacer un "INSERT" (crea registro) de las filas que tengan datos de tu formulario ... puedes suar un

if (empty($_$_POST['nombre'][$x])){ // o variable que tenga que existir con valor para crear el registro ..

// ejecutas tu insert SQL
}

Recuerda que -sólo- los checkbox marcados (seleccionados) pasan a tu script de proceso y por ende .. si cuentas los elementos de este tu bucle sólo hará tantas iteracciones como checkbox marques.

Un saludo,
  #9 (permalink)  
Antiguo 14/06/2004, 10:48
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
hola cluster....si es un bucle lo del formulario Y son varios if - elseif..y yo no tengo problemas al imprimir esos datos..porq los checkbox que elijo esos me muestra:

for ($x=0; $x<count($_POST['nomb_curso']); $x++){
echo $_POST['nombre'][$x];
echo $_POST['apellido'][$x];
echo $_POST['cod_curso'][$x];
echo $_POST['creditos'][$x];
echo $_POST['ciclo'][$x];
echo $_POST['nomb_curso'][$x];

$sql="insert into matricula values('$cod_alu','$nombre','$apellido', '$nomb_curso','$ciclo','$cod_cur','$creditos')";
mysql_query($sql) or die ("error ");
}
//header("location:record_alu.php");
?>

como te digo al imprimir no tengo problemas ...el problema esq se inserta algunos valores "0" y otros "ARRAY"
este el codigo del formulario



<?
for($i=1 ; $i<=7 ; $i++)
{
$acurso = mysql_fetch_array($rscurso) ;
if($acurso[ciclo]=='I' and $acurso[estado]==3) {;

<form action="grabamatricula.php<?=$SID ?>" method="post" name="nombre[]">
<? } elseif($acurso[ciclo]=='I' and $acurso[estado]==1) { ?>
<input type="hidden" value="<?=$acurso[nombre] ?>" name="nombre[]">
<input type="hidden" value="<?=$acurso[apellido] ?>" name="apellido[]">
<input type="hidden" value="<?=$acurso[alu_cod] ?>" name="alu_cod[]">
<tr>
<td align="center"><input type="hidden" value="<?=$acurso[cod_cur] ?>" name="cod_cur[]"><?=$acurso[cod_cur] ?></a></td>
<td> <?=$acurso[nomb_curso] ?></td>
<td align="center"><input type="hidden" value="<?=$acurso[ciclo] ?>" name="ciclo[]"><?=$acurso[ciclo] ?></td>
<td align="center"><input type="hidden" value="<?=$acurso[creditos] ?>" name="creditos[]"><?=$acurso[creditos] ?></td>
<tD>Aprobado</tD>
<td align="center"><input type="checkbox" value="<?=$acurso[nomb_curso]?>" name="nomb_curso[]"></td>

<input type="submit" name="Submit" value="grabar"> </form>

no se como se puede insetar esos arrays...gracias
  #10 (permalink)  
Antiguo 14/06/2004, 11:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En tu INSERT debes usar los arrays!

$_POST['nombre'][$x]

Tus $nombre y demás variables son un array todos ahora!. Tal cual lo usas para "ver" ese dato así debes usarlo para hacer tu INSERT!

Un saludo,
  #11 (permalink)  
Antiguo 14/06/2004, 13:42
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
Ok cluster creo q tienes razon , yo tambien pense asi ...pero me sale el siguiente error:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\grabamatricula.php on line 16


<?php
session_start();
?>
<?
$link=mysql_connect("localhost","root","") or die ("error Conexion");
mysql_select_db("bd_matricula",$link) or die ("error en la base de datos");
for ($x=0; $x<count($_POST['nomb_curso']); $x++){
echo $_POST['cod_cud'][$x];
echo $_POST['nombre'][$x];
echo $_POST['apellido'][$x];
echo $_POST['nomb_curso'][$x];
echo $_POST['cod_curso'][$x];
echo $_POST['creditos'][$x];
echo $_POST['ciclo'][$x];

$sql="insert into matricula values('$_POST['cod_cud'][$x]','$_POST['nombre'][$x]','$_POST['apellido'][$x]','$_POST['nomb_curso'][$x]','$_POST['cod_curso'][$x]','$_POST['creditos'][$x]','$_POST['ciclo'][$x]')";
mysql_query($sql) or die ("error ");
}
//header("location:record_alu.php");
?>


uso los arrays en insert como me digiste ..probe con y sin comillas simples, y nada ...gracias
  #12 (permalink)  
Antiguo 14/06/2004, 15:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ahora lo que tienes son problemas con tus comillas .. pero eso se arregla concatenando por ejemplo:

Código PHP:
$sql="insert into matricula values('".$_POST['cod_cud'][$x]."','".$_POST['nombre'][$x]."','".$_POST['apellido'][$x]."','".$_POST['nomb_curso'][$x]."','".$_POST['cod_curso'][$x]."','".$_POST['creditos'][$x]."','".$_POST['ciclo'][$x]."')"
Un saludo,
  #13 (permalink)  
Antiguo 15/06/2004, 15:17
Avatar de chinoloco  
Fecha de Ingreso: julio-2003
Mensajes: 83
Antigüedad: 20 años, 9 meses
Puntos: 1
gracias Cluster , te agradezco mucho ...da gusto consultar contigo ..eres un genio!!! ...byeee
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:54.