Foros del Web » Programando para Internet » PHP »

insertar un dato vacio o null si no se selecciona ningun checkbox

Estas en el tema de insertar un dato vacio o null si no se selecciona ningun checkbox en el foro de PHP en Foros del Web. hola amigos tengo el siguiente problema, tengo unos checkboxs, que al seleccionarlos me inserta los datos en mi BD pero cuando no selecciono ninguno pues ...
  #1 (permalink)  
Antiguo 04/02/2009, 14:57
Avatar de gokufast  
Fecha de Ingreso: abril-2007
Mensajes: 540
Antigüedad: 17 años
Puntos: 3
insertar un dato vacio o null si no se selecciona ningun checkbox

hola amigos tengo el siguiente problema, tengo unos checkboxs, que al seleccionarlos me inserta los datos en mi BD pero cuando no selecciono ninguno pues me sale un error.

aca estan los checkbox:
Código HTML:
<form method="post" action="09.php">
<input type="checkbox" name="elec[]" value="eq_sonido" />Equipo de Sonido<br />
<input type="checkbox" name="elec[]" value="microondas" />Microondas<br />
<input type="checkbox" name="elec[]" value="aspiradora" />Aspiradora<br />
<input type="submit" value="submit" name="submit">
</form> 
y aca esta el PHP:
Código PHP:
$elec_array $_POST['elec'];

foreach (
$elec_array as $one_elec
    {
    
$source .= $one_elec.", ";
    }
    
    
$elec substr($source0, -2);
    
    echo 
$elec;
    
    
$query "INSERT INTO productos (elec) VALUES('$elec')";
    
$result mysql_query($query); 
el problema de insertar un dato vacio lo solucione con un if, pero que pasa cuando son mas checkbox con otro nombre, como por ejemplo:
Código HTML:
<input type="checkbox" name="cooperativas[]" value="ahorro_credito" />
<input type="checkbox" name="cooperativas[]" value="telecomunicaciones">
<input type="checkbox" name="cooperativas[]" value="servicios" />
<input type="checkbox" name="cooperativas[]" value="agropecuario" />
<input type="checkbox" name="cooperativas[]" value="minero" /> 
o si son 5 tipos de checkboxs distintos? hacer muchos ifs?
lo ideal seria poder ingresar datos null o vacios si es que no se eligio ninguno pero eso creo que viene de la mano con un cambio de codigo, asi que alguna sugerencia?

gracias de antemano.
  #2 (permalink)  
Antiguo 04/02/2009, 16:24
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

¿Y no te sirve si le dices en la base de datos que sea un campo NULL?
  #3 (permalink)  
Antiguo 04/02/2009, 16:29
Avatar de gokufast  
Fecha de Ingreso: abril-2007
Mensajes: 540
Antigüedad: 17 años
Puntos: 3
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

esta asi y no me importa si es null o vacio pero el problema es que me sale el siguiente error cuando uso foreach().

Invalid argument supplied for foreach()


y este cuando uso implode

implode() [function.implode]: Bad arguments


pero solo se da cuando el array esta vacio, y lo que quiero que aunque este vacio igual me lo inserte ya sea como null o vacio.
  #4 (permalink)  
Antiguo 04/02/2009, 16:40
Avatar de Un_Tico  
Fecha de Ingreso: julio-2008
Ubicación: Cartago, Costa Rica
Mensajes: 176
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

Hola, el problema es que el foreach espera un array entonces cuando no seleccionas ningun check en el post no se manda esos checkbox vacios, lo que puedes hacer es esto

Código:
if(isset($_POST['elec'])){
if(is_array($_POST['elec'])){
foreach($_POST['elec'] as $value){
//aqui hago los que necesito hacer con los que fueron mandados por post
}
}else{
//error al enviar la info,se esperaba un array
}
}else{
//no selecciono articulos
}
espero te ayude,

Saludos...
  #5 (permalink)  
Antiguo 04/02/2009, 16:47
Avatar de gokufast  
Fecha de Ingreso: abril-2007
Mensajes: 540
Antigüedad: 17 años
Puntos: 3
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

exacto!!! ni el foreach ni el implode me dejan enviar arrays vacios.

y el uso del if ya lo habia intentado pero el problema es que pasa si tienes 4 tipos de checkboxs? por nombrar solamente un ejemplo.

5 checkboxs que sean para tipo de auto
3 checkboxs que sean para color
5 checkboxs para marca
4 checkboxs para numero de asientos

como hacerle para insertar los datos si:

no hay ningun checkbox seleccionado en el primero, luego hay 2 en el segundo, 1 en el tercero, y ninguno en el cuarto? o por ejemplo que los 3 primeros no tengan nada seleccionado pero si el ultimo? o al reves?
  #6 (permalink)  
Antiguo 04/02/2009, 16:57
Avatar de Un_Tico  
Fecha de Ingreso: julio-2008
Ubicación: Cartago, Costa Rica
Mensajes: 176
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

Pues no queda otra que validar todos los checkbox y hacer variables temporales para al final hacer el sql asi como

Código:
if(isset($_POST['elec'])){
if(is_array($_POST['elec'])){
foreach($_POST['elec'] as $value){
  $var_para_poner_en_algun_campo_del_sql .= $value
}
}else{
//error al enviar la info,se esperaba un array
}
}else{
//no selecciono articulos
}
y asi con los demas checks, luego insertas las variables en el sql y listo aunque personalmente yo no dejaria los campos de la db vacios,yo forzaria al usuario a seleccionar los datos...
  #7 (permalink)  
Antiguo 04/02/2009, 19:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: insertar un dato vacio o null si no se selecciona ningun checkbox

Mmm porque no haces algo así:
Código php:
Ver original
  1. $elec = ( isset( $_POST['elec'] ) && is_array( $_POST['elec'] ) ) ? implode( ', ', $_POST['elec'] ) : '';

Saludos
  #8 (permalink)  
Antiguo 05/02/2009, 07:19
Avatar de gokufast  
Fecha de Ingreso: abril-2007
Mensajes: 540
Antigüedad: 17 años
Puntos: 3
Cita:
pues el mismo problema del implode que no acepta arrays vacios.

implode() [function.implode]: Bad arguments.
edito mi comentario a uno que diga, genial!!! gracias gatorV y un_tico, lo del is_array no lo conocia.

si puedo ingresar aunque no haya ningun checkbox seleccionado, ahora voy a probar si me sale con varios tipos de chekbox

mil gracias realmente, salio de mil maravillas.
aca esta el codigo mas o menos adaptado a mi formulario.


Código HTML:
<input type="checkbox" name="inversion[]" value="colonia_vacaciones" />
<input type="checkbox" name="inversion[]" value="condominio" />
<input type="checkbox" name="inversion[]" value="deptos" />

<input type="checkbox" name="cooperativas[]" value="ahorro_credito" checked/>
<input type="checkbox" name="cooperativas[]" value="transporte" />
<input type="checkbox" name="cooperativas[]" value="servicios" />

<input type="checkbox" name="productos[]" value="eq_sonido" />
<input type="checkbox" name="productos[]" value="televisor" />
<input type="checkbox" name="productos[]" value="maq_fotografica" />
<input type="checkbox" name="productos[]" value="mov_publica" />

<input type="checkbox" name="conceptos[]" value="ahorro_credito" />
<input type="checkbox" name="conceptos[]" value="estatuto" />
<input type="checkbox" name="conceptos[]" value="principios" /> 
y el php

Código PHP:
$inversion = ( isset( $_POST['inversion'] ) && is_array$_POST['inversion'] ) ) ? implode', '$_POST['inversion'] ) : '';
$cooperativas = ( isset( $_POST['cooperativas'] ) && is_array$_POST['cooperativas'] ) ) ? implode', '$_POST['cooperativas'] ) : '';
$productos = ( isset( $_POST['productos'] ) && is_array$_POST['productos'] ) ) ? implode', '$_POST['productos'] ) : '';
$conceptos = ( isset( $_POST['conceptos'] ) && is_array$_POST['conceptos'] ) ) ? implode', '$_POST['conceptos'] ) : '';

    
$sql "INSERT INTO datos_economicos";
    
$sql .= " (inversion, cooperativas, productos, conceptos) ";
    
$sql .= "VALUES (";
    
$sql .= ",'$inversion'";
    
$sql .= ",'$cooperativas'";
    
$sql .= ",'$productos'";
    
$sql .= ",'$conceptos'";
    
$sql .= ")";
    
mysql_query($sql); 
espero que le ayude a alguien en un futuro y gracias nuevamente.

Última edición por GatorV; 05/02/2009 a las 11:49
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 09:01.