@0ldn0mad

Где ошибка в php-коде?

Уважаемые Гуру!
Делаю первые шаги в освоении PHP - пишу карулятор.
Первую задачу себе поставил - сделать проверку существования данных, пришедших из формы. Т.е. если какое-то поле осталось пустым, вывести сообщение под формой - "Что-то не передано!"
Скрипт написал, но сообщение не появляется. Где я ошибся?

<form action='calc.php' method="post">
      <label>Число 1:</label>
      <br />
      <input name='num1' type='text' />
      <br />
      <label>Оператор: </label>
      <br />
	  <label for="operator">
		    <select name="operator" id="operator">
			    <option value="+">+</option>
			    <option value="-">-</option>
		    </select>
      <br />
      <label>Число 2: </label>
      <br />
      <input name='num2' type='text' />
      <br />
      <br />
      <input type='submit' value='Считать'>
    </form>
    <br />
    <br />
<?php

$num1 = int($_POST['num1']);
$num2 = int($_POST['num2']);

if (empty($num1 or $num2)) {
	echo "Что-то не передано!";
}

?>
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 4
mashletov
@mashletov
Math.random()
if (isset($_POST['num1']) && isset($_POST['num2']) && isset($_POST['operator'])) {
  $num1 = intval($_POST['num1']);
  $num2 = intval($_POST['num2']);
  $operator = $_POST['operator'];

  switch ($operator) {
     case '+':
         echo $num1 + $num2;
         break;
     case '-':
         echo $num1 - $num2;
         break;
  }
   
} else {
  echo "Что-то не передано!";
}
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
1. Начиная с php 5.5 можно так как Вы сделали, но для более ранних версий в empty должна быть переменная, а не выражение, так что в зависимости от версии php, возможно стоит попробовать
if (empty($num1) || empty($num2)) {
2. Вы не верно приводите данные к integer
$num1 = int($_POST['num1']); // не верно
$num1 = (int) $_POST['num1'];  //верно
Ответ написан
RomaZveR
@RomaZveR
CEO AlertMoney, PHP/Golang Developer
Это конкретно под ваш кусок кода. В идеале нужно смотреть все и переписывать с нуля.
<?php

$num1 = intval(isset($_POST['num1']) ? $_POST['num1'] : 0);
$num2 = intval(isset($_POST['num2']) ? $_POST['num2'] : 0);

if (empty($num1) || empty($num2)) {
  echo "Что-то не передано!";
}

?>
Ответ написан
nefone
@nefone
Junior PHP разработчик
Сделал вариант с выводом сообщения под полем, которое не заполнили:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $require = ['num1', 'num2']; //поля которые надо заполнить.
    $errors[] = ''; //массив в котором сохраним ошибки
    
    foreach($require as $key) {
        if(empty($_POST[$key])) {
            $errors[$key] = 'Это поле надо заполнить!';
        }
    }
}
?>

<form action='calc.php' method="post">
      <label>Число 1:</label>
      <br />
      <input name='num1' type='text' />
      <?php
        $msg = isset($errors['num1']) ? "Введите первое число" : "";
        echo $msg;
      ?>
      <br />
      <label>Оператор: </label>
      <br />
    <label for="operator">
        <select name="operator" id="operator">
          <option value="+">+</option>
          <option value="-">-</option>
        </select>
      <br />
      <label>Число 2: </label>
      <br />
      <input name='num2' type='text' />
      <?php
        $msg = isset($errors['num2']) ? "Введите первое число" : "";
        echo $msg;
      ?>
      <br />
      <br />
      <input type='submit' value='Считать'>
    </form>
    <br />
    <br />
<?php
    if (count($errors) > 0) {
        echo 'Заполните все поля!';
    }
?>

Сначала проверим, была ли отправлена форма, а потом проверяем заполнены ли все обязательные поля из формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы