Foros del Web » Programando para Internet » PHP »

Problemas con checkbox

Estas en el tema de Problemas con checkbox en el foro de PHP en Foros del Web. Hola amigos, necesito si me pueden ayudar a resolver mi problema, tengo un formulario tipo cuestionario, donde tengo la pregunta y 3 alternativas (input), y ...
  #1 (permalink)  
Antiguo 30/04/2015, 07:33
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Problemas con checkbox

Hola amigos, necesito si me pueden ayudar a resolver mi problema, tengo un formulario tipo cuestionario, donde tengo la pregunta y 3 alternativas (input), y por cada input tengo un checkbox. Lo que necesito es que los checkbox devuelvan valor 0 y 1 .

Código HTML:
Ver original
  1. <form id="form" action="guardar.php" method="post">
  2.         <ul>
  3.             <li><label>Ingresar Pregunta:</label><input type="text" value="<?=$pdata['preg']?>" name="preg"/></li>
  4.             <br />
  5.             <li><label>Resp 1:</label><input type="text" value="<?=$pdata['r1']?>" name="r1" id="r1"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  6.             <li><label>Resp 2:</label><input type="text" value="<?=$pdata['r2']?>" name="r2" id="r2"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  7.             <li><label>Resp 3:</label><input type="text" value="<?=$pdata['r3']?>" name="r3" id="r3"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  8.             <li><input type="submit" value="Guardar"/></li>
  9.         </ul>
  10.     </form>

Código PHP:
Ver original
  1. if(!$correcta=pg_escape_string($_POST['correcta'])){
  2.     $do_commit=false;
  3.     $err.="Debes ingresar la alternativa correcta.<br>";
  4. }


Se que los checkbox los inicializo en 0, pero aquí necesito que al seleccionar la alternativa correcta esta me guarde en mi bd con valor 1 y los otros dos resultados con valor 0.

¿Cómo es posible realizar esto? Quizás es algo tan básico, pero no logro el objetivo.
  #2 (permalink)  
Antiguo 30/04/2015, 10:51
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Problemas con checkbox

Yo lo que crearia seria un array

<input name="correcta[0]" >
<input name="correcta[1]" >
<input name="correcta[2]" >

de esa forma cuando resiva los datos en PHP solo recivire el seleccionado por ende se puede asumir que los demas deben tener un cero

podrias hacer algo como

Código PHP:
Ver original
  1. $fields = array(0,1,2);
  2. foreach($fields as $field){
  3. $fields[$field] = isset($_post['correcta'][$field])?1:0;
  4. }
  5.  
  6. var_dump($fields);
Es meramente una idea no la he provado que funcione pero asi yo lo haria falta debugearla y ver que trabaje al 100.
  #3 (permalink)  
Antiguo 30/04/2015, 11:13
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Problemas con checkbox

Cita:
Iniciado por tuuutooo Ver Mensaje
Hola amigos, necesito si me pueden ayudar a resolver mi problema, tengo un formulario tipo cuestionario, donde tengo la pregunta y 3 alternativas (input), y por cada input tengo un checkbox. Lo que necesito es que los checkbox devuelvan valor 0 y 1 .

Código HTML:
Ver original
  1. <form id="form" action="guardar.php" method="post">
  2.         <ul>
  3.             <li><label>Ingresar Pregunta:</label><input type="text" value="<?=$pdata['preg']?>" name="preg"/></li>
  4.             <br />
  5.             <li><label>Resp 1:</label><input type="text" value="<?=$pdata['r1']?>" name="r1" id="r1"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  6.             <li><label>Resp 2:</label><input type="text" value="<?=$pdata['r2']?>" name="r2" id="r2"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  7.             <li><label>Resp 3:</label><input type="text" value="<?=$pdata['r3']?>" name="r3" id="r3"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  8.             <li><input type="submit" value="Guardar"/></li>
  9.         </ul>
  10.     </form>

Código PHP:
Ver original
  1. if(!$correcta=pg_escape_string($_POST['correcta'])){
  2.     $do_commit=false;
  3.     $err.="Debes ingresar la alternativa correcta.<br>";
  4. }


Se que los checkbox los inicializo en 0, pero aquí necesito que al seleccionar la alternativa correcta esta me guarde en mi bd con valor 1 y los otros dos resultados con valor 0.

¿Cómo es posible realizar esto? Quizás es algo tan básico, pero no logro el objetivo.
Hola,
hasta donde yo sé cuando agrupas los radio a través del atributo name="correcta" todos con el mismo nombre y luego consultas el formulario sólo llega el valor de aquel radio marcado y no los demás.
Una solución sería apoyándose de javascript para pasar todos los datos (marcados o no).En pocas palabras ejecutar el método submit a través de una función de javascript y no directamente desde el formulario.

Aunque, me atrevería a decir que si puedes obtener el resultado que quieres aunque sólo se pase el valor de un radio y no todos, pero esto depende mucho de como esta compuesta tus tablas donde almacenas tus posibles respuestas.

Creo que te podría ayudar si me pasaras uno que 2 registros de tus tablas preguntas y respuestas.

Saludos.
  #4 (permalink)  
Antiguo 30/04/2015, 11:22
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Problemas con checkbox

Cita:
Iniciado por ArturoGallegos Ver Mensaje
Yo lo que crearia seria un array

<input name="correcta[0]" >
<input name="correcta[1]" >
<input name="correcta[2]" >

de esa forma cuando resiva los datos en PHP solo recivire el seleccionado por ende se puede asumir que los demas deben tener un cero

podrias hacer algo como

Código PHP:
Ver original
  1. $fields = array(0,1,2);
  2. foreach($fields as $field){
  3. $fields[$field] = isset($_post['correcta'][$field])?1:0;
  4. }
  5.  
  6. var_dump($fields);
Es meramente una idea no la he provado que funcione pero asi yo lo haria falta debugearla y ver que trabaje al 100.
Jeje, sí funciona tu método, pero... creo no se adaptaría bien cuando las posibles respuestas fueran más de 3, habría que editar constantemente el array que describes, pero es un buen inicio.
  #5 (permalink)  
Antiguo 30/04/2015, 11:28
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problemas con checkbox

Gracias por responderme....

Oggy_15_3 a que te refieres con esto "Creo que te podría ayudar si me pasaras uno que 2 registros de tus tablas preguntas y respuestas."

O cómo lo tendría que realizar si las alternativas fuesen más de 4, para elegir la correcta?

Gracias
  #6 (permalink)  
Antiguo 30/04/2015, 11:40
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Problemas con checkbox

Cita:
Iniciado por tuuutooo Ver Mensaje
Gracias por responderme....

Oggy_15_3 a que te refieres con esto "Creo que te podría ayudar si me pasaras uno que 2 registros de tus tablas preguntas y respuestas."

O cómo lo tendría que realizar si las alternativas fuesen más de 4, para elegir la correcta?

Gracias
Haber,
para comenzar noto que usar variables de tipo array asociativo $pdata['r1'] hasta
$pdata['r3'].
¿Estos datos son sacados de una Tabla? o tú mismo lo defines de la siguiente manera por decir:
$pdata['preg']="¿De que color es la pera?"
$pdata['r1']="Azul";$pdata['r1']="Verde";$pdata['r1']="rojo";
Si utilizas querys sería bueno que la pongas, en especial las que se usan para la
variable $pdata, digo esto porque podrías usar la función mysql_num_row($result) y con esto podremos saber el total de respuestas por pregunta.
  #7 (permalink)  
Antiguo 30/04/2015, 11:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problemas con checkbox

Cita:
Iniciado por oggy_15_3 Ver Mensaje
Haber,
para comenzar noto que usar variables de tipo array asociativo $pdata['r1'] hasta
$pdata['r3'].
¿Estos datos son sacados de una Tabla? o tú mismo lo defines de la siguiente manera por decir:
$pdata['preg']="¿De que color es la pera?"
$pdata['r1']="Azul";$pdata['r1']="Verde";$pdata['r1']="rojo";
Si utilizas querys sería bueno que la pongas, en especial las que se usan para la
variable $pdata, digo esto porque podrías usar la función mysql_num_row($result) y con esto podremos saber el total de respuestas por pregunta.
Estos datos $pdata['r1'] hasta $pdata['r3'] son variables creadas para insertarlas en la bdd, solo tengo la estructura de una base con dos tablas, preguntas y alternativas. La tabla pregunta tiene id, pregunta y la tabla alternativa tiene id_a, id_pregunta, correcta.

Por el momento es todo lo que tengo en base de datos, a través de un admin, quiero ingresar muchas preguntas con sus alternativas, y a la vez marcar la respuesta correcta, para una vez ingresado todo, realizar dicho test.

Gracias
  #8 (permalink)  
Antiguo 30/04/2015, 12:16
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 8
Respuesta: Problemas con checkbox

