Foros del Web » Programando para Internet » PHP »

Guardar Checkbox en una base de datos

Estas en el tema de Guardar Checkbox en una base de datos en el foro de PHP en Foros del Web. Hola a todos y gracias por la ayuda. Tengo el siguiente caso: De una base de datos traigo una serie de valores que pueden estar ...
  #1 (permalink)  
Antiguo 01/11/2015, 20:29
 
Fecha de Ingreso: octubre-2007
Mensajes: 29
Antigüedad: 16 años, 6 meses
Puntos: 0
Guardar Checkbox en una base de datos

Hola a todos y gracias por la ayuda. Tengo el siguiente caso:
De una base de datos traigo una serie de valores que pueden estar o no seleccionados, el formulario luego de construir la información que se trae de la base de datos queda así:

Este es mi formulario html:

Código PHP:

<html>
    <
head>
        <
meta charset="UTF-8">
        <
title></title>
    </
head>
    <
body>
        <
form action="checkbox-form01.php" method="post">

        
Which buildings do you want access to?<br />
        <
input type="checkbox" value="España" name="countries[]" checked="Yes"  /><label>España</label><br/>
        <
input type="checkbox" value="Portugal" name="countries[]" /><label>Portugal</label><br/>
        <
input type="checkbox" value="Francia" name="countries[]" checked="Yes"/><label>Francia</label><br/>

        </
form>
    </
body>
</
html
Posterior a que el usaurio haga cambios, estos deben ser enviados a la base de datos y actualizarse.
Mi problema reside en que no sé cómo verificar cuales cambiaron.

Para este ejemplo luego que el usaurio cambia quedaría así y presiona el botón submit:


Código PHP:

<html>
    <
head>
        <
meta charset="UTF-8">
        <
title></title>
    </
head>
    <
body>
        <
form action="checkbox-form01.php" method="post">

        
Which buildings do you want access to?<br />
        <
input type="checkbox" value="España" name="countries[]" checked="No"[/COLOR]  /><label>España</label><br/>
        <
input type="checkbox" value="Portugal" name="countries[] " checked="Yes"[/COLOR]/><label>Portugal</label><br/>
        <
input type="checkbox" value="Francia" name="countries[]" checked="Yes"/><label>Francia</label><br/>

        </
form>
    </
body>
</
html
Como verán, se cambiaron dos, España dejó de estar seleccionado y Seleccioné Portugal, ahora yo debo saber eso apra en la base poner 0 a España, y 1 a Portugal.

Cómo detecto cuáles cambiaron??
y asi puedo actualizar la base??? Gracias por su super ayuda.
  #2 (permalink)  
Antiguo 01/11/2015, 22:00
Avatar de AlejandraLara  
Fecha de Ingreso: octubre-2015
Mensajes: 115
Antigüedad: 8 años, 6 meses
Puntos: 19
Respuesta: Guardar Checkbox en una base de datos

Podrías actualizar todos con la nueva información independientemente de que los cambie o no.
  #3 (permalink)  
Antiguo 01/11/2015, 22:12
 
Fecha de Ingreso: octubre-2007
Mensajes: 29
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Guardar Checkbox en una base de datos

quiero evitar eso debido a que son 2500 checkboxes.

Alguna otra alternativa?
  #4 (permalink)  
Antiguo 01/11/2015, 22:13
 
Fecha de Ingreso: octubre-2007
Mensajes: 29
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Guardar Checkbox en una base de datos

Cita:
Iniciado por AlejandraLara Ver Mensaje
Podrías actualizar todos con la nueva información independientemente de que los cambie o no.
quiero evitar eso debido a que son 2500 checkboxes.

Alguna otra alternativa?
  #5 (permalink)  
Antiguo 01/11/2015, 22:43
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Guardar Checkbox en una base de datos

Cita:
quiero evitar eso debido a que son 2500 checkboxes.
¿De verdad son tantos o sólo estás exagerando?

¿Quién en el mundo sería capaz de usar un formulario así?

Cita:
Alguna otra alternativa?
Pues veamos, tampoco es que tengas que verificar uno a uno, si usas un array todo será simple aún así tengas millones de registros.

Una técnica para entender que valores han sido modificados es usar arrays:
Código HTML:
Ver original
  1. <input type="hidden" name="foo[bar]" value="original">
  2. <input type="checkbox" name="foo[bar]">

La clave está en el name, que debe ser idéntico para ambos casos, y no puedes usar "foo[]" sin índices pues no existiría relación entre ambos campos.

Ahora, los checkboxes funcionan del siguiente modo: sólo si están marcados se envían, caso contrario se ignoran.

Y todo los input sobreescriben a los input previos con el mismo name.

Dado eso, entonces:

- El campo hidden almacena el valor previo u original
- Si no se activa el checkbox entonces se envía dicho valor previo
- Si se activa el checkbox sobreescribe el campo y enviará el valor modificado (el previo se pierde)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 01/11/2015 a las 22:49
  #6 (permalink)  
Antiguo 02/11/2015, 00:05
 
Fecha de Ingreso: octubre-2007
Mensajes: 29
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Guardar Checkbox en una base de datos

Hola pateketrueke, si son bastantes, aplique lo que me indicaste, el formulario queda de la siguiente forma:

Código PHP:

        <td align="center">
            <input type="checkbox" style="display:none;" <?php if($this->posts[$i]['PROVINCIAL']==="1"): ?> checked= 'CHECKED' <?php endif; ?> name="c[]" value=<?php echo $this->posts[$i]['PROVINCIAL'] . '_' .  $this->posts[$i]['PROVINCIAL_ID'] ;?> />
            <input type="checkbox" <?php if($this->posts[$i]['PROVINCIAL']==="1"): ?> checked= 'CHECKED' <?php endif; ?> name="d[]" value=<?php echo $this->posts[$i]['PROVINCIAL'] . '_' .  $this->posts[$i]['PROVINCIAL_ID'] ;?> />
        </td>
Visualmente cuento 73 elementos chequeados; Y tengo un print_r para cuando se presiona el documento.

Código PHP:

<?php
  $aDoor 
$_POST['c'];
  
$aDoorAux $_POST['d'];
  echo(
"<pre>");
  
print_r($aDoor);
  echo(
"</pre>");
      echo(
"<br />");
 echo(
"<pre>");
  
print_r($aDoorAux);
  echo(
"</pre>");
      echo(
"<br />");
  
  exit();
  if(empty(
$aDoor)) 
  {
    echo(
"You didn't select any buildings.");
  } 
  else
  {
    
$N count($aDoor);
    
$M count($aDoorAux);
 
    echo(
"Usted ha seleccionado: ");
    for(
$i=0$i $N$i++)
    {
        for(
$j=0$j $M$j++)
        {
            if (
$aDoor[$i] == $aDoorAux[$j])
            {
                
//Estaba marcado desde antes no cambio NO se hace nada
                
$j $M//ya no buscamos más.
            
}
            else
            {
                if (
$j == $M 1)
                {
                    
// ya es el ultimo registro no lo encontro.
                    
echo($aDoor[$i] . " ");
                }
            }
        }
        
      
    }
    
    echo(
"<br />");
    echo(
"Usted a deseleccionado: ");
    for(
$i=0$i $M$i++)
    {
        for(
$j=0$j $N$j++)
        {
            if (
$aDoorAux[$i] == $aDoor[$j])
            {
                
//Estaba marcado desde antes no cambio NO se hace nada
                
$j $N//ya no buscamos más.
            
}
            else
            {
                if (
$j == $N 1)
                {
                    
// ya es el ultimo registro no lo encontro.
                    
echo($aDoorAux[$i] . " ");
                }
            }
        }
        
      
    }
    
    
  }
?>
Pero si comparo las variables con lo que está en el formulario original, no me está trayendo todos los checkboxes que debería, qué podrá ser?? les ha pasado eso alguna vez?
  #7 (permalink)  
Antiguo 02/11/2015, 00:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Guardar Checkbox en una base de datos

Por eso te he comentado los de los índices, además los campos checkbox jamás se envían si no están marcados, para eso es el campo hidden adicional.

Has la prueba con un array más simples para que entiendas el mecanismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 02/11/2015, 02:30
 
Fecha de Ingreso: octubre-2007
Mensajes: 29
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Guardar Checkbox en una base de datos

Cita:
Iniciado por pateketrueke Ver Mensaje
Por eso te he comentado los de los índices, además los campos checkbox jamás se envían si no están marcados, para eso es el campo hidden adicional.

Has la prueba con un array más simples para que entiendas el mecanismo.
Preguntas:
1.- El $post[Foo] tiene un máximo de extensión? pregunto dado que si cargo en una variable ($aDoor = $_POST['foo'];) se ingresan únicamente 500 registros y en la prueba que he realizado envío más de 1000.

2.- En la solución que se propusiste, quedarían afuera los que estando chequeados los los elimino?

3.- Siguiendo tu recomendación, al pasar la información, hay una gran cantidad de checkboxes seleccionados, únicamente pasa el post con uno.

Última edición por bgva2005; 02/11/2015 a las 02:36 Razón: act
  #9 (permalink)  
Antiguo 02/11/2015, 09:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Guardar Checkbox en una base de datos

Cita:
1.- El $post[Foo] tiene un máximo de extensión? pregunto dado que si cargo en una variable ($aDoor = $_POST['foo'];) se ingresan únicamente 500 registros y en la prueba que he realizado envío más de 1000.
En teoría sí hay limites, por eso pregunté inicialmente si de verdad querrías modificar miles de ampos a la vez.

Los límites pueden aumentarse desde luego, te sugiero consultar el siguiente manual: http://www.php.net/variables.external

Cita:
2.- En la solución que se propusiste, quedarían afuera los que estando chequeados los los elimino?
Sí, efectivamente, sólo se consideran los checkbox que estén marcados el momento de hacer el envio del formulario, sin excepciones.

Para eso precisamente es el campo hidden, el checkbox envía el valor activo y el hidden el inactivo.

Cita:
3.- Siguiendo tu recomendación, al pasar la información, hay una gran cantidad de checkboxes seleccionados, únicamente pasa el post con uno.
¿De verdad?

Pues algo harás mal.

¿No será que tienes un formulario por checkbox?

Sería bueno que muestres exactamente cómo haces las cosas, adivinar no se puede.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: checkbox, formulario, html
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:29.