Nếu Isset $ _POST


100

Tôi có một biểu mẫu trên một trang này và 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 hãy làm điều gì đó và nếu nó không được lấp đầy, hãy làm điều gì đó khác. Tôi không hiểu tại sao nó luôn nói rằng nó đã được thiết lập, ngay cả khi tôi gửi một biểu mẫu trống. Còn thiếu hay 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";
}

6
Tất cả các đầu vào dạng văn bản và vùng văn bản có trong biểu mẫu của bạn sẽ được gửi tới máy chủ ngay cả khi giá trị của chúng là chuỗi trống.
hypeJunction

Câu trả lời:


223

Hầu hết các đầu vào biểu mẫu luôn được thiết lập, ngay cả khi không được điền đầy đủ, vì vậy bạn cũng phải kiểm tra độ trống.

!empty()đã kiểm tra cả hai, bạn có thể sử dụng điều này:

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

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

2
Điều nhỏ ... Tôi nghĩ rằng nó thích hợp hơn để tránh sự !điều hành trong những trường hợp như thế này (dễ đọc hơn, ít nguy cơ lỗi, vv) và đảo ngược logic ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

Sử dụng !emptythay vì isset. Isset trả về true cho $_POST$_POSTmảng là superglobal và luôn tồn tại (set).

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 CẢ HAI isset!emptyđể tránh lỗi. EDIT: Rất tiếc, nó không rõ ràng Học mỗi ngày sau đó Ref
Touki

1
Tôi đã thử và cả hai đều hoạt động tốt. Tại sao $ _SERVER ['REQUEST_METHOD'] == 'POST' lại tốt hơn? Chính xác thì nó làm gì? nó có thể đề cập đến một đầu vào cụ thể hay nó chung chung cho biểu mẫu?
Nrc

3
$_SERVER['REQUEST_METHOD']đảm bảo người dùng đã gửi biểu mẫu. $_POSTcó thể trống ngay cả trong trường hợp này. Hãy xem xét biểu mẫu này <form method="post"></form>:, gửi nó sẽ không gửi hành động gì, nhưng loại yêu cầu sẽ có post. Hoặc nó có thể được thực hiện với curl : curl -X POST http://example.com/processor.php. Nếu bộ xử lý có chứa mã như echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, bạn sẽ thấyPOST true
Nemoden

5

Từ php.net , Isset

Trả về TRUE nếu var tồn tại và có giá trị khác NULL, nếu không thì FALSE.

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


2

Nếu bạn gửi biểu mẫu trống, $ _POST ['mail'] sẽ vẫn được gửi, nhưng giá trị trống. Để kiểm tra xem trường có trống không, bạn cần kiểm tra

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

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

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

2

Bạn chỉ cần sử dụng:

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

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

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

Theo các bảng so sánh kiểu 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 trống.
viery365

Tôi biết đây là câu trả lời cũ nhưng phương pháp đầu tiên có thể gây ra thông báo chỉ mục không xác định.
ICE

1
@ICE Nó có thể dễ dàng bỏ qua bằng cách đặt trước các biến với @, ví dụ: @$_POST['username']. Cảm ơn bạn đã nhận thấy điều đó.
CONvid 19

2

Sử dụng !empty()thay vì isset(). Vì isset()sẽ luôn trả về true 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";
}

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


1
<?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

1

Hãy nghĩ rằng đây là Biểu mẫu HTML của bạn trong 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>

Tôi nghĩ bạn cần nó cho cơ sở dữ liệu của mình, vì vậy bạn có thể gán Giá trị biểu mẫu HTML của mình cho Biến php, bây giờ bạn có thể sử dụng Chuỗi thoát thực và bên dưới phải là

step2_check.php

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

Nơi $ db là Kết nối Cơ sở dữ liệu của bạn.


1

Kiểm tra xem MẪU đã được gửi trước chưa, sau đó là trường. Bạn cũng nên làm sạch trường để ngăn chặn tin tặc.

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

Để trả lời câu hỏi đã đăng: Isset và rỗng cùng nhau đưa ra ba điều kiện. Điều này cũng có thể được sử dụng bởi Javascript với 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."!";

0

Bạn có thể thử điều này:

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

Bạn cần giải thích câu trả lời của mình. VẬY tồn tại để không chỉ trả lời 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 co thể thử,

 <?php

     if (isset($_POST["mail"])) {
            echo "Yes, mail is set";    
        }else{  
            echo "N0, mail is not set";
        }
  ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.