entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Este es mi problema, que cuando envio recibo errror de los dos restante, y quiesiera ayuda, soy autodidacta, y me gustaria que me den un empujon en esto.

<form method="POST" action="">
    <input  id="Coca Cola" name="bebida" type="radio" value="1">Coca Cola(1$) 
  <br>
  <input  id="Fanta" name="bebida" type="radio"   value="0.80">Fanta(0.80$) 
  <br>
  <input  id="Agua" name="bebida" type="radio"   value="0.50">Agua(0.50$)
  <br>
<input type="submit" name="enviar" value="Enviar Datos" >
<form>
  <?php
  if (isset ($_POST['enviar'])) {
   $precio= ($_POST['bebida']);
        $iva = 0.21;
    $verpreciototal = ($precio * $iva)+ $precio;
  echo "El precio de la Coca Cola es $precio + $iva= $verpreciototal";
  echo "El precio de la Fanta es $precio + $iva= $verpreciototal";
  echo "El precio del Agua es $precio + $iva= $verpreciototal";
  }
?>

2 Respuestas

3votos

blaDDI Puntos2260
<form action="recibir.php" method="get">

    <input type="radio" name="bebida[Coca cola]" id="Coca" value="1">
    <label for="como1">Coca Cola(1$)</label>

    <input type="radio" name="bebida[Fanta]" id="Fanta" value="0.8">
    <label for="como2">Fanta(0.80$) </label>

    <input type="radio" name="bebida[Agua]" id="Agua" value="0.7">
    <label for="como3">Agua(0.50$)</label>

    <button type="submit">Enviar</button>

</form>

<?php print_r($_GET["bebida"]);?>

1voto

white comentado

Bladi te ha dado una solución válida, pero desafortunadamente no puso la explicación de esta :(

él te propone usar un vector html en tus campos para poder enviar el nombre del producto como clave y el precio como valor, tendrias que recibir un arreglo de esta forma:

[bebida] = array( [Agua] => 0.7 )

pongo el código de como podrías obtener esos datos:

<form method="POST" action="">
    <input  id="Coca Cola" name="bebida[Coca Cola]" type="radio" value="1"> Coca Cola(1$)
    <br>
    <input  id="Fanta" name="bebida[Fanta]" type="radio" value="0.80"> Fanta(0.80$)
    <br>
    <input  id="Agua" name="bebida[Agua]" type="radio" value="0.50"> Agua(0.50$)
    <br>
    <input type="submit" name="enviar" value="Enviar Datos" >
<form>
<br>

<?php
  if (isset($_POST['enviar']) && isset($_POST['bebida']) && is_array($_POST['bebida'])) {
      $precio = (float) array_values($_POST['bebida'])[0];
      $bebida = array_keys($_POST['bebida'])[0];
      $iva = 0.21;
      $subtotal = (float) (($iva * $precio) / 100);
      $preciototal = (float) ( $subtotal + $precio);

      echo sprintf('El precio total de el producto %s es %.2f y el subtotal es: %f', $bebida, $preciototal, $precio);
  }
?>

1voto

blaDDI comentado

Lo siento por no explicar, el dijo que es autodidacta :) ..... gracias White

2votos

Leonardo-Tadei Puntos227320

La solución de @blaDDI es ingeniosa y la explicación de @white correctísima y clara, pero hay un error dee concepto en el uso de los radio button en HTML.

La idea de los radio button es una selección excluyente mutuamente, es decir, si hay 3 radios con el mismo valor, el navegador enviará solo el seleccionado y no los otros dos, por lo que el script falla al querer leer los valores no recibidos.

La solución es ingeniosa porque al hacer de los radio un vector, se reciben todos los valores, pero esa no es la función del componente, que es tratar de minimizar el envío de datos.

Se podría solucionar de esta otra manera enviando un solo dato:

<?php
$coca=1;
$fanta=0.8;
$agua=0.5;
$iva=0.21;
?>
<form method="post" action="">
    <input  id="Coca Cola" name="bebida" type="radio" value="coca">Coca Cola(<?=$coca?>$) 
  <br>
  <input  id="Fanta" name="bebida" type="radio"   value="fanta">Fanta(<?=$fanta?>$) 
  <br>
  <input  id="Agua" name="bebida" type="radio"   value="agua">Agua(<?=$agua?>$)
  <br>
<input type="submit" name="enviar" value="Enviar Datos" >
<form>
  <?php
  if (isset ($_POST['enviar'])) {
    print("<h2>Valores de las bebidas:<br />");
    print( "El precio de la Coca Cola es $coca + $iva= {$coca*$iva}<br />");
    print("El precio de la Fanta es $fanta + $iva= {$fanta*$iva})<br />";
    print("El precio del Agua es $agua + $iva= {$agua*$iva})<br />";

   $cual= ($_POST['bebida']);
   switch($cual){
     case 'coca': $precio = $coca; break;
     case 'fanta': $precio = $fanta; break;
     case 'agua': $precio = $agua; break;
    }
    $verpreciototal = ($precio * $iva)+ $precio;
    print("Ud eligió $cual: $precio + $iva = {$agua*$iva}) ");
  }
?>

De esta manera conseguís varias cosas:

  • que el funcionamiento sea independiente de los datos del formulario.
  • que el precio no esté en el formulario (en dónd epuede ser fácilmenet cambiado antes de que se envíe).
  • recibir un solo valor en vez de 3.
  • aproximarse más a una solución real en dónde los valores estarán almacenados en algún lugar y serán leídos para ser usados.

Saludos cordiales!

PD: perdón si el script tiene algún error de sintaxis. Lo escribí acá y no tuve tiempo de probarlo.

0voto

blaDDI comentado

También hay que agregar que los valores de los radios solo se incluyen en el Array [bebidas] si estos son seleccionados de lo contrario no, y no se envían.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta