Как я могу получить значения multiple checkbox и проверить его в операторе switch?


в практике меня просят выполнять операции с двумя числами и только с switch-case, плюс я не могу использовать функции, отличные от предопределенных PHP.

я должен иметь возможность выбрать 2 или более вариантов одновременно, но в опции умножения это дает мне ошибку, а остальные не помещают их вместе.

HTML:

<form name="Formulario" method="post" action="ejercicio4.php">
            <table>
                <tr>
                    <td>Introduce elprimer número (a): <input type="number" name="numa" required/>      Introduce el segundo número (b): <input type="number" name="numb" required>
                    </td>
                </tr>
                <tr>
                    <td>
                        Operaciones a realizar
                    </td>
                </tr>
                <tr>
                    <td>
                    <input type="checkbox" name="operacion" value="1">Obtener la potencia de a elevado a b <br/>
                    <input type="checkbox" name="operacion2" value="2">Obtener el producto de a por b<br/>
                    <input type="checkbox" name="operacion3" value="3">Obtener la divisón de a entre b<br/>
                    <input type="checkbox" name="operacion4" value="4">Obtener el resto de la divisón de a entre b<br/>
                    <input type="checkbox" name="operacion5" value="5">Obtener el mayor de a y b<br/>
                    </td>
                    <tr>
                        <td><input type="submit" name="Enviar">
                        <input type="reset" name="Reestablecer">
                        </td>
                    </tr>
                </tr>
            </table>

PHP:

<?php
$a = $_POST['numa'];
$b = $_POST['numb'];
$operacion = $_POST['operacion'];
$operacion2 = $_POST['operacion2'];
$operacion3 = $_POST['operacion3'];
$operacion4 = $_POST['operacion4'];
$operacion5 = $_POST['operacion5'];
//Ejercicio
echo "Los números introducidos son: $a y $b <br/>";
//Para ocultar los mensajes de error les asigno un valor a aquellas variables vacías
if (empty($operacion)) {
    $operacion = 0;
}
elseif (empty($operacion2)) {
    $operacion2 = 0;
}
elseif (empty($operacion3)) {
    $operacion3 = 0;
}
elseif (empty($operacion4)) {
    $operacion4 = 0;
}
elseif (empty($operacion5)) {
    $operacion5 = 0;
}
else{
    echo "Has marcadado todas las operaciones";
}
switch ($operacion) {
    case '1':
        $pot= pow($a,$b);
        echo "El resultado es $pot <br/>";
        break;

    default:
        echo "No has seleccionado la opción 1<br/>";
        break;
}
switch ($operacion2) {
    case '2':
        $prod = $a*$b;
        echo "El resultado es $prod <br/>";
        break;

    default:
        echo "No has seleccionado la opción 2 <br/>";
        break;
}switch ($operacion3) {
    case '3':
        $div= $a/$b;
        echo "El resultado es $div <br/>";
        break;

    default:
        echo "No has seleccionado la opción 3";
        break;
}switch ($operacion4) {
    case '4':
        $rest = $a%$b;
        echo "El resultado es $rest <br/>";
        break;

    default:
        echo "No has seleccionado la opción 4 <br/>";
        break;
}switch ($operacion5) {
    case '5':
        if ($a == $b) {
            echo "Los números son iguales";
        }
        elseif ($a > $b) {
            echo "$a es mayor";
        }
        else{
            echo "$a es menor";
        }
        break;

    default:
        echo "No has seleccionado la opción 5 <br/>";
        break;
}
?>

однако, хотя операции делают их хорошо, это дает мне ошибку:

Notice: Undefined index: operacion in /opt/lampp/htdocs/practica1/ejercicio4.php on line 4

Notice: Undefined index: operacion3 in /opt/lampp/htdocs/practica1/ejercicio4.php on line 6

Notice: Undefined index: operacion4 in /opt/lampp/htdocs/practica1/ejercicio4.php on line 7

Notice: Undefined index: operacion5 in /opt/lampp/htdocs/practica1/ejercicio4.php on line 8
Author: Black Sheep, 2016-10-23

2 answers

Чтобы вытащить несколько checkbox значений, вы должны запустить его как array's, добавив [] (квадратные скобки) в конец имен в атрибутах name, например:

                                 <!-- ↓ corchetes --> 
<input type="checkbox" name="operacion[]" value="1">Obtener la potencia de a elevado a b <br/>
<input type="checkbox" name="operacion[]" value="2">Obtener el producto de a por b<br/>
<input type="checkbox" name="operacion[]" value="3">Obtener la divisón de a entre b<br/>

Как только это будет сделано, вы можете вытащить значения из массива $_POST['operacion'][]:

// checkbox #1 marcado
echo $_POST['operacion'][0]; // salida: "1"

Теперь мы можем вытащить все значения, которые мы получаем из checkbox с помощью foreach():

$operaciones = $_POST['operacion'];
foreach($operaciones as $operacion){
   echo $operacion;
}

Если ни один checkbox не проверен, и вы не проверяете его перед циклом в foreach(), вы получите сбой, мы просто избегаем, если проверяем его с помощью isset () выше:

$operaciones = $_POST['operacion'];

if (isset($operaciones) {

    foreach($operaciones as $operacion){
        echo $operacion;
    }
}

Мы почти готовы, switch отсутствует!

В switch то, что мы делаем, это просто проверить значения, которые дает нам foreach(), (я оставляю вас здесь и все решение):

<?php
$a = (int)$_POST['numa'];
$b = (int)$_POST['numb'];

$operaciones = (int)$_POST['operacion'];

echo "Los números introducidos son: $a y $b <br>";

if (isset($operaciones)) {

    foreach($operaciones as $operacion){

        switch ($operacion) {

            case 1:
                $pot = pow($a, $b);
                echo "El resultado es $pot <br>";
                break;
            case 2:         
                $prod = $a * $b;
                echo "El resultado es $prod <br>";
                break;
            case 3:
                $div = $a / $b;
                echo "El resultado es $div <br>";
                break;
            case 4:
                $res = $a % $b;
                echo "El resto es $res <br>";
                break;
            case 5:
                echo $a > $b ? "a = $a es mayor que b = $b" 
                             : ($a < $b ? "a = $a es menor que b = $b" 
                             : "Son iguales a = $a y b = $b");
                break;
            default:
                echo "Ups..algo no ha ido bien!";
        }
    }
}

HTML:

<form name="Formulario" method="post" action="ejercicio4.php">
    <table>
        <tr>
            <td>
                Introduce elprimer número (a): 
                <input type="number" name="numa" required>
                <br>
                Introduce el segundo número (b):
                <input type="number" name="numb" required>
            </td>
        </tr>
        <tr>
            <td>
                Operaciones a realizar
            </td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" name="operacion[]" value="1">
                Obtener la potencia de a elevado a b 
                <br/>
                <input type="checkbox" name="operacion[]" value="2">
                Obtener el producto de a por b
                <br/>
                <input type="checkbox" name="operacion[]" value="3">
                Obtener la divisón de a entre b
                <br/>
                <input type="checkbox" name="operacion[]" value="4">
                Obtener el resto de la divisón de a entre b
                <br/>
                <input type="checkbox" name="operacion[]" value="5">
                Obtener el mayor de a y b
                <br/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" name="Enviar">
                <input type="reset" name="Reestablecer">
            </td>
        </tr>   
    </table>
</form>
 4
Author: Black Sheep, 2016-10-25 13:12:26
<?php

$a = $_POST['numa'];
$b = $_POST['numb'];

echo "Los números introducidos son: $a y $b <br/>";
switch (true) {
    case isset($_POST['operacion']):
        $pot = pow($a, $b);
        echo "El resultado es $pot <br/>";
    case isset($_POST['operacion2']):
        $prod = $a*$b;
        echo "El resultado es $prod <br/>";
    case isset($_POST['operacion3']):
        $div = $a/$b;
        echo "El resultado es $div <br/>";
    case isset($_POST['operacion4'] ):
        $res = $a%$b;
        echo "El resto es $res <br/>";
    case isset($_POST['operacion5'] ):
        if ($a == $b) {
            echo "$a y $b";
        } elseif ($a < $b) {
            echo "$a es menor";
        } else{
            echo "$b es mayor";
        }
}

?>
 1
Author: Vicent Camarena, 2016-10-23 23:40:59