2012-10-24 32 views
66

Tôi có một biểu mẫu trên một trang gửi đến một trang khác. Ở đó, nó sẽ kiểm tra xem thư đầu vào đã được điền chưa. Nếu vậy thì làm một cái gì đó và nếu nó không được lấp đầy, hãy làm một cái gì đó khác. Tôi không hiểu tại sao nó luôn luôn nói rằng nó được thiết lập, ngay cả khi tôi gửi một hình thức trống rỗng. Cái gì bị thiếu hoặc sai?

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

Tất cả các đầu vào văn bản giống như và textareas hiện diện trong hình thức của bạn sẽ được gửi đến máy chủ ngay cả khi giá trị của họ là chuỗi rỗng. – hypeJunction

Trả lời

173

Thay đổi nó như thế này:

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

Vì vậy, $ _POST luôn được thiết lập, nhưng nội dung của nó có thể được sản phẩm nào. !

Kể từ rỗng() đã kiểm tra xem giá trị được thiết lập, bạn cũng có thể sử dụng phiên bản này:

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

Cả hai tùy chọn đều hoạt động tốt. Rất rõ ràng và được giải thích rõ ràng. Cảm ơn bạn! – Nrc

+7

Bảng so sánh này rất hữu ích cho những thứ như http://php.net/manual/en/types.comparisons.php –

+1

Điều nhỏ ... Tôi nghĩ nên ưu tiên tránh toán tử '!' Trong các trường hợp như thế này (dễ đọc hơn, ít cơ hội lỗi hơn, vv) và đảo ngược logic ... 'if (empty()) {/ * No * /} else {/ * Yes * /}' – MrWhite

18

Sử dụng !empty thay vì isset. isset trả về true cho $_POST vì mảng $_POST là superglobal và luôn tồn tại (bộ).

Hoặc sử dụng tốt hơn $_SERVER['REQUEST_METHOD'] == 'POST'

+2

Bạn nên đề cập rằng sử dụng BOTH 'isset' và'! Empty' để ngăn chặn lỗi. EDIT: Rất tiếc, nó dường như Học mỗi ngày sau đó [http://kunststube.net/isset/) – Touki

+1

lỗi gì? 'empty' ngăn chặn lỗi – Nemoden

+0

Empty không ném lỗi (cho các biến chưa được đặt) @Touki – PeeHaa

2

Nếu bạn gửi các hình thức trống rỗng, $ _POST [ 'mail'] sẽ vẫn được gửi đi, nhưng giá trị rỗng. Để kiểm tra xem lĩnh vực này là trống bạn cần phải kiểm tra

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

Tôi sao chép dán mã và tôi nghĩ nó không hoạt động? Bạn đã kiểm tra chưa – Nrc

4

From php.net, isset

Returns TRUE nếu var tồn tại và có giá trị khác hơn NULL, FALSE nếu không.

không gian trống được coi là được đặt. Bạn cần sử dụng empty() để kiểm tra tất cả các tùy chọn null.

1

Có lẽ bạn có thể thử cái này:

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

2

Thêm thuộc tính sau đây để hình thức văn bản đầu vào: required="required". Nếu biểu mẫu không được điền, nó sẽ không cho phép người dùng gửi biểu mẫu.

mã mới của bạn sẽ là:

<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

Để trả lời các câu hỏi được đăng: isset và trống cùng nhau đưa ra ba điều kiện. Điều này có thể được sử dụng bởi Javascript với một lệnh 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

Bạn chỉ có thể sử dụng:

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

Ngoài ra, sử dụng empty()

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

Theo [so sánh loại PHP bảng] (http://php.net/manual/en/types.comparisons.php) bạn hoàn toàn đúng. Một boolean đơn giản thực hiện công việc của hàm rỗng để kiểm tra chuỗi rỗng. – viery365

0

Bạn có thể thử này:

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

Bạn cần giải thích câu trả lời của mình. SO tồn tại để không chỉ trả lời các câu hỏi mà còn để giáo dục mọi người – 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

Bạn có thể thử,

<?php 

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

Sử dụng !empty() thay vì isset(). Bởi vì isset() sẽ luôn trả về đúng trong trường hợp của bạn.

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

Bạn nên giải thích tại sao mã của bạn trả lời câu hỏi của OP. – Markus

Các vấn đề liên quan