@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 'Заполните все поля!';
    }
?>

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект