Problema com o parâmetro checked ao enviar um formulário

  • Autor Autor JetLagFox
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
J

JetLagFox

Gamma
Usuário com poucas negociações! Use sempre o saldo do 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:

Inserir CODE, HTML ou 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.
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
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...
 
Voltar
Topo