Cita:
Iniciado por tuuutooo Ver Mensaje
Estos datos $pdata['r1'] hasta $pdata['r3'] son variables creadas para insertarlas en la bdd, solo tengo la estructura de una base con dos tablas, preguntas y alternativas. La tabla pregunta tiene id, pregunta y la tabla alternativa tiene id_a, id_pregunta, correcta.

Por el momento es todo lo que tengo en base de datos, a través de un admin, quiero ingresar muchas preguntas con sus alternativas, y a la vez marcar la respuesta correcta, para una vez ingresado todo, realizar dicho test.

Gracias
Puedes poner los querys que usas, tanto la de la pregunta y la de las respuestas?
y cómo es que les pasas esos datos a $pdata, es que me parece algo raro al ver $pdata['r1'] hasta $pdata['r3'] a simple vista uno puede pensar que r1 hasta el r3 son campos de una de tus tablas.
  #9 (permalink)  
Antiguo 30/04/2015, 12:39
 
Fecha de Ingreso: septiembre-2008
Mensajes: 72
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problemas con checkbox

Aquí va el código

Formulario preguntas.php
Código HTML:
Ver original
  1. <form id="form" action="guardar.php" method="post">
  2.         <ul>
  3.             <li><label>Ingresar Pregunta:</label><input type="text" value="<?=$pdata['preg']?>" name="preg"/></li>
  4.             <br />
  5.             <li><label>Resp 1:</label><input type="text" value="<?=$pdata['r1']?>" name="r1" id="r1"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  6.             <li><label>Resp 2:</label><input type="text" value="<?=$pdata['r2']?>" name="r2" id="r2"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  7.             <li><label>Resp 3:</label><input type="text" value="<?=$pdata['r3']?>" name="r3" id="r3"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  8.             <li><label>Resp 4:</label><input type="text" value="<?=$pdata['r4']?>" name="r4" id="r4"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  9.             <li><label>Resp 5:</label><input type="text" value="<?=$pdata['r5']?>" name="r5" id="r5"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  10.             <li><label>Resp 6:</label><input type="text" value="<?=$pdata['r6']?>" name="r6" id="r6"/><input type="radio" name="correcta" value="0" id="correcta" /></li>
  11.             <li><input type="submit" value="Guardar"/></li>
  12.         </ul>
  13.     </form>

Y el php que recibe los datos

