Jika isset $ _POST

101

Saya memiliki formulir di satu halaman yang dikirimkan ke halaman lain. Di sana, ia memeriksa apakah surat masukan sudah diisi. Jika demikian, lakukan sesuatu dan jika tidak diisi, lakukan sesuatu yang lain. Saya tidak mengerti mengapa selalu dikatakan sudah diatur, bahkan jika saya mengirim formulir kosong. Apa yang hilang atau salah?

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";
}
Nrc
sumber
6
Semua input dan textarea seperti teks yang ada di formulir Anda akan dikirim ke server meskipun nilainya adalah string kosong.
hypeJunction

Jawaban:

224

Sebagian besar masukan formulir selalu disetel, meskipun tidak diisi, jadi Anda juga harus memeriksa kekosongannya.

Karena !empty()sudah memeriksa keduanya, Anda dapat menggunakan ini:

if (!empty($_POST["mail"])) {
    echo "Yes, mail is set";    
} else {  
    echo "No, mail is not set";
}
oopbase
sumber
10
Tabel perbandingan ini sangat membantu untuk hal-hal seperti ini php.net/manual/en/types.comparisons.php
A Star
2
Hal kecil ... Saya pikir lebih baik menghindari !operator dalam kasus seperti ini (lebih mudah dibaca, lebih sedikit kemungkinan kesalahan, dll.) Dan membalikkan logika ...if (empty()) {/* No */} else {/* Yes */}
MrWhite
25

Gunakan !emptysebagai ganti isset. isset mengembalikan nilai true $_POSTkarena $_POSTarray adalah superglobal dan selalu ada (set).

Atau gunakan lebih baik $_SERVER['REQUEST_METHOD'] == 'POST'

Nemoden
sumber
2
Anda harus menyebutkan bahwa gunakan KEDUA issetdan !emptyuntuk mencegah kesalahan. EDIT: Ups, ternyata Belajar setiap hari kemudian Ref
Touki
1
Saya mencoba dan keduanya berfungsi dengan baik. Mengapa $ _SERVER ['REQUEST_METHOD'] == 'POST' lebih baik? Apa tepatnya yang dilakukannya? dapatkah itu mengacu pada masukan tertentu atau itu umum untuk formulir?
Nrc
3
$_SERVER['REQUEST_METHOD']memastikan pengguna telah mengirimkan formulir. $_POSTbisa kosong bahkan dalam kasus ini. Pertimbangkan formulir ini <form method="post"></form>:, mengirimkannya tidak akan mengirimkan apa pun ke tindakan, tetapi jenis permintaan akan post. Atau dapat dilakukan dengan ikal: curl -X POST http://example.com/processor.php. Jika prosesor berisi kode seperti echo $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);, Anda akan melihatPOST true
Nemoden
5

Dari php.net , isset

Mengembalikan TRUE jika var ada dan memiliki nilai selain NULL, FALSE sebaliknya.

ruang kosong dianggap sebagai set. Anda perlu menggunakan empty () untuk memeriksa semua opsi null.

janenz00.dll
sumber
2

Jika Anda mengirim formulir kosong, $ _POST ['mail'] akan tetap dikirim, tetapi nilainya kosong. Untuk memeriksa apakah bidang tersebut kosong, Anda perlu memeriksa

if(isset($_POST["mail"]) && trim($_POST["mail"]) != "") { .. }
mboldt
sumber
Saya salin tempel kode dan saya pikir itu tidak berfungsi? Sudahkah Anda memeriksanya?
Nrc
2

Menambahkan atribut berikut ke bentuk input teks: required="required". Jika formulir tidak diisi, pengguna tidak dapat mengirimkan formulir.

Kode baru Anda adalah:

<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";    
}
Kushan Mehta
sumber
2

Anda cukup menggunakan:

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

Cara lainnya, gunakan empty ()

if(!empty($_POST['username']) and !empty($_POST['password'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
}
CONvid19
sumber
Menurut tabel perbandingan tipe PHP Anda benar. Boolean sederhana melakukan pekerjaan fungsi kosong untuk memeriksa string kosong.
viery365
Saya tahu ini adalah jawaban lama tetapi metode pertama dapat menyebabkan pemberitahuan indeks tidak terdefinisi.
ICE
1
@ICE Hal ini dapat dengan mudah dilewati dengan awalan variabel dengan @, yaitu: @$_POST['username']. Terima kasih telah memperhatikannya.
CONvid19
2

Gunakan !empty()sebagai ganti isset(). Karena isset()akan selalu mengembalikan true dalam kasus Anda.

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

Mungkin Anda bisa mencoba yang ini:

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

Nica
sumber
1
<?php
    if(isset($_POST['mail']) && $_POST['mail']!='') {
        echo "Yes, mail is set";
    }else{
        echo "N0, mail is not set";
    }
?>
Asep Nurjaman
sumber
3
Anda harus menjelaskan mengapa kode Anda menjawab pertanyaan OP.
Markus
1

Mari Pikirkan ini adalah Formulir HTML Anda di 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>

Saya pikir Anda membutuhkannya untuk database Anda, sehingga Anda dapat menetapkan Nilai Formulir HTML Anda ke Variabel php, sekarang Anda dapat menggunakan String Escape Nyata dan di bawah ini harus menjadi milik Anda

step2_check.php

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

Di mana $ db adalah Koneksi Database Anda.

AleksAnderson IT
sumber
1

Periksa untuk melihat apakah FORM telah dikirimkan terlebih dahulu, kemudian lapangan. Anda juga harus membersihkan lapangan untuk mencegah peretas.

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

Untuk menjawab pertanyaan yang diposting: isset dan empty together memberikan tiga kondisi. Ini dapat digunakan oleh Javascript dengan perintah ajax juga.

$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."!";
Vinnarian
sumber
0

Anda bisa mencoba ini:

if (isset($_POST["mail"]) !== false) {
    echo "Yes, mail is set";    
}else{  
    echo "N0, mail is not set";
}
akash ujjwal
sumber
Anda perlu menjelaskan jawaban Anda. SO ada tidak hanya untuk menjawab pertanyaan tetapi untuk mendidik orang
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";
}
?>
Thilina
sumber
0

Anda dapat mencoba,

 <?php

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