Foros del Web » Programando para Internet » PHP »

Multiples Checkbox - Recoger en MySQL

Estas en el tema de Multiples Checkbox - Recoger en MySQL en el foro de PHP en Foros del Web. Hola de Nuevo. En un formulario tenía una pregunta que se respondía seleccionando varios checkbox. La pregunta es cuales son sus gustos? (METHOD="POST" ACTION="add_reg.php3") asi: ...
  #1 (permalink)  
Antiguo 15/11/2004, 23:57
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
Multiples Checkbox - Recoger en MySQL

Hola de Nuevo.

En un formulario tenía una pregunta que se respondía seleccionando varios checkbox. La pregunta es cuales son sus gustos?

(METHOD="POST" ACTION="add_reg.php3") asi:

<INPUT TYPE="CHECKBOX" NAME="gusto[]" VALUE="Asado">Asado
<INPUT TYPE="CHECKBOX" NAME="gusto[]" VALUE="Sopa">Sopa
<INPUT TYPE="CHECKBOX" NAME="gusto[]"VALUE="Arroz">Arroz

Tengo asi el archivo add_reg.php3:

<HTML>
<BODY><?PHP // process form
$gusto = implode(",",$_POST['gusto']);
$link = mysql_connect("localhost", "usuario","passw"); mysql_select_db("base_de_datos",$link);
$sql = "INSERT INTO tabla1 (Date, Name, Age, Nationality, Gusto) ".
"VALUES ('$date', '$name', '$age', '$nationality', '$gusto')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";

?>
</BODY>
</HTML>

OK... hasta aquí todo bien (Gracias a Maborak y muchos mas que han participado en mis preguntas de principiante).

Pero ahora tengo otra pregunta en el formulario que tambien se debe responder seleccionando uno o varios Checkbox...

La pregunta para el foro es... qué le debo agregar a mi archivo PHP para que me pueda aceptar los diferente checbox de las dos preguntas?

Intente lo siguiente pero me aparece error:

<HTML>
<BODY><?PHP // process form
$gusto = implode(",",$_POST['gusto']);
$horario = implode(",",$_POST['horario']);
$link = mysql_connect("localhost", "usuario","passw"); mysql_select_db("base_de_datos",$link);
$sql = "INSERT INTO tabla1 (Date, Name, Age, Nationality, Gusto) ".
"VALUES ('$date', '$name', '$age', '$nationality', '$gusto')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";

?>
</BODY>
</HTML>

GRACIAS !
  #2 (permalink)  
Antiguo 16/11/2004, 07:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. com pretendes almacenar ese "horario" (esas selecciones?) .. y sobre todo .. como pretenderás luego accederlo.

En tu tabla actual no tienes creado un campo para tal fin .. ¿o quieres añadirlo a tu campo "gutos"?

Si quieres añadirlo a tu campo gusto de tu tabla actual .. podrías concatenar ambas cadenas:

Código PHP:
$gusto implode(",",$_POST['gusto']); 
$horario implode(",",$_POST['horario']);
$gusto_horario=$gusto."|".$horario;

$link mysql_connect("localhost""usuario","passw"); mysql_select_db("base_de_datos",$link);
$sql "INSERT INTO tabla1 (Date, Name, Age, Nationality, Gusto) ".
"VALUES ('$date', '$name', '$age', '$nationality', '$gusto_horario')"
De esa forma te quedará algo tipo:
Asado,Sopa|horario1,horario2

Si te fijas .. uso como "separador" un caracter .. el "|" para que en algún momento puedas usarlo bajo un exlode() para separar los datos que ahí almacenas de "gustos" y "horarios". Pero tal vez sería mejor usar un campo más en tu BD .. o incluso mejor todavía "normalizar" tu BD creando una tabla más para gusto/horaio relacionada con esta con más normalización sobre esos "items" de gustos y demás para facilitar las consultas SQL complejas si corresponde.

Un saludo,
  #3 (permalink)  
Antiguo 16/11/2004, 10:16
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
Hola Cluster...

Tengo una Tabla dentro de una base de datos en MySQL. Esta tabla tiene varios campos... entre otros tengo un campo para GUSTO y otro para HORARIO... osea, necesito que las respuestas me lleguen por separado, cada una a su respectivo campo...

La tabla la consulto a través de PHPMyAdmin.

Gracias !

Martine
  #4 (permalink)  
Antiguo 16/11/2004, 13:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. ya lo tienes hecho .. tan sólo tienes que añadir tu campo a tu consulta SQL que haces de INSERT como has hecho con todos los demas ..

Tanto en $gusto como en $horario ya tendrás tus lista de opcines que seleccionastes de tu grupo de checkbox para "gusto[]" y "horario[]".

Un saludo,
  #5 (permalink)  
Antiguo 16/11/2004, 14:19
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
Te refieres a que el siguiente código sería el correcto...?
<HTML>
<BODY><?PHP // process form
$gusto = implode(",",$_POST['gusto']);
$horario = implode(",",$_POST['horario']);
$link = mysql_connect("localhost", "usuario","passw"); mysql_select_db("base_de_datos",$link);
$sql = "INSERT INTO tabla1 (Date, Name, Age, Nationality, Gusto, Horario) ".
"VALUES ('$date', '$name', '$age', '$nationality', '$gusto', '$horario')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";

?>
</BODY>
</HTML>

Porque así ya lo intenté pero me aparece error al enviar el formulario (submit) y los datos no se cargan en la tabla... recuerda que quiero recibir los cheqcbox de "gusto[]" en el campo Gusto y los de 'horario[]" en el campo horario (...no juntos).

GRACIAS de NUEVO!
  #6 (permalink)  
Antiguo 16/11/2004, 15:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Así debería ser .. pero si pones el código completo que usas (con tu formulario incluido) tal vez veamos donde está el error ..

E indica el error exacto que obtienes .. tanto si es de "PHP" como si es de javascript (si corresponde).

Un saludo,
  #7 (permalink)  
Antiguo 16/11/2004, 16:35
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
ok... voy a revisar bien cada detalle... lo pruebo y si el error persiste publico los códigos completos.

Gracias !
Martine
  #8 (permalink)  
Antiguo 17/11/2004, 10:39
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
Hola de NUevo...

El código correcto es como aparece en la respuesta #5 de este tema. Ya me funcionó bien... Muchas gracias Cluster

Saludos, Martine
  #9 (permalink)  
Antiguo 20/11/2004, 23:02
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
Ahora me sale otro error...

HOLA DE NUEVO....

Ahora me sale que "Si el formulario lo envío sin haber llenado los campos de los checkbox" me aparece lo siguiente:

Warning: implode(): Bad arguments. in /home/albert35/public_html/prueba/add_reg6.php3 on line 7

Warning: implode(): Bad arguments. in /home/albert35/public_html/prueba/add_reg6.php3 on line 8
¡Gracias! Hemos recibido sus datos.


Estos son los códigos que estoy usando:

En el Formulario:

<HTML>
<HEAD><SCRIPT>

//Pon en la variable obligatorios el name de todos los campos que deben rellenar

obligatorio=["date","name","age"];

//Pon en la variable textoObligatorio el texto que quieres que aparezca en el alert

textoObligatorio=["Date","Name","Age"];

function comprobar(este){
for(a=0;a<obligatorio.length;a++){

if(este.elements[obligatorio[a]].value==""){

alert("Por favor, llena el campo "+textoObligatorio[a]);
este.elements[obligatorio[a]].focus();
return false;


}

}

return true;
}

</SCRIPT>
<TITLE></TITLE>
</HEAD>
<BODY>

<FORM NAME="Prueba" METHOD="POST" ACTION="add_reg6.php3"
ONSUBMIT="return comprobar(this)">

Date -(MM/DD/AAAA)
<INPUT TYPE="TEXT" NAME="date" SIZE="8" MAXLENGTH="10">

Name:
<INPUT TYPE="TEXT" NAME="name" SIZE="35" MAXLENGTH="30">
Age:
<INPUT TYPE="TEXT" NAME="age" SIZE="1" MAXLENGTH="2">
Nationality:
<INPUT TYPE="TEXT" NAME="nationality" SIZE="35" MAXLENGTH="20">

Le Gusta...?
<INPUT TYPE="CHECKBOX" NAME="gusto[]" VALUE="To Clean">Limpiar
<INPUT TYPE="CHECKBOX" NAME="gusto[]" VALUE="To Cook">Cocinar
<INPUT TYPE="CHECKBOX" NAME="gusto[]" VALUE="To Iron">Planchar

Hora...?
<INPUT TYPE="CHECKBOX" NAME="hora[]" VALUE="12a1">de 12 a 1 PM <INPUT TYPE="CHECKBOX" NAME="hora[]" VALUE="2a3"> de 2 a 3 PM

Al Terminar...
<INPUT ID="enviar" TYPE="submit" NAME="enviar" VALUE="Enviar">
<INPUT TYPE="reset" VALUE="Borrar

</FORM>
</BODY>
</HTML>

El Código PHP:

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY><?PHP // process form
$gusto = implode(",",$_POST['gusto']);
$hora = implode(",",$_POST['hora']);
$link = mysql_connect("localhost", "usuario","password"); mysql_select_db("data-base",$link);
$sql = "INSERT INTO tablaX (Date, Name, Age, Nationality, Gusto, Hora) ".
"VALUES ('$date', '$name', '$age', '$nationality', '$gusto', '$hora')";
$result = mysql_query($sql);
echo "¡Gracias! Hemos recibido sus datos.\n";


?>
</BODY>
</HTML>

La pregunta sería:

Que debo hacer para que los campos que llevan Checkbox (gusto[] y hora[]) queden como "campos requeridos" o cómo hago para que no aparezca el error en mención si en el formulario no se llenan esos campos(...si se deja en blanco gusto[] y hora[]).

Gracias !
  #10 (permalink)  
Antiguo 22/11/2004, 09:39
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 caso de que ambos arrays no contengan elementos .. no son array (creo .. ahora no lo he probado) sino variables simples .. así que puedes validarlo con funciones como:

if (is_array($_POST['gusto'])){
// alplicas el implode para gusto ...
}

y así con el otro .. o te haces un && si es que ambos deben contener almenos una opción requerida ..

En su defecto .. podrías probar también con empty() en lugar de is_array() ..
Investiga que devuelve $_POST['gusto'] haciendo:

Código PHP:
echo "<pre>";
print_r($_POST);
echo 
"</pre>"
Esto es sólo para que valides el tipo de variabels que se van produciendo y su contenido ..

También puedes validar por javascript (sólo para mejorar la "usabilidad" .. igualmente tienes que validar desde PHP).

Un saludo,
  #11 (permalink)  
Antiguo 02/12/2004, 10:55
 
Fecha de Ingreso: septiembre-2004
Mensajes: 362
Antigüedad: 19 años, 7 meses
Puntos: 1
gracias ya me funciono...

Martin E.
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 18:17.