Código PHP:
Ver original
  1. <?
  2. include("include/conn.php");
  3. $do_commit=true;
  4.  
  5. if(!$preg=pg_escape_string($_POST['preg'])){
  6.     $do_commit=false;
  7.     $err.="Debes ingresar la pregunta.<br>";
  8. }
  9.  
  10. if(!$r1=pg_escape_string($_POST['r1'])){
  11.     $do_commit=false;
  12.     $err.="Debes ingresar la r1.<br>";
  13. }
  14.  
  15. if(!$r2=pg_escape_string($_POST['r2'])){
  16.     $do_commit=false;
  17.     $err.="Debes ingresar la r2.<br>";
  18. }
  19. if(!$r3=pg_escape_string($_POST['r3'])){
  20.     $do_commit=false;
  21.     $err.="Debes ingresar la r3.<br>";
  22. }
  23. if(!$r4=pg_escape_string($_POST['r4'])){
  24.     $do_commit=false;
  25.     $err.="Debes ingresar la r4.<br>";
  26. }
  27. if(!$r5=pg_escape_string($_POST['r5'])){
  28.     $do_commit=false;
  29.     $err.="Debes ingresar la r5.<br>";
  30. }
  31.  
  32. if(!$r6=pg_escape_string($_POST['r6'])){
  33.     $do_commit=false;
  34.     $err.="Debes ingresar la r6.<br>";
  35. }
  36.  
  37. if(!$correcta=pg_escape_string($_POST['correcta'])){
  38.     $do_commit=false;
  39.     $err.="Debes ingresar la resp_correcta.<br>";
  40. }
  41.  
  42.  
  43.  
  44. if($do_commit){
  45.     $sqlP="insert into preguntas (pregunta) values ('$preg')";
  46.     $resultP=pg_query($conn, $sqlP);
  47.     if(pg_affected_rows($resultP)==0){
  48.         $do_commit=false;
  49.         $err.="Error Inesperado.<br>";
  50.     }else{
  51.         $sqlPreg="select LASTVAL();";
  52.         $resultPreg=pg_query($conn, $sqlPreg);
  53.         if($rowPreg=pg_fetch_array($resultPreg)){
  54.             $id_p=$rowPreg[0];
  55.         }else{
  56.             $do_commit=false;
  57.             $err.="Error Inesperado dos.<br>";
  58.         }
  59.     }
  60. }
  61.  
  62. if($do_commit){
  63.     $sql1="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r1', $correcta)";
  64.     $result1=pg_query($conn, $sql1);
  65.     if(pg_affected_rows($result1)==0){
  66.         $do_commit=false;
  67.         $err.="Error Inesperado en r1.<br>";
  68.     }
  69. }
  70.  
  71. if($do_commit){
  72.     $sql2="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r2', $correcta)";
  73.     $result2=pg_query($conn, $sql2);
  74.     if(pg_affected_rows($result2)==0){
  75.         $do_commit=false;
  76.         $err.="Error Inesperado en r2.<br>";
  77.     }
  78. }
  79.  
  80. if($do_commit){
  81.     $sql3="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r3', $correcta)";
  82.     $result3=pg_query($conn, $sql3);
  83.     if(pg_affected_rows($result3)==0){
  84.         $do_commit=false;
  85.         $err.="Error Inesperado en r3.<br>";
  86.     }
  87. }
  88.  
  89. if($do_commit){
  90.     $sql4="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r4', $correcta)";
  91.     $result4=pg_query($conn, $sql4);
  92.     if(pg_affected_rows($result4)==0){
  93.         $do_commit=false;
  94.         $err.="Error Inesperado en r4.<br>";
  95.     }
  96. }
  97.  
  98. if($do_commit){
  99.     $sql5="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r5', $correcta)";
  100.     $result5=pg_query($conn, $sql5);
  101.     if(pg_affected_rows($result5)==0){
  102.         $do_commit=false;
  103.         $err.="Error Inesperado en r5.<br>";
  104.     }
  105. }
  106.  
  107. if($do_commit){
  108.     $sql5="insert into alternativas (preg_id, alternativa, resp_correcta) values ($id_p, '$r6', $correcta)";
  109.     $result5=pg_query($conn, $sql5);
  110.     if(pg_affected_rows($result5)==0){
  111.         $do_commit=false;
  112.         $err.="Error Inesperado en r6.<br>";
  113.     }
  114. }
  115.  
  116.  
  117. if($do_commit){
  118.     $_SESSION['err']="Pregunta ingresada";
  119.     header("location: guardar.php");
  120.     exit();
  121. }
  122. if(!$do_commit){
  123.     $_SESSION['pdata']=$_POST;
  124.     $_SESSION['err']=$err;
  125.     header("location: guardar.php");
  126.     exit();
  127. }
  128. ?>
  #10 (permalink)  
Antiguo 30/04/2015, 12:39
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Problemas con checkbox

El numero de respuestas no afecta al metodo que puse de ejemplo o quiziera pensar que no, realmente todo depende de como tenga su formulario....

Vamos que si el formulario es dinamico en algun lado tendra almacenadas las respuestas, solo hay que compararlas con la respuesta recibida.... si lo tiene manual que mas da tener que editar el codigo de ejemplo que di, al final de cuentas es manual el formulario.

yo me imaginaria que tiene un array como

Código PHP:
Ver original
  1. $preguntas = array(
  2.     array(
  3.         '¿pregunta 1?',
  4.         'respuestas'=>array(
  5.             'respuesta 1',
  6.             'respuesta 2',
  7.             'respuesta 3',
  8.             'respuesta 4'
  9.         ),
  10.         'respuestaCorrecta'=>3
  11.     ),
  12.     array(
  13.         '¿pregunta 2?',
  14.         'respuestas'=>array(
  15.             'respuesta 1',
  16.             'respuesta 2',
  17.             'respuesta 3'
  18.         ),
  19.         'respuestaCorrecta'=>2
  20.     ),
  21.     array(
  22.         '¿pregunta 3?',
  23.         'respuestas'=>array(
  24.             'respuesta 1',
  25.             'respuesta 2',
  26.             'respuesta 3',
  27.             'respuesta 4'
  28.         ),
  29.         'respuestaCorrecta'=>0
  30.     )
  31. );

Yo me imagino algo asi, ya sea en la base de datos o directamente en PHP... para integrar la comprobaciono que mencione no es complicado... como dije es meramente una idea.

Si funciona o no ya es cosa de que dejes volar tu imaginacion.

----------------------------------

Edito: publique simultaneamente a @tuuutooo

Viendo su codigo veo que es muy manual la forma en que lo realiza, recomendaria replantearte la estructura y forma de crearlo.

Etiquetas: checkbox, formulario
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 04:41.