2012-10-24 11 views
66

Mam formularz na jednej stronie, który przesyła do innej strony. Tam sprawdza, czy poczta 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 ustawiony, nawet jeśli wyślę pusty formularz. Czego brakuje lub jest 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"; 
} 
+4

Wszystkie wejścia i pola tekstowe zawarte w formularzu tekstowe jak będzie składać się z serwerem, nawet jeśli ich wartości są puste ciągi. – hypeJunction

Odpowiedz

173

zmienić go na to:

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

Więc $ _POST zawsze jest ustawiony, ale jej treść może być pusta. !

Od empty() już sprawdza, czy wartość jest ustawiona, można również korzystać z tej wersji:

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

Obie opcje działają poprawnie. Bardzo jasne i dobrze wyjaśnione. Dziękuję Ci! – Nrc

+7

Ta tabela porównawcza jest bardzo pomocna dla takich rzeczy jak ten http://php.net/manual/en/types.comparisons.php –

+1

Drobne rzeczy ... 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

18

Zastosowanie !empty zamiast isset. isset zwraca true dla $_POST ponieważ tablica $_POST jest superglobalna i zawsze istnieje (ustawiona).

Albo lepsze wykorzystanie $_SERVER['REQUEST_METHOD'] == 'POST'

+2

Powinieneś wspomnieć, że użyj BOTH 'isset' i'! Empty', aby zapobiec błędowi. EDIT: Whoops, najwyraźniej Nauka każdego dnia następnie [Ref] (http://kunststube.net/isset/) – Touki

+1

jaki błąd? 'puste' pomija błędy – Nemoden

+0

Puste nie powoduje błędów (dla zmiennych niezamierzonych) @Touki – PeeHaa

2

Jeśli wyślesz formularz pusty, $ _POST [ „email”] nadal będzie wysłany, ale wartość jest pusta. Aby sprawdzić, czy pole jest puste trzeba sprawdzić

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

Skopiuję wkleić kod i myślę, że to nie działa? Sprawdziłeś to? – Nrc

4

From php.net, isset

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

puste miejsce jest traktowane jako zestaw. Musisz użyć pustego(), aby sprawdzić wszystkie opcje puste.

1

Może spróbuj tego:

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

2

Dodaj następujący atrybut do postaci tekstu wejściowego: required="required". Jeśli formularz nie jest wypełniony, nie zezwala użytkownikowi na przesłanie formularza.

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";  
} 
0

Aby odpowiedzieć na zamieszczone pytanie: Isset i opróżnić razem daje trzy warunki. Może to być również użyte 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."!"; 
2

można po prostu użyć:

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

Alternatywnie, użyj empty()

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

Zgodnie z [porównaniem typów PHP tabele] (http://php.net/manual/en/types.comparisons.php) masz absolutną rację. Prosta boolowska wykonuje pracę pustej funkcji, aby sprawdzić pusty ciąg. – viery365

0

Można spróbować to:

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

Musisz wyjaśnić swoją odpowiedź. WIĘC istnieje po to, aby nie tylko odpowiadać na pytania, ale także edukować 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żna spróbować,

<?php 

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

Zastosowanie !empty() zamiast isset(). Ponieważ isset() zawsze zwróci true w twoim przypadku.

if (!empty($_POST["mail"])) { 
    echo "Yes, mail is entered";  
} else { 
    echo "No, mail is not entered"; 
} 
0
<?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