Foros del Web » Programando para Internet » PHP »

como guardar en la base de datos hecha en Mysql, el valor de un check box,

Estas en el tema de como guardar en la base de datos hecha en Mysql, el valor de un check box, en el foro de PHP en Foros del Web. Hola, como puedo guardar en la base de datos hecha en Mysql, los valores de varios check box? Lo que necesito es guardar en la ...
  #1 (permalink)  
Antiguo 21/01/2004, 15:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
como guardar en la base de datos hecha en Mysql, el valor de un check box,

Hola, como puedo guardar en la base de datos hecha en Mysql, los valores de varios check box? Lo que necesito es guardar en la base de datos el valor de SI o NO, para indicar si el check fue seleccionado o no. Lo estoy tranado de hacer con arrays pero no entiendo bien como hacerlo??
Los checks box son los siguientes:

<input name="unid[]" type="checkbox" value="floppy">

<input name="unid[]" type="checkbox" value="cdrom">

y la codificacion para el array es:

//Ingreso el floppy y la unidad de cd
foreach($unid as $valor) {
echo $valor;
$strsq12 = "insert into servidores FLOPPY_SERV ='$valor'";
$rs2 = mysql_query($strsql2, $cni) or die(mysql_error());
echo $strsq12;
} //fin del foreach

la tabla dde quiero guardar el valor se llama servidores, aqui solo aparece el insert para el floppy, tendria que hacer uno igual para el cdrom??
Por favor indiquenme cual es el error? Espero me puedan ayudar
gracias por adelantado
  #2 (permalink)  
Antiguo 22/01/2004, 05:35
Avatar de puchitol  
Fecha de Ingreso: diciembre-2003
Ubicación: ELCHE
Mensajes: 322
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola sofia2,
creo que entiendo por donde vas, pero podrias explicar un poco mejor la estructura que tiene tu BD (mas o menos)?, de esta forma aclararias mucho mejor lo que quieres...
OK?

un saludo
__________________
If you think fuck is funny, fuck yourself and save your money,
espero que entendais la moraleja... je, je, je
  #3 (permalink)  
Antiguo 22/01/2004, 07:23
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
La base de datos a que hago referencia esta estructurada de la siguiente manera:

una tabla llamada "Servidores" tiene un campo:
FLOPPY_SERV definido como ENUM('S','N') y su valor por defecto es 'S'

El otro campo es CDROM_SERV y esta definido igual que FLOPPY_SERV.
el campo clave de la tabla es autonumerico y se denomina: NRO_SERV.

Te comento al realizar el insert, e imprimirlo, me genera este mensaje:

insert into servidores FLOPPY_SERV ='floppy'insert into servidores FLOPPY_SERV ='cdrom'

y si coloco la funcion mysql_error(),asi:
foreach($unid as $valor) {

$strsq12 = "insert into servidores FLOPPY_SERV ='$valor'";
$rs2 = mysql_query($strsql2, $cni) or die(mysql_error());
echo $strsq12;
} //fin del foreach

me muestra "Query was empty".
No se si lo que pasa es que esta tratando de guardar en el mismo campo FLOPPY_SERV,los dos valores del array unid[]?
Tambien probe definiendo los campos como char, pero no me funciona.

Cualquier cosa puedo darle aun mas detalles si lo requieren, espero me puedan ayudar
  #4 (permalink)  
Antiguo 22/01/2004, 07:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,
Cita:
me muestra "Query was empty".
Eso te lo da porque estas liandote con el nombre de las variables. Metes la consulta en $strsq12, pero al mysql_query() le pasas $strsql2 , fijate la diferencia es que en el primero pones un 1 (uno) y en la segunda usas una l (ele).

Lo otro lo miro luego.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 22/01/2004, 08:02
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
ok, gracias no me di cuenta
  #6 (permalink)  
Antiguo 22/01/2004, 08:11
Avatar de puchitol  
Fecha de Ingreso: diciembre-2003
Ubicación: ELCHE
Mensajes: 322
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola otra vez,
vamos a ver... si estas declarando el tipo del campo FLOPPY_SERV como enum('s','n'), esos valores son los que esta esperando, por lo tanto no le puedes asignar "floppy" a ese campo en el insert, entiendes?
Tendras que ver si el elemento del vector es "floppy", y si es asi, asignar en el insert el valor "s" al campo, y si no es asi, asignar 'n'. Para el resto de campos seria igual.

No se si me he explicado bien, pero espero que te sirva.
Y ya sabes si tienes alguna duda, no dudes en preguntar,eh?

un saludo.
__________________
If you think fuck is funny, fuck yourself and save your money,
espero que entendais la moraleja... je, je, je
  #7 (permalink)  
Antiguo 22/01/2004, 08:45
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Por cierto, si haces un INSERT para campo creas un registro distinto en cada INSERT. Tendrias que crear un solo INSERT para crear un registro con todos los campos.

Yo cambiaria la forma en que defines los campos. Lo haria asi:

<input name="unid['FLOPPY_SERV']" type="checkbox" value="S">

<input name="unid['CDROM_SERV']" type="checkbox" value="S">

Y luego crearia el INSERT con:
Código PHP:
$unidades=(isset($_POST['unid']))?$_POST['unid']:array();
$campos=array_keys($unidades);  // array con los indices de los campos del formulario
$sql="INSERT INTO tabla (".implode(',',$campos).") VALUES ('".implode("','",$unidades)."')"
Y pondria el valor por defecto para esos campos a 'N' en la tabla.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 22/01/2004, 10:39
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola Josemi, hice lo que me didjiste, usando el insert de arriba, cambiando solo el nombre de la tabla, y me aparece el siguiente mensaje cuando lo ejecuto, no me ingresa los valore:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''FLOPPY_SERV','CDROM_SERV') VALUES ('S','S')' at line 1

Luego del insert, le coloco:
$rs2 = mysql_query($sql, $cni) or die(mysql_error());
echo $sql;
para que me muestre el error, pero si le quito el mysql_error, aparentemente hace el insert, pero igual no lo guarda en la base de datos. Aparece:
INSERT INTO servidores ('FLOPPY_SERV','CDROM_SERV') VALUES ('S','S')

Estoy pensando que sera que esos campos tienen que estar en otra tabla aparte (normalizados)? ya nose que puede ser??
  #9 (permalink)  
Antiguo 22/01/2004, 10:45
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
No, parece que el problema es que esta cogiendo las ' del indice. Quita los ' de los indices en los campos del form.

No habia probado el codigo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 22/01/2004, 11:25
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
Disculpa tanta molestia, ahora si funciona pero me hace el insert con otro nro de serv, ya que este es el campo clave autonumerico, es decir, hace dos inserts, en uno ingresa por defecto los demas valores del formulario y en el otro inserta los valores del check box.

Sera que en vez de hacer un insert tengo que hacer un update? con condicion where NRO_SERV=$NRO_SERV para que lo actualice a la misma vez.
Como puedo hacer el update?
  #11 (permalink)  
Antiguo 22/01/2004, 13:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Si quieres modificar un registro ya existente, si tienes que usar el UPDATE. Y lo montarias de la misma forma, pero siguiendo la sintasix del UPDATE. En el caso del UPDATE, tienes que generar las parejas campo=valor:
Código PHP:
$unidades=(isset($_POST['unid']))?$_POST['unid']:array();
$campos=array();
foreach(
$unidades as $campo=>$valor) {
  
$campos[]="$campo='$valor'";
}
$sql="UPDATE tabla SET ".implode(',',$campos)." WHERE NRO_SERV=$NRO_SERV"
Suponiendo que en $NRO_SERV tengas el id del registro a actualizar.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 23/01/2004, 10:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 212
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola Josemi, gracias!! ahora si actualiza bien.
Disculpa tanta preguntadera, pero te cuento q tengo un formulario para modificar la configuración del servidor, primero leo de la base de datos el valor de FLOPPY_SERV y CDROM_SERV, para ver si tienen SI, y que los muestre seleccionados, esto lo hace bien. Dentro de la misma pagina pregunto si se presiono el boton actualizar, y luego coloque la misma actualizacion que me diste.
Me sucede que si al momento de ingresar el servidor no se le marcaron los valores de floppy y cdrom, la actualizacion me lo inserta, y funciona bien , pero si por el contrario estaban seleccionados, y los deselecciono no me actualiza que ya no fueron seleccionados y que por lo tanto tiene que guardar en la base de datos tanto en el FLOPPY_SERV como el CDROM_SERV tiene q guardar "N". el codigo es el siguiente:

//Ingreso el floppy y la unidad de cd
$unidades = (isset($_POST['unid']))?$_POST['unid']:array();
$campos = array();
foreach($unidades as $campo=>$valor) {
$campos[]="$campo='$valor'";
}
$sql="UPDATE servidores SET ".implode(',',$campos)." WHERE NRO_SERV=$NRO_SERV";
$rs2 = mysql_query($sql, $cni) ;
echo $sq1;

y los check box tienen, en la pagina de modificar lo siguiente:
<input name="unid[FLOPPY_SERV]" type="checkbox" value="S"
<?php if ($tem20 =='S'){ echo "checked";} ?>>

<input name="unid[CDROM_SERV]" type="checkbox" value="S"
<?php if ($tem21=='S') { echo "checked";} ?>>

AClaro que $tem20 y $tem21 vienen de aqui:
$strsql = "select * from servidores where NRO_SERV =$NRO_SERV";
$rs = mysql_query($strsql, $cni);

while ($row = mysql_fetch_array($rs)){ //while4
$tem1 = $row["NOM_SERV"];

$tem20 = $row["FLOPPY_SERV"];
$tem21 = $row["CDROM_SERV"];

Tego q hacer una modificacion al codigo para que me lo actualice en caso q no esten seleccionados y los desmarque en el formulario??

Última edición por sofia2; 23/01/2004 a las 10:48
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 14:56.