@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 "Что-то не передано!";
}

?>
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 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
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 'Заполните все поля!';
    }
?>

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

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

Войти через центр авторизации
Похожие вопросы
IMAGINWEB Москва
от 55 000 до 85 000 руб.
Владис Владимир
от 100 000 до 150 000 руб.
Glamy Санкт-Петербург
от 120 000 до 180 000 руб.
26 июн. 2019, в 15:21
600 руб./в час
26 июн. 2019, в 15:06
50000 руб./за проект
26 июн. 2019, в 14:56
300 руб./в час