Problema con el parámetro checked al enviar un formulario

  • Autor Autor JetLagFox
  • Fecha de inicio Fecha de inicio
J

JetLagFox

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas,

Estoy intentando hacer un botón toggle switch funcional. La idea es que al hacer click sobre el botón, que está asignado a un input de tipo checkbox, se envíe el formulario. El problema es que si el input tiene el parámetro checked el formulario no se envía.

Estoy usando como HTML:

Insertar CODE, HTML o PHP:
<form class="" action="" method="post">
            <?php if ($precios_para_gold == "con_gold"): ?>
                <input id="hola" type="checkbox"  name="probando" value="on" onchange="submit()" checked>
            <?php else: ?>
                <input id="hola" type="checkbox"  name="probando" value="off" onchange="submit()" checked>
            <?php endif; ?>

            <label class="switch" for="hola" >
                <span style='position:absolute;'></span>
            </label>
        </form>

Y lo recibo de esta forma:

PHP:
if (isset($_POST['probando'])) {
      $valor_checkbox = $_POST['probando'];
      echo $valor_checkbox;
 }

No uso el parámetro value poruqe no es necesario, pero aún usándolo me ocurre lo mismo.
 
realmente creo que lo correcto sería de la siguiente forma, puedes probar y analizar para ver si te sirve.

el no interpreta la si cual de las acciones estas queriendo hacer por tanto seria mejor identificar si se utilizo el method post para determinar una accion X, desde mi punto de vista claro esta.

PHP:
<?php
	$precios_para_gold = "";
	if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      $valor_checkbox = isset($_POST['probando']) ? $_POST['probando'] : 'off';
	}  
?>
<html>
<head>
	<title>Submit Form with CheckBox Change Value</title>
</head>
<body>
<form class="" action="" method="post">
	<input id="hola" type="checkbox" name="probando" value="on" onchange="submit()" <?php echo ($precios_para_gold == 'con_gold' ? 'checked' : '') ?> />
	<label class="switch" for="hola" >
		<span style='position:absolute;'><?php echo empty($valor_checkbox) ? '' : $valor_checkbox; ?></span>
	</label>
</form>
</body>
</html>
 
realmente creo que lo correcto sería de la siguiente forma, puedes probar y analizar para ver si te sirve.

el no interpreta la si cual de las acciones estas queriendo hacer por tanto seria mejor identificar si se utilizo el method post para determinar una accion X, desde mi punto de vista claro esta.

PHP:
<?php
	$precios_para_gold = "";
	if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      $valor_checkbox = isset($_POST['probando']) ? $_POST['probando'] : 'off';
	}  
?>
<html>
<head>
	<title>Submit Form with CheckBox Change Value</title>
</head>
<body>
<form class="" action="" method="post">
	<input id="hola" type="checkbox" name="probando" value="on" onchange="submit()" <?php echo ($precios_para_gold == 'con_gold' ? 'checked' : '') ?> />
	<label class="switch" for="hola" >
		<span style='position:absolute;'><?php echo empty($valor_checkbox) ? '' : $valor_checkbox; ?></span>
	</label>
</form>
</body>
</html>

¡Gracias! Me funciona pero me entra en conflicto con otro formulario que tenía antes que también usa el método POST. Este primer formulario funciona bien, el segundo, que es el que he posteado, funciona también, el problema es cuando el switch está activo. Si en ese momento envío el primer formulario, entra en las siguientes líneas:


PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      if (isset($_POST['probando'])) {
         echo "El checkbox tiene un valor";
         setcookie('es_gold', "con_gold", time() + (86400 * 365), "/"); // 86400 = 1 day
      } else {
        echo "El checkbox no ha sido activado";
        setcookie('es_gold', "sin_gold", time() + (86400 * 365), "/"); // 86400 = 1 day
      }

      //miramos si la ficha es de un juego de Xbox One o 360 para redirigir
      if ($tipo_juego == "XboxOne") {
         header("Location: " . $ruta . "Juegos/Xbox-One/" .  $posts[0]['id'] . "/" . limpia_url($posts[0]['Juego']) . "/");
      } else if ($tipo_juego == "Xbox360") {
         header("Location: " . $ruta . "Juegos/Xbox-360/" .  $posts[0]['id'] . "/" . limpia_url($posts[0]['Juego']) . "/");
      }

    }

Y me modifica el valor del checkbox. ¿Hay alguna forma de que no sólo se ejecute el formulario por método POST? De esa forma trabajarían de forma independiente.
 
si tenes 2 formularios, podes agregar en 1 de ellos un <input type="hidden" name="x" value="form2"> de tal manera a saber si el submit realizado es por cual de los 2 forms...
 
Atrás
Arriba