Foros del Web » Programando para Internet » PHP »

Problemas para guardar valor de checkbox en la BD

Estas en el tema de Problemas para guardar valor de checkbox en la BD en el foro de PHP en Foros del Web. Hola señores: Ya se me agotaron las ideas para encontrar la forma de hacer que la BD reciba el valor de dos checkbox, uno de ...
  #1 (permalink)  
Antiguo 19/09/2009, 19:23
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Problemas para guardar valor de checkbox en la BD

Hola señores:

Ya se me agotaron las ideas para encontrar la forma de hacer que la BD reciba el valor de dos checkbox, uno de ellos que servira para validar comentarios.

Mi app esta basado en dos archivos. Este primer archivo me sirve como panel de control para enlistar y saber cuales comentarios han sido validados y cuales no:

Código PHP:

<?php

if ($_POST['listdata'] == 1):

    
$tipodata $_POST['tipodata'];

    
mysql_connect ('localhost''root''123456') or die ($MenjError 'No se puede acceder a la base de datos: ' mysql_error());
    
mysql_select_db ('basededatos');
     
    
$query mysql_query ('SELECT * FROM comentarios');
     
    
$showtitu '<div class="titu">' $tipodata '</div>';
     
    function 
setData($arr)
    {
        
        if(
$arr['ttr'] == 1)
        {
            
$ttrOK ' checked';
        } 
        
        if(
$arr['valid'] == 1)
        {
            
$validOK ' checked';
        } 
        
        
$dat '<div class="item"><form action="editapp.php" method="POST">';
        
$dat .= '<input type="hidden" name="ID" value="' $arr['ID'] . '" />ID: ' $arr['ID'] . ' | ';
        
$dat .= '<input type="checkbox" value"1" name="ttr"' $ttrOK ' />Twitter | ';
        
$dat .= '<input type="checkbox" value"1" name="valid"' $validOK ' />V&aacute;lido';
        
$dat .= '<input type="submit" name="boton" value="Guardar Cambios" style="margin-left: 30px;" />';
        
$dat .= '</div></form>';
        
        return 
$dat;
        
    }
     
    while (
$row mysql_fetch_array($query))
    {
          
        if (
$tipodata == 'Validados' && $row['valid'] == 1)
        {
            
$showdata .= setData($row);
        }
          
        if (
$tipodata == 'No validados' && $row['valid'] == 0)
        {
            
$showdata .= setData($row);
        }
          
        if (
$tipodata == 'Todos')
        {
            
$showdata .= setData($row);
        }
          
    }
    
endif;

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es">

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<head>

<title>Administrar Comentarios</title>
<meta name="robots" content="noindex, nofollow">

<style type="text/css">
<!--

html, body {
    height: 100%;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    line-height: 18px;
    text-align: left;
}

.item {
    padding-bottom: 10px;
    margin-bottom: 10px;
    border-bottom: dashed 1px #CCCCCC;
    width: 400px;
}

.titu {
    border: solid 1px #CCCCCC;
    padding: 8px;
    font-size: 18px;
    font-weight: bold;
    margin-top: 35px;
    margin-bottom: 35px;
    text-transform: uppercase;
    width: 385px;
}

-->
</style>
    
</head>
<body>


<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">

<input type="hidden" name="listdata" value="1" />

<input type="submit" name="tipodata" value="Todos" />
<input type="submit" name="tipodata" value="Validados" />
<input type="submit" name="tipodata" value="No validados" />

</form>


<?=$showtitu?>
<?=$showdata?>

<?=$MenjError?>


</body>
</html>

Este segundo archivo es quien se encarga de guardar los cambios en la BD luego de recibirlos:

Código PHP:
<?php

$bot 
$_POST['boton'];
$ID $_POST['ID'];
$valid = (isset($_POST['valid']) && $_POST['valid'] == '1') ? 0;
$ttr = (isset($_POST['ttr']) && $_POST['ttr'] == '1') ? 0;


mysql_connect ('localhost''root''123456') or die ($MenjError 'No se puede acceder a la base de datos: ' mysql_error());
mysql_select_db ('basededatos');


if (
$bot == 'Guardar Cambios'):
    
    
$sql "UPDATE comentarios SET valid='$valid', ttr='$ttr' WHERE ID = '$ID'";
    
$result mysql_query($sql);
    
    
mysql_close();
    
    if (
$result)
    {
        echo 
'Datos actualizados.';
    } else {
        echo 
'No se pudieron actualizar los datos.';
    }
    echo 
' <a href="edit.php">Regresar</a>';

endif;

?>
Cuando el primer archivo me enlista los datos que provienen de la BD, los checkbox se marcan apropiadamente, pero cuando aplico uno de los checkbox ("ttr" o "valid") y envio para guardar el cambio no pasa nada porque la variable llega vacia, sin embargo, cuando hago cambios en los demas campos, esos cambios si se guardan.

Alguna sugerencia de como guardar los cambios que haga en los checkbox ???
__________________
JuniHH
- Mi blog
- Mi portafolio

Última edición por junihh; 19/09/2009 a las 19:37
  #2 (permalink)  
Antiguo 20/09/2009, 18:07
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Problemas para guardar valor de checkbox en la BD

Hola
Porque no pruebas esto en tu archivo editapp.php

Cambia esto
Código php:
Ver original
  1. $valid = (isset($_POST['valid']) && $_POST['valid'] == '1') ? 1 : 0;
  2. $ttr = (isset($_POST['ttr']) && $_POST['ttr'] == '1') ? 1 : 0;

Por esto
Código php:
Ver original
  1. $valid = (isset($_POST['valid'])) ? 1 : 0;
  2. $ttr = (isset($_POST['ttr'])) ? 1 : 0;
Porque el cambio? pues porque si te fijas, si pones a imprimir el $_POST de valid y ttr no te llevan valor 0 o 1, sino que existen o no en el arreglo de $_POST, por ende es suficiente con el isset para saber si estan o no llegando, y con eso ya el resto de tu codigo debe funcionar bien
Saludos
  #3 (permalink)  
Antiguo 20/09/2009, 19:01
Avatar de junihh  
Fecha de Ingreso: febrero-2004
Ubicación: República Dominicana
Mensajes: 997
Antigüedad: 20 años, 2 meses
Puntos: 7
Respuesta: Problemas para guardar valor de checkbox en la BD

Hola @mortiprogramador. Como me urgia solucionar el problema, segui investigando la web y luego de par de horas buscando logre encontrar un metodo extremadamente simple de aplicar:

'<input type="checkbox" value"1" name="valid[]"' . $validOK . ' />V&aacute;lido';

Nota los corchetes en name="valid[]", eso convierte esa variable en un array, cosa que me sorprendio, pero que funciono. Creo que el metodo isset lo probe (de los muchos ejemplos que trate) y no me funciono.

Gracias por tu ayuda de todos modos.
__________________
JuniHH
- Mi blog
- Mi portafolio
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 23:46.