Как я могу получить значения 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
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>
<?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";
}
}
?>