หากตั้งค่า $ _POST


102

ฉันมีแบบฟอร์มในเพจหนึ่งที่ส่งไปยังเพจอื่น ที่นั่นจะตรวจสอบว่ากรอกอีเมลหรือไม่ ถ้าเป็นเช่นนั้นให้ทำบางอย่างและหากยังไม่เต็มให้ทำอย่างอื่น ฉันไม่เข้าใจว่าทำไมมันถึงบอกว่าตั้งค่าอยู่เสมอแม้ว่าฉันจะส่งแบบฟอร์มเปล่าก็ตาม ขาดหรือผิดพลาดประการใด

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

คำตอบ:


224

อินพุตแบบฟอร์มส่วนใหญ่จะถูกตั้งค่าไว้เสมอแม้ว่าจะไม่ได้กรอกข้อมูลก็ตามดังนั้นคุณต้องตรวจสอบความว่างเปล่าด้วย

เนื่องจาก!empty()มีการตรวจสอบทั้งสองอย่างอยู่แล้วคุณสามารถใช้สิ่งนี้:

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

10
ตารางเปรียบเทียบนี้มีประโยชน์มากสำหรับสิ่งต่างๆเช่นphp.net/manual/en/types.comparisons.php
A Star

2
สิ่งเล็กน้อย ... ฉันคิดว่าควรหลีกเลี่ยงตัว!ดำเนินการในกรณีเช่นนี้ (อ่านง่ายขึ้นโอกาสผิดพลาดน้อยลง ฯลฯ ) และย้อนตรรกะ ...if (empty()) {/* No */} else {/* Yes */}
MrWhite

25

ใช้!emptyแทนisset. isset ส่งคืนจริง$_POSTเนื่องจาก$_POSTอาร์เรย์เป็น superglobal และมีอยู่เสมอ (set)

หรือใช้ดีกว่า $_SERVER['REQUEST_METHOD'] == 'POST'


2
คุณควรระบุว่าใช้ทั้งสองอย่างissetและ!emptyเพื่อป้องกันข้อผิดพลาด แก้ไข: อ๊ะดูเหมือนว่าจะเรียนรู้ทุกวันแล้วอ้างอิง
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 isset

ส่งกลับค่า TRUE หาก var มีอยู่และมีค่าอื่นที่ไม่ใช่ NULL, FALSE ไม่เช่นนั้น

พื้นที่ว่างถือเป็นชุด คุณต้องใช้ empty () เพื่อตรวจสอบตัวเลือก null ทั้งหมด


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

ฉันรู้ว่านี่เป็นคำตอบเก่า แต่วิธีแรกอาจทำให้เกิดการแจ้งดัชนีที่ไม่ได้กำหนด
ICE

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
คุณควรอธิบายว่าเหตุใดรหัสของคุณจึงตอบคำถามของ OP
Markus

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 ตอนนี้คุณสามารถใช้ 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";
}
?>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.