Якщо встановлено $ _POST


100

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

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

Відповіді:


223

Більшість входів форми завжди встановлені, навіть якщо вони не заповнені, тому ви також повинні перевірити наявність порожнечі.

Оскільки !empty()вже є перевірки для обох, ви можете скористатися цим:

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

9
Ця таблиця порівняння дуже корисна для таких речей, як ця php.net/manual/en/types.comparisons.php
Зірка

2
Незначна річ ... Я думаю, що бажано уникати !оператора у подібних випадках (легше читати, менше шансів помилок тощо) та if (empty()) {/* No */} else {/* Yes */}
перетворювати

25

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

Або краще використовувати $_SERVER['REQUEST_METHOD'] == 'POST'


2
Ви повинні згадати, що використовуйте BOTH issetта !emptyзапобігайте помилкам. EDIT: Ну, це, мабуть, навчається щодня, тоді 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 , набір

Повертає ПРАВИЛЬНЕ, якщо var існує та має інше значення, ніж NULL, FALSE.

порожній простір вважається встановленим. Для перевірки всіх нульових параметрів потрібно використовувати порожній ().


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'];
}

Крім того, використовуйте порожній ()

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

Відповідно до таблиць порівняння типів PHP ви абсолютно праві. Простий булевий виконує роботу порожньої функції, щоб перевірити порожній рядок.
viery365

Я знаю, що це стара відповідь, але перший метод може призвести до невизначеного індексу.
ДВС

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
Ви повинні пояснити, чому ваш код відповідає на питання ОП.
Маркус

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 Variable, тепер ви можете використовувати 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

Щоб відповісти на розміщене запитання: разом розміщено та порожнє - це три умови. Це може використовувати і 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";
}

Вам потрібно пояснити свою відповідь. ТАК існує не просто для відповіді на питання, а для навчання людей
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.