поэтому, надеюсь, я задаю свой вопрос надлежащим образом. Я пытаюсь написать код калькулятора, который будет отображать ошибку, когда кто-то пытается ввести букву вместо числа. Как мне заставить это работать без «Неустранимая ошибка: Uncaught TypeError: Неподдерживаемые типы операндов: строка + строка», останавливающая код. И тогда Исключение должно отображаться рядом с полем ввода.
Я добавляю скриншот результата, который я пытаюсь получить, и я дам код, который у меня есть. [
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculator</title>
</head>
<?php
$number1 = "";
$number2 = "";
$result = "";
$calculate = "";
if (isset($_GET['calculate'])) {
$number1 = $_GET['number1'];
$number2 = $_GET['number2'];
$calculate = $_GET['calculate'];
function isValidNumber1($number1)
{
if (!is_numeric($number1)) {
throw new Exception("Number 1 is not a number!");
}
}
try {
isValidNumber1($number1);
$result = $number1 + $number2;
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
switch ($calculate) {
case "Add":
$result = $number1 + $number2;
break;
case "Substract":
$result = $number1 - $number2;
break;
case "Multiply":
$result = $number1 * $number2;
break;
case "Divide":
$result = $number1 / $number2;
break;
case "Modulo":
$result = $number1 % $number2;
break;
}
}
?>
<body>
<h1>Calculator</h1>
<form action="" method="get" id="calculator">
<label for="number1">Number 1:</label>
<input type="text" name="number1" value="<?php echo $number1; ?>"><br><br>
<label for=" number2">Number 2:</label>
<input type="text" name="number2" value="<?php echo $number2; ?>"><br><br>
<?php
echo "<p>Operation: $calculate</p>";
echo "<p>Result: $result</p>";
?>
<div>
<input type="submit" name="calculate" value="Add">
<input type="submit" name="calculate" value="Substract">
<input type="submit" name="calculate" value="Multiply">
<input type="submit" name="calculate" value="Divide">
<input type="submit" name="calculate" value="Modulo">
</div>
</form>
</body>
</html>
исправить текущую реализацию
switch
внутри блока try
,exception message
в variable
и напечатать его рядом с вводом ",ваша реализация после этих правок будет выглядеть так:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculator</title>
</head>
<?php
$number1 = "";
$number2 = "";
$result = "";
$calculate = "";
$number1Error = '';
if (isset($_GET['calculate'])) {
$number1 = $_GET['number1'];
$number2 = $_GET['number2'];
$calculate = $_GET['calculate'];
$errors = [];
function isValidNumber1($number1)
{
if (!is_numeric($number1)) {
throw new Exception("Number 1 is not a number!");
}
}
try {
isValidNumber1($number1);
$result = $number1 + $number2;
switch ($calculate) {
case "Add":
var_dump($number1);
$result = $number1 + $number2;
break;
case "Substract":
$result = $number1 - $number2;
break;
case "Multiply":
$result = $number1 * $number2;
break;
case "Divide":
$result = $number1 / $number2;
break;
case "Modulo":
$result = $number1 % $number2;
break;
}
} catch (Exception $e) {
$number1Error = $e->getMessage() . PHP_EOL;
}
}
?>
<body>
<h1>Calculator</h1>
<form action="" method="get" id="calculator">
<label for="number1">Number 1: </label>
<input type="text" name="number1" value="<?php echo $number1; ?>"> <?php echo $number1Error; ?><br><br>
<label for=" number2">Number 2:</label>
<input type="text" name="number2" value="<?php echo $number2; ?>"><br><br>
<?php
echo "<p>Operation: $calculate</p>";
echo "<p>Result: $result</p>";
?>
<div>
<input type="submit" name="calculate" value="Add">
<input type="submit" name="calculate" value="Substract">
<input type="submit" name="calculate" value="Multiply">
<input type="submit" name="calculate" value="Divide">
<input type="submit" name="calculate" value="Modulo">
</div>
</form>
</body>
</html>
просто инициализируйте его $number1Error = '';
перед try
как в упомянутом примере в ответе
Я использовал код, который вы посоветовали, но я все еще получаю предупреждение.
это плохо, вам нужно определить это еще до isset
условия, пример обновлен, пожалуйста, проверьте
Спасибо, Омар, за быстрый ответ. Я переместил инициализацию $number1Error = ''; над первым оператором if, и теперь он работает.
Спасибо, Омар, это почти работает. Когда я впервые запускаю код, я получаю «Предупреждение: неопределенная переменная $number1Error», ссылаясь на переменную после поля ввода. Как это решить?