Jeśli jest ustawiona $ _POST


101

Mam formularz na jednej stronie, który przesyła się na inną stronę. Tam sprawdza, czy wiadomość wejściowa jest wypełniona. Jeśli tak, zrób coś, a jeśli nie jest wypełnione, zrób coś innego. Nie rozumiem, dlaczego zawsze mówi, że jest ustawione, nawet jeśli wysyłam pusty formularz. Czego brakuje lub czego nie tak?

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
Wszystkie tekstowe dane wejściowe i pola tekstowe obecne w formularzu zostaną przesłane na serwer, nawet jeśli ich wartości są pustymi ciągami.
hypeJunction

Odpowiedzi:


224

Większość danych wejściowych formularza jest zawsze ustawionych, nawet jeśli nie są wypełnione, więc musisz również sprawdzić, czy nie ma pustki.

Ponieważ !empty()sprawdza już oba, możesz użyć tego:

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

10
Ta tabela porównawcza jest bardzo pomocna w przypadku takich rzeczy jak php.net/manual/en/types.comparisons.php
A Star

2
Drobna sprawa ... Myślę, że lepiej jest unikać !operatora w takich przypadkach (łatwiejszy do odczytania, mniejsze prawdopodobieństwo błędu itp.) I odwrócić logikę ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

Użyj !emptyzamiast isset. isset zwraca prawdę dla, $_POSTponieważ $_POSTtablica jest superglobalna i zawsze istnieje (ustawiona).

Lub lepiej użyć $_SERVER['REQUEST_METHOD'] == 'POST'


2
Należy wspomnieć, że używają OBU isseti !emptyzapobiegają błędom. EDYCJA: Ups, najwyraźniej
uczy się

1
Próbowałem i oba działają dobrze. Dlaczego usługa $ _SERVER ['REQUEST_METHOD'] == 'POST' jest lepsza? Co to dokładnie robi? czy może odnosić się do konkretnego wejścia, czy też jest ogólny dla formularza?
Nrc

3
$_SERVER['REQUEST_METHOD']zapewnia, że ​​użytkownik przesłał formularz. $_POSTmoże być pusty nawet w tym przypadku. Zastanów się nad tym formularzem <form method="post"></form>:, przesłanie go nie wyśle ​​nic do akcji, ale typ żądania będzie post. Albo można to zrobić z dyni: curl -X POST http://example.com/processor.php. Jeśli procesor zawiera kod taki jak echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, zobaczyszPOST true
Nemoden

5

Z php.net , isset

Zwraca wartość TRUE, jeśli zmienna istnieje i ma wartość inną niż NULL, w przeciwnym razie FALSE.

pusta przestrzeń jest uważana za zestaw. Musisz użyć pustej (), aby sprawdzić wszystkie opcje null.


2

Jeśli wyślesz formularz pusty, $ _POST ['mail'] będzie nadal wysyłany, ale wartość jest pusta. Aby sprawdzić, czy pole jest puste, musisz to sprawdzić

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

Kopiuję, wklejam kod i myślę, że to nie działa? Sprawdziłeś to?
Nrc

2

Dodaj następujący atrybut do postaci tekstu wejściowego: required="required". Brak wypełnienia formularza uniemożliwi użytkownikowi przesłanie formularza.

Twój nowy kod będzie:

<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

Możesz po prostu użyć:

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

Alternatywnie użyj pustego ()

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

Zgodnie z tabelami porównawczymi typów PHP masz absolutną rację. Prosta wartość logiczna wykonuje pracę funkcji pustej, aby sprawdzić pusty ciąg.
viery365

Wiem, że to stara odpowiedź, ale pierwsza metoda może spowodować powiadomienie o niezdefiniowanym indeksie.
ICE

1
@ICE Można to łatwo ominąć, poprzedzając zmienne przedrostkiem @, np @$_POST['username']. : . Dziękuję, że to zauważyłeś.
CONvid19

2

Użyj !empty()zamiast isset(). Ponieważ isset()zawsze zwróci prawdę w Twoim przypadku.

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

1

Może możesz spróbować tego:

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
Powinieneś wyjaśnić, dlaczego Twój kod odpowiada na pytanie OP.
Markus

1

Pomyślmy, że to jest twój formularz HTML w 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>

Myślę, że potrzebujesz go do swojej bazy danych, więc możesz przypisać wartość formularza HTML do zmiennej php, teraz możesz użyć prawdziwego ciągu ucieczki, a poniżej musi być twój

step2_check.php

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

Gdzie $ db to połączenie z bazą danych.


1

Sprawdź, czy FORMULARZ został przesłany jako pierwszy, a następnie pole. Powinieneś także oczyścić pole, aby zapobiec hakerom.

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

Aby odpowiedzieć na zadane pytanie: isset and empty razem podaje trzy warunki. Może być również używany przez Javascript z poleceniem 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

Możesz spróbować tego:

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

Musisz wyjaśnić swoją odpowiedź. SO istnieje nie tylko po to, aby odpowiadać na pytania, ale także uczyć ludzi
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";
}
?>

0

Możesz spróbować,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.