Foros del Web » Programando para Internet » PHP »

problema con checkbox

Estas en el tema de problema con checkbox en el foro de PHP en Foros del Web. Hola, un saludo a todos por acá soy nuevo en el foro y antes de postear leí mucho sobre el tema aun así no puedo ...
  #1 (permalink)  
Antiguo 19/07/2011, 23:12
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
problema con checkbox

Hola, un saludo a todos por acá soy nuevo en el foro y antes de postear leí mucho sobre el tema aun así no puedo solucionarlo, espero me ayuden.
este es mi formulario para modificar los datos de un cliente recupera la información de la bd correctamente, pero al enviar las modificaciones el campo checkbox siempre esta en cero.
modificar.php

Código PHP:
<?php
require_once("conexion.php");
$sql="select * from cliente where idcliente=".$_GET["idcliente"]."";
$res=mysql_query($sql,$con);
?>
<html>
<head>
<title>Modificar Cliente</title>
<script language="javascript" type="text/javascript" src="js/funciones.js"></script>
</head>

<body onLoad="limpiar()">
<?php
if ($reg=mysql_fetch_array($res))

?>
<form action="edit.php" method="post" name="form">
<table align="center" width="400">
<tr>
<td valign="top" align="center" width="400" colspan="2">
<h3>Modificar datos de Cliente</h3>
</td>
</tr>

<tr>
<td align="right" valign="top" width="200">
Nombre
</td>
<td valign="top" align="left" width="200">
<input type="text" name="nom" value="<?php echo $reg["nombre"];?>" />
</td>
</tr>

<tr>
<td align="right" valign="top" width="200">
Direccion
</td>
<td valign="top" align="left" width="200">
<input type="text" name="dir" value="<?php echo $reg["direccion"];?>" />
</td>
</tr>

<tr>
<td align="right" valign="top" width="200">
Tel&eacute;fono
</td>
<td valign="top" align="left" width="200">
<input type="text" name="tel" value="<?php echo $reg["telefono"];?>" />
</td>
</tr>

<tr>
<td align="right" valign="top" width="200">
E-Mail
</td>
<td valign="top" align="left" width="200">
<input type="text" name="mail" value="<?php echo $reg["email"];?>" />
</td>
</tr>

<tr>
<td align="right" valign="top" width="200">
Estado
</td>
<td valign="top" align="left" width="200">
<input type="checkbox" name="est" value="<?php if($reg["estado"]==0){echo ('"0"');$reg["estado"]==0;}else{echo ('"1" checked');$reg["estado"]==1;};?> />
</td>
</tr>

<tr>
<td valign="top" align="center" width="400" colspan="2">
<input type="hidden" name="idcliente" value="<?php echo $_GET["idcliente"];?>">
<input type="button" value="Volver" title="Volver" onClick="history.back();" />
&nbsp;&nbsp;||&nbsp;&nbsp;
<input type="button" value="Modificar" title="Modificar" onClick="validar()" />
</td>
</tr>

</table>
</form>
<?php
}
?>
</body>
</html>

edit.php

Código PHP:
<?php
print_r
($_POST);
require_once(
"conexion.php");

if(
$_POST["est"]==1)
{
   
   
//$_POST['est'];
      
   
$sql="update cliente
set
nombre='"
.$_POST["nom"]."',
telefono='"
.$_POST["dir"]."',
telefono='"
.$_POST["tel"]."',
email='"
.$_POST["mail"]."',
estado='"
.$_POST["est"]."'
where
idcliente="
.$_POST["idcliente"]."";
echo (
$_POST["est"]);
echo(
"estoy en el if con calor 1");
   
}
else
{
       
 
$sql="update cliente
set
nombre='"
.$_POST["nom"]."',
telefono='"
.$_POST["dir"]."',
telefono='"
.$_POST["tel"]."',
email='"
.$_POST["mail"]."',
estado='"
.'0'."'
where
idcliente="
.$_POST["idcliente"]."";
      




//echo $sql;
$res=mysql_query($sql,$con);


?>
  #2 (permalink)  
Antiguo 20/07/2011, 00:34
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: problema con checkbox

Comprueba como se establece el valor en el formulario andtes de enviarlo por post,

Código PHP:
Ver original
  1. value="<?php ($reg["estado"]==0?0:1)?>"

No entiendo bien para qué haces

Código PHP:
Ver original
  1. echo "0";
y a continuación

Código PHP:
Ver original
  1. $reg["estado"]= 0;

cuando ya vale 0.

Comprueba si $reg["estado"] vale 0 o si no vale nada, en ese caso debes utilizar:

Código PHP:
Ver original
  1. value="<?php (!$reg["estado"]?0:1)?>"

Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 20/07/2011, 00:52
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

gracias por tu tiempo.
lo del echo "0" lo puse a modo de comprobación. olvide retirarlo haré las pruebas con lo que me indicas y te cuento de todas maneras agradesco mucho tu ayuda
  #4 (permalink)  
Antiguo 20/07/2011, 00:59
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

ahh.. como comente anteriormente esta parte funciona osea si recupera correctamente el valor de la bd a( si en mi bd ese id tiene valor 1 el checkbox carga marcado) lo que no funciona es si quiero cambiarlo al recibir el post en el archivo edita.php el $est siempre esta en 0. bueno eso ahora probaren tu recomendación un saludo.

Última edición por jpbadoino; 20/07/2011 a las 01:30
  #5 (permalink)  
Antiguo 20/07/2011, 10:04
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: problema con checkbox

Hola jpbadoino.

Parece que tienes un error de sintaxis. Te sobran las comillas después de value. Prueba así:

Código PHP:
<input type="checkbox" name="est" value=<?php if($reg["estado"]==0){echo ('"0"');}else{echo ('"1" checked');$reg["estado"]==1;}?> />
  #6 (permalink)  
Antiguo 20/07/2011, 13:10
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

hola Nexus10,
gracias por responder, sabes como indicas funciona, tanto como lo tenia... el problema es que cuando manda el submit de la forma que me indicas solo cuando en la bd hay "0" sin comillas manda el post cuando hay "1" no lo hace, quizá con un javascript se solucione con un evento onclick para que haga la modificación antes del submit... pero no se bien como hacerlo, sigo indagando un saludo... y todo comentario es bienvenido.
  #7 (permalink)  
Antiguo 20/07/2011, 13:46
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: problema con checkbox

He vuelto a mirar tu código y creo que el error puede estar aquí:

if ($_POST["est"]==1)

Prueba así:

if ($_POST["est"]=="1")

La otra línea déjala como yo te la puse porque tenías un error de sintaxis. Para comprobarlo mira el código fuente de la página cuando se carga y verás que te sobraban esas comillas.
  #8 (permalink)  
Antiguo 20/07/2011, 14:59
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

tienes razón, aun así el hay problemas en el post

cuando:

bd modificar.php add.php

bd=0, form=0, array del post= no existe ([est] =>)
bd=0, form=1, array del post= ([est] =>0)

bd=1, form=1, array del post= ([est] =>1)
bd=1, form=0, array del post= no existe ([est] =>)

explico.
Cuando en la bd el valor es 0 y en el form no hago modificación del estado después del submit, [est]=> no aparece en el array del post.
Si en la bd el valor es 0 y en el form hago la modificación es decir le hago checked, después del submit, [est]=> llega con valor 0
pasa lo contrario con el valor 1 .. espero me entiendas.

muy raro, estoy cada vez aun mas perdido.
  #9 (permalink)  
Antiguo 20/07/2011, 18:21
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

hola otra vez.
acá se me ocurrió algo se que no es lo mejor pero es lo único en lo que pensé

Código PHP:
<td valign="top" align="left" width="200"> 

<?PHP
if ($reg["estado"] == $reg["estado"])
{
?>
<input type="checkbox" name="est" value=
<?php 
if($reg["estado"]==0)
{
    echo (
'"0"');    
}
else
{
    echo (
'"1" checked');    
}

?> 
/>

<?PHP 
}
else
{
    if (
$reg["estado"] == 1)
    {
        
?>
        <input type="checkbox" name="est" value="0" />
        <?php
        
    
}
    if (
$reg["estado"] == 0)
    {
        
?>
        <input type="checkbox" name="est" value="1" checked />
        <?php
        
    
}
}




?>
</td>
el detalle es que esto tendría que ser de alguna manera interactivo es decir que en el form cada que modifique el value del checkbox este código se aplique.
bueno es lo que tengo espero sus comentarios
  #10 (permalink)  
Antiguo 20/07/2011, 19:50
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

hola..
perdón por tanta molestia, creo haber solucionado ya gran parte del código haber si me echan una ultima manito

Código:
function estado()
{
	var form =document.form;
	if (form.est.checked)
	{
		form.est.value="1";
		return false;
	}
	
	else 
	{
		form.est.value="0";
		return false;
	}
}
Código PHP:
<td valign="top" align="left" width="200"> 

<?PHP
if ($reg["estado"] == $reg["estado"])
{
?>
<input type="checkbox" name="est" onChange="estado()" value=
<?php 
if($reg["estado"]==0)
{
    echo (
'"0"');    
}
else
{
    echo (
'"1" checked');    
}

?> 
/>
<?PHP
}?>
</td>
el problema es que cuando quiero actualizar el estado a 0 nunca llega al array supongo que fallo en la sintaxis espero su ayuda.. se los agradezco
  #11 (permalink)  
Antiguo 20/07/2011, 23:45
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

Hola bueno solo para actualizar el post ya solucione mi problema lo dejo para criticas y mejoras un saludo.

Código:
function estado()
{
	var form =document.form;
	alert("entro a java");
	if (form.est.checked)
	{
		form.est.value="1";
		return false;
	}
	
	else 
	{
		form.est.value="0";
		return false;
	}
}
Código PHP:
</td>
<td valign="top" align="left" width="200"> 


<input type="checkbox" name="est" onChange="estado()" value=
<?php 
if($reg["estado"]==0)
{
    echo (
'"0"');    
}
else
{
    echo (
'"1" checked');    
}

?> 
/>

</td>
Código PHP:
<?php
require_once("conexion.php");
if(isset(
$_POST['est'])==null)
{
    
$_POST["est"]="0";
}
print_r($_POST);
$sql="update cliente set
        nombre='"
.$_POST["nom"]."',
        direccion='"
.$_POST["dir"]."',
        telefono='"
.$_POST["tel"]."',
        email='"
.$_POST["mail"]."',
        estado='"
.$_POST["est"]."'
        where
        idcliente="
.$_POST["idcliente"]."";
echo 
$sql;
$res=mysql_query($sql,$con);
echo 
"<script type=''>
    window.location='index.php';
</script>"
;
?>
  #12 (permalink)  
Antiguo 21/07/2011, 04:35
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: problema con checkbox

Si lo dejas abierto para críticas, ahí va la mía.

No te tienes que empeñar en que el form te envíe 0. Los checkbox se tratan de forma diferente, por un tema muy fácil de entender. Si un checkbox se marca, se envía su name (como índice) y su value (como valor) en el array del $_POST y si no se marca, no se envía nada. Esto es así porque para qué quieres enviar el valor si es "NO MARCADO", es mejor no mandar nada, ahorras en recursos y en eficiencia.

Dicho esto, para qué variar el envío? Por qué no varías mejor la recepción? sabiendo que cuando se marcó viaja y cuando no, no viaja, no será mucho mejor mover la comprobación al php que recibe el formulario y poner algo como esto:
Código PHP:
$sql="update cliente set nombre='".$_POST["nom"]."', direccion='".$_POST["dir"]."', telefono='".$_POST["tel"]."', email='".$_POST["mail"]."',";
if (isset(
$_POST['est'])) {
    
$sql .= " estado='1'";
} else {
    
$sql .= " estado='0'";
}
$sql .= " where idcliente=".$_POST["idcliente"]; 
Fácil, sencillo y para toda la familia. Te ahorras incluso el JS. Espero que te sirva, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #13 (permalink)  
Antiguo 21/07/2011, 09:35
 
Fecha de Ingreso: julio-2011
Mensajes: 9
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: problema con checkbox

hola. si claro tienes mucha razon pero unos post arriba explique que el post no funcionaba bien. y trate asi no funcionó tal vez culpa mia (obvio) y bueno tras probar fue lo que finalmente funciono. ahora probare tu recomendación ya que mas que seguro antes tenia errores.de.sintaxis un saludo y gracias.

Etiquetas: checkbox
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 05:12.