Foros del Web » Programando para Internet » PHP »

Con Checkbox sin marcar no consigo actualizar el campo en la BD

Estas en el tema de Con Checkbox sin marcar no consigo actualizar el campo en la BD en el foro de PHP en Foros del Web. Hola, he mirado antes en foro pero no encuentro solución a mi problema, Bueno Ahí va: Tengo una BD con un campo "pago" que sólo ...
  #1 (permalink)  
Antiguo 20/02/2005, 18:07
 
Fecha de Ingreso: febrero-2005
Mensajes: 7
Antigüedad: 19 años, 2 meses
Puntos: 0
Con Checkbox sin marcar no consigo actualizar el campo en la BD

Hola, he mirado antes en foro pero no encuentro solución a mi problema, Bueno Ahí va:
Tengo una BD con un campo "pago" que sólo puede tomar valores "Si" y "No", Mediante una consluta muestro todos los registros y el campo "pago" mediante un checkbox, cuando marco la casilla de verificación y envio formulario me actualiza el campo "pago", sin embargo si inicialmente el valor de ésta era "Si" y la marco como "No", el campo no se actualiza, ya se que el checkbox cuando esta sin marcar, no pasa la variable, ¿existe alguna solución a mi problema?
Aquí está el código de la consulta con el formulario:
Código PHP:
[SIZE=1]$resultado=mysql_query("SELECT DNI,apellido1,nombre,poblacion,pago FROM $tabla",$conexion);

echo 
"<table align=center border=2 bgcolor='#F0FFFF'>";
    echo 
"<td colspan=5 align=center>Para modificar marca en la casilla correspondiente</td><tr>";
        echo 
"<td colspan=4 align=center>Datos de los participantes</td>";
    echo 
"<td align=center>Pago</td><tr>";

   echo 
"<form name='modificar' method=\"POST\" action='intro_pago.php'>";

while(
$salida mysql_fetch_array($resultado)){

          for (
$i=0;$i<5;$i++){

if(
$i!=4){

    echo 
"<td>",$salida[$i],"</td>";
        }else{
        echo 
"<td>";

        switch (
$salida[$i]){
        case 
'Si':
        echo 
"<input name=ident[$salida[0]] type='checkbox' value='Si' checked>";
        break;
        
        case 
'No':
        echo 
"<input name=ident[$salida[0]] type='checkbox' value='Si' >";
        
        break;
        }
      echo 
"</td></tr>";
    }

    }[/
SIZE]

Aquí está el código que actualiza al base de datos:
Código PHP:
foreach ($_POST['ident'] as $indice => $valor) {

$resultado=mysql_query("UPDATE $tabla SET pago='$valor' WHERE DNI='$indice'"$conexion);


Gracias de antemano por vuestra ayuda,
  #2 (permalink)  
Antiguo 21/02/2005, 09:13
Avatar de lalogrosz  
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 339
Antigüedad: 21 años, 11 meses
Puntos: 6
Consejo

Fijate que ambos checkboxs tienen el mismo valor "Si". Por otra parte, para lo que necesitas no hace falta ponerle ningun value a los checkboxs.
Si esta seleccionado te va a llegar como "on" sino vacio.

Hace esto
Código PHP:
if($i!=4){ 

    echo 
"<td>",$salida[$i],"</td>"
}else{ 
        echo 
"<td>"

        
//Si viene como si, le indicas que lo chequee, sino se lo sacas
        
if($salida[$i] == 'Si')
             
$check "checked";
        else
             
$check "";

        
//Haces un solo checkbox
        
echo "<input name=ident[$salida[0]] type='checkbox' $check>";

        } 
      echo 
"</td></tr>"

Cuando recibis los valores haces esto
Código PHP:
foreach ($_POST['ident'] as $indice => $valor) { 
    if(
$valor)
          
$valor 'Si';
    else
          
$valor 'No';
 
    
$resultado=mysql_query("UPDATE $tabla SET pago='$valor' WHERE DNI='$indice'"$conexion); 


Suerte
  #3 (permalink)  
Antiguo 21/02/2005, 18:10
 
Fecha de Ingreso: febrero-2005
Mensajes: 7
Antigüedad: 19 años, 2 meses
Puntos: 0
Sigue sin funcionar

La cuestión es que si inicialmete el checkbox estaba marcado y lo desmarco, no pasa la variable ident[DNI] de ese registro por el formulario y por tanto el bucle foreach no puede leer esos valores no asignados y los valores de los registros cambiados a OFF siguen en ON.

He probado ha hacerlo con botones de opción y aquí no hay ningún problema, sólo que queda más elegante con las casillas de verificación. De todas formas gracias por tu interés y ayuda,

Saludos
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 10:32.