Простая отправка форм PHP - что не так с этим условным if и логическим &&? - PullRequest
1 голос
/ 01 апреля 2012

Проблема:

, если я отправляю html-форму, а текстовое поле остается пустым
, тогда я не хочу, чтобы он переходил к сегменту эха,
, но проблема в том, что он делаетпродолжить.

<?php
        if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet']))
        { 
?>

        <form name="form2" method="post" action="<?php echo($_SERVER["PHP_SELF"]);?>">
            <div>
                Write a planet name: <input name="planet" type="text"><br>
                Its moon: <input name="moon" type="text">
            </div>
            <div>
                <input type="submit" name="submit" value="submit">
            </div>
        </form>


 <?php
       }else{

            echo("Planet: ".$_POST['planet']. "<br>");
            echo("Moon: ". $_POST['moon'] . "<br>");
            echo "Successful.";

            }
?>

Как вы знаете, isset() определяет, является ли переменная set и not null, но не проверяет, является ли она пустой.

Хотя логика кажется моим оператором if, я изменил его с:
if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet']))

Кому:

  • if(!isset($_POST['submit']) && ($_POST['planet']=='') && ($_POST['moon']==''))
  • if(!isset($_POST['submit']))
  • if(!isset($_POST['planet']) && !isset($_POST['moon']))
  • if(empty($_POST['moon']) && empty($_POST['planet']))

и ни один из них не сработал.


Итак, я что-то делаюне так с моим утверждением if?как я не могу позволить ему перейти к сегменту Else, пока текстовое поле пусто?без дополнительных операторов if и no nested, пожалуйста.

Ответы [ 3 ]

2 голосов
/ 01 апреля 2012

Когда вы отправляете форму, кнопка отправки будет установлена, поэтому isset($_POST['submit']) будет true , поэтому !isset($_POST['submit']) будет false .

При выполнении оператора if со сравнением && все условия должны выполняться для выполнения этого блока кода, в противном случае он переходит к оператору else.

Что вам нужно сделать, это на самом деле 2 проверки сравнения. Один раз, чтобы увидеть, была ли форма никогда не отправлена, и один, чтобы увидеть, была ли она, и текстовые поля пусты:

<?php

   // Check if form was submitted
   if(!isset($_POST['submit'])
   {
      // Display the form
   }
   else
   {
      // Form was submitted, check if values are empty
      if(trim($_POST['planet'])=="" || trim($_POST['moon'])=="")
      {
         // One or more value is empty, do something
      }
      else
      {
         // Process form
      }
   }

?>

Я понимаю, что вы пытаетесь избежать вложения, но для того, чтобы логика работала гладко и чтобы код оставался читабельным, это неизбежное зло.

1 голос
/ 01 апреля 2012

Изменение

if(!isset($_POST['submit']) && empty($_POST['moon']) && empty($_POST['planet']))

Для

if(!isset($_POST['submit']) || (empty($_POST['moon']) || empty($_POST['planet'])))

Тогда, если вы отправите текст с пустым полем, оно снова отобразит форму. Если оба текстовых поля были заполнены, вы увидите остальную часть.

0 голосов
/ 01 апреля 2012

Ваша проблема в том, что if(!isset($_POST['submit'])) всегда устанавливается при отправке формы - так что это правда.Вы также можете изменить && на ||.Используя ||Вы говорите «ИЛИ», так что, если кто-то пуст, то сделайте это, иначе сделайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...