Если isset $ _POST


102

У меня есть форма на одной странице, которая отправляется на другую страницу. Там он проверяет, заполнено ли входящее письмо. Если да, то сделайте что-нибудь, а если он не заполнен, сделайте что-нибудь еще. Я не понимаю, почему он всегда говорит, что установлен, даже если я отправляю пустую форму. Что не так?

step2.php:

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

step2_check:

if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {    
    echo "N0, mail is not set";
}

6
Все текстовые поля ввода и текстовые поля, присутствующие в вашей форме, будут отправлены на сервер, даже если их значения являются пустыми строками.
hypeJunction

Ответы:


224

Большинство полей формы всегда заданы, даже если они не заполнены, поэтому вы также должны проверить пустоту.

Поскольку !empty()он уже проверяет оба, вы можете использовать это:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}

10
Эта сравнительная таблица очень полезна для таких вещей, как эта php.net/manual/en/types.comparisons.php
A Star

2
Мелочь ... Я думаю, что в таких случаях предпочтительнее избегать !оператора (легче читать, меньше вероятность ошибки и т. Д.) И изменить логику ...if (empty()) {/* No */} else {/* Yes */}
MrWhite 01

25

Используйте !emptyвместо isset. isset return true, $_POSTпоскольку $_POSTмассив является суперглобальным и всегда существует (установлен).

Или лучше использовать $_SERVER['REQUEST_METHOD'] == 'POST'


2
Вы должны упомянуть, что используйте ОБА issetи !emptyво избежание ошибки. РЕДАКТИРОВАТЬ: Упс, он, по-видимому, учится каждый день, а затем Ref
Touki

1
Я пробовал, и оба работают нормально. Почему $ _SERVER ['REQUEST_METHOD'] == 'POST' лучше? Что именно он делает? может он относится к конкретному вводу или является общим для формы?
Nrc,

3
$_SERVER['REQUEST_METHOD']гарантирует, что пользователь отправил форму. $_POSTможет быть пустым даже в этом случае. Рассмотрим эту форму: <form method="post"></form>отправка ничего не отправит действию, но тип запроса будет post. Или это может быть сделано с завитком: curl -X POST http://example.com/processor.php. Если процессор содержит такой код echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, вы увидитеPOST true
Nemoden

5

С php.net isset

Возвращает TRUE, если var существует и имеет значение, отличное от NULL, в противном случае - FALSE.

пустое пространство считается установленным. Вам нужно использовать empty () для проверки всех нулевых параметров.


2

Если вы отправите форму пустой, $ _POST ['mail'] все равно будет отправлен, но значение будет пустым. Чтобы проверить, пусто ли поле, вам нужно проверить

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }

Я копирую и вставляю код, и мне кажется, что он не работает? Вы это проверяли?
Nrc

2

Добавьте следующий атрибут в текстовой форме ввода: required="required". Если форма не заполнена, это не позволит пользователю отправить форму.

Ваш новый код будет:

<form name="new user" method="post" action="step2_check.php"> 
<input type="text" name="mail" required="required"/> <br />
<input type="password" name="password" required="required"/><br />
<input type="submit"  value="continue"/>
if (isset($_POST["mail"])) {
    echo "Yes, mail is set";    
}

2

Вы можете просто использовать:

if($_POST['username'] and $_POST['password']){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

В качестве альтернативы используйте empty ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}

По таблицам сравнения типов PHP вы абсолютно правы. Простое логическое значение выполняет работу пустой функции, проверяя пустую строку.
viery365 07

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

1
@ICE Это можно легко обойти с помощью префиксов переменных с @, то есть: @$_POST['username']. Спасибо, что заметили это.
CONvid19

2

Используйте !empty()вместо isset(). Потому isset()что в вашем случае всегда будет возвращать истину.

if (!empty($_POST["mail"])) {
    echo "Yes, mail is entered";    
} else {  
    echo "No, mail is not entered";
}

1

Может быть, вы можете попробовать это:

if (isset($_POST['mail']) && ($_POST['mail'] !=0)) { echo "Yes, mail is set"; } else { echo "No, mail is not set"; }


1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>

3
Вы должны объяснить, почему ваш код отвечает на вопрос OP.
Маркус

1

Давайте подумаем, что это ваша HTML-форма на step2.php

step2.php

<form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  value="continue"/>
</form>

Я думаю, он вам нужен для вашей базы данных, поэтому вы можете присвоить значение HTML-формы переменной php, теперь вы можете использовать Real Escape String, а ниже должен быть ваш

step2_check.php

if(isset($_POST['mail']) && !empty($_POST['mail']))
{
$mail = mysqli_real_escape_string($db, $_POST['mail']);
}

Где $ db - ваше соединение с базой данных.


1

Убедитесь, что сначала была отправлена ​​ФОРМА, а затем поле. Вы также должны продезинфицировать поле, чтобы предотвратить взломы.

form name="new user" method="post" action="step2_check.php"> 
    <input type="text" name="mail"/> <br />
    <input type="password" name="password"/><br />
    <input type="submit"  id="SubmitForm" name= "SubmitForm" value="continue"/>
</form>

step2_check:


if (isset($_POST["SubmitForm"]))
   {
   $Email =  sanitize_text_field(stripslashes($_POST["SubmitForm"]));
   if(!empty($Email))
     echo "Yes, mail is set"; 
   else
     echo "N0, mail is not set";
   } 
}

0

Чтобы ответить на поставленный вопрос: isset и empty вместе дают три условия. Это также может использоваться Javascript с командой ajax.

$errMess="Didn't test";   // This message should not show
if(isset($_POST["foo"])){ // does it exist or not
    $foo = $_POST["foo"]; // save $foo from POST made by HTTP request
    if(empty($foo)){      // exist but it's null
        $errMess="Empty"; // #1 Nothing in $foo it's emtpy

    } else {              // exist and has data
        $errMess="None";  // #2 Something in $foo use it now
      }
} else {                  // couldn't find ?foo=dataHere
     $errMess="Missing";  // #3 There's no foo in request data
  }

echo "Was there a problem: ".$errMess."!";

0

Вы можете попробовать это:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}

Вам нужно объяснить свой ответ. SO существует не только для того, чтобы отвечать на вопросы, но и для обучения людей
Machavity

0
<form name="new user" method="post" action="step2_check.php"> 
  <input type="text" name="mail" required="required"/> <br />
  <input type="password" name="password" required="required"/><br />
  <input type="submit"  value="continue"/>
</form>

<?php
if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
?>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.