Задать вопрос
@0ldn0mad

Почему PHP не доволен инициализацией переменных?

Добрый день.
Делаю простой калькулятор в форме HTML.
В заключении написания скрипта решил дописать в value переменные с числами, чтобы в полях формы числа оставались и не исчезали. После запуска стала появляться ошибка про инициализацию данных именно в полях value куда заносятся данные из переменных.
Выше я дописал, что рассматривать внесенные в форму данные как float, не помогает. Пробовал ставить int - то же без успеха. Можно конечно написать error_reporting(E_ALL & ~E_NOTICE); и забить, но это не по фэншую. Помогите, пожалуйста, удовлетворить php.
Вот скрипт калькулятора:
Сначала на PHP:
<?php
error_reporting(E_ALL);
# error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 'on');
setlocale(LC_ALL, 'ru_RU.UTF-8');
#-------------------------------------------------
$operations = ['+', '-', '*', '/'];

If (!empty($_POST['num1']) && !empty($_POST['num2'])) {
	if (in_array($_POST['oper'], $operations)) {

		$numb1 = (float)$_POST['num1'];
		$numb2 = (float)$_POST['num2'];

			switch ($_POST['oper']) {
				case '+':
					$res = $numb1 + $numb2;
				break;
				case '-':
					$res = $numb1 - $numb2;
				break;
				case '*':
					$res = $numb1 * $numb2;
				break;
				case '/':
					$res = $numb1 / $numb2;
				break;
				default:
					echo "НЕДОПУСТИМОЕ ДЕЙСТВИЕ";
			}
	}else{
		$res = "Ошибка операции";
	}
}
?>


И ниже форма в HTML:
<form action='calc.php' method="post">
      <label>Число 1:</label>
      <br />
      <input name='num1' type='number' value="<?= (float)$numb1 ?>" />
      <br />
      <label>Оператор: </label>
      <br />
	    <select name="oper">
	        <?php foreach ($operations as $oper): ?>
		    <option value="<?= $oper;?>"><?= $oper;?></option>
	        <?php endforeach;?>
	    </select>
	  <br />
      <label>Число 2: </label>
      <br />
      <input name='num2' type='number' value="<?= (float)$numb2 ?>" />
      <br />
	    <?php if (isset($res)): ?>
	    <p> Результат: <?= $res?></p>
	    <?php endif;?>
      <br />
      <input type='submit' value='Считать'>
    </form>
  • Вопрос задан
  • 531 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@rogiivs
попробуйте вместо этого:
$numb1 = (float)$_POST['num1'];
$numb2 = (float)$_POST['num2'];

использовать это:
$numb1 = +$_POST['num1'];
$numb2 = +$_POST['num2'];

и вам не нужно опять приводить тип переменных в HTML

Так будет работать
<?php
error_reporting(E_ALL);
# error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', 'on');
setlocale(LC_ALL, 'ru_RU.UTF-8');
#-------------------------------------------------
$operations = ['+', '-', '*', '/'];

$numb1 = 0;
$numb2 = 0;

If (!empty($_POST['num1']) && !empty($_POST['num2'])) {
  if (in_array($_POST['oper'], $operations)) {

    $numb1 = +$_POST['num1'];
    $numb2 = +$_POST['num2'];

      switch ($_POST['oper']) {
        case '+':
          $res = $numb1 + $numb2;
        break;
        case '-':
          $res = $numb1 - $numb2;
        break;
        case '*':
          $res = $numb1 * $numb2;
        break;
        case '/':
          $res = $numb1 / $numb2;
        break;
        default:
          echo "НЕДОПУСТИМОЕ ДЕЙСТВИЕ";
      }
  }else{
    $res = "Ошибка операции";
  }
}
?>

<form action='calc.php' method="post">
      <label>Число 1:</label>
      <br />
      <input name='num1' type='number' value="<?=$numb1 ?>" />
      <br />
      <label>Оператор: </label>
      <br />
      <select name="oper">
          <?php foreach ($operations as $oper): ?>
        <option value="<?= $oper;?>"><?=$oper;?></option>
          <?php endforeach;?>
      </select>
    <br />
      <label>Число 2: </label>
      <br />
      <input name='num2' type='number' value="<?=$numb2 ?>" />
      <br />
      <?php if (isset($res)): ?>
      <p> Результат: <?=$res?></p>
      <?php endif;?>
      <br />
      <input type='submit' value='Считать'>
    </form>

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы