Periksa apakah $ _POST ada

100

Saya mencoba untuk memeriksa apakah $ _POST ada dan jika ada, cetak di dalam string lain, jika tidak, jangan cetak sama sekali.

sesuatu seperti ini:

$fromPerson = '+from%3A'.$_POST['fromPerson'];

function fromPerson() {
    if !($_POST['fromPerson']) {
        print ''
    } else {
        print $fromPerson
    };
}

$newString = fromPerson();

Bantuan apa pun akan sangat bagus!

eliwedel
sumber

Jawaban:

171
if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}
ehmad
sumber
60

Sederhana. Anda punya dua pilihan:

1. Periksa apakah ada data posting sama sekali

//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
    // handle post data
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

(ATAU)

2. Hanya periksa apakah Kunci TERTENTU tersedia dalam data kiriman

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
Dheeraj Bhaskar
sumber
Sebagai per komentar Shi pada jawaban Augustus Francis , empty()adalah tidak benar untuk pilihan # 1, karena dalam php, string '0'setara dengan false- dan empty()kembali trueuntuk semua nilai setara dengan palsu . Jadi dengan menggunakan empty, kode akan melewatkan pencetakan jika nilainya adalah '0'. Jika Anda ingin mengecualikan string kosong, lihat jawaban Augustus.
ToolmakerSteve
33

Semua orang mengatakan untuk menggunakan isset () - yang mungkin akan berhasil untuk Anda.

Namun, penting bagi Anda untuk memahami perbedaannya

$_POST['x'] = NULL; dan $_POST['x'] = '';

isset($_POST['x'])akan kembali falseke contoh pertama, tetapi akan kembali truepada contoh kedua meskipun jika Anda mencoba mencetak salah satunya, keduanya akan mengembalikan nilai kosong.

Jika Anda $_POSTberasal dari kolom / formulir yang dimasukkan pengguna dan dibiarkan kosong, SAYA PERCAYA (meskipun saya tidak 100% yakin tentang ini) bahwa nilainya adalah "" tetapi BUKAN NULL.

Sekalipun asumsi itu salah (seseorang tolong koreksi saya jika saya salah!), Hal di atas masih perlu diketahui untuk digunakan di masa mendatang.

Rafael
sumber
4
empty () memeriksa keberadaan variabel dan nilai yang tidak kosong, jadi itulah fungsi yang akan digunakan ketika string kosong harus mengembalikan nilai salah.
Han Dijk
1
@HanDijk - per komentar Shi pada jawaban Augustus Francis , empty()adalah tidak benar di sini, karena di php, string '0'setara dengan false- dan empty()kembali trueuntuk semua nilai setara dengan palsu . Jadi dengan menggunakan empty, kode akan melewatkan pencetakan jika nilainya adalah '0'.
ToolmakerSteve
30

Terkejut itu belum disebutkan

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
John Magnolia
sumber
2
Mengapa? Jika metode server bukan POST, maka variabel POST tidak akan disetel, jadi yang diperlukan hanyalah paruh kedua. Apakah aku salah?
ToolmakerSteve
@ToolmakerSteve ya dalam banyak kasus itu sudah cukup tetapi tidak selalu jawaban saya adalah untuk menunjukkan cara lain itu bisa dilakukan.
John Magnolia
Ini juga akan berfungsi jika Anda memiliki formulir dengan kotak centang dan mengirimkan tanpa nama.
John Magnolia
2
Jelaskan situasi di mana isset($_POST['fromPerson']adalah true, meskipun if($_SERVER['REQUEST_METHOD'] == 'POST'adalah false. Kecuali jika ada situasi seperti itu, yang dibutuhkan hanyalah isset...bagian.
ToolmakerSteve
Benar, tapi sebaliknya. fromPersonmungkin tidak ada, tetapi POST mungkin masih ada. Pertanyaannya adalah, "Jika $ _POST ada." dan hanya sebagai contoh, $ _POST ['fromPerson'] digunakan. Dalam beberapa situasi, seperti yang dijelaskan @goat di sini , meskipun fromPersonadalah nama Kirim, nama itu mungkin tidak ada di POST.
papo
19
isset($_POST['fromPerson']) 
h3xStream
sumber
13

Cara yang tepat untuk memeriksa apakah kunci array ada adalah dengan fungsi array_key_exists()

Perbedaannya adalah ketika Anda memilikinya $_POST['variable'] = nullberarti kunci itu ada dan telah dikirim tetapi nilainya null

Opsi lainnya adalah isset()yang akan memeriksa apakah kunci array ada dan jika sudah disetel

Opsi terakhir adalah menggunakan empty()yang akan memeriksa apakah kunci array ada jika disetel dan jika nilai tidak dianggap kosong.

Contoh:

$arr = [
  'a' => null,
  'b' => '',
  'c' => 1
];

array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true


array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true


array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false

Mengenai pertanyaan Anda

Cara yang tepat untuk memeriksa apakah nilai dikirim adalah dengan menggunakan array_key_exists () dengan metode pemeriksaan permintaan

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}

Tetapi ada beberapa kasus yang bergantung pada logika Anda di mana isset()dan empty()bisa menjadi baik juga.

Robert
sumber
Jawaban yang fantastis, kecuali saran untuk digunakan empty. Sebagai per komentar Shi pada jawaban Augustus Francis , empty()adalah tidak benar sebagai alternatif pilihan, karena di php, string '0'setara dengan false- dan empty()kembali trueuntuk semua nilai setara dengan palsu . Jadi dengan menggunakan empty, kode akan melewatkan pencetakan jika nilainya adalah '0'. Jika Anda ingin mengecualikan string kosong, lihat jawaban Augustus.
ToolmakerSteve
Jawaban terbaik +1.
Viktor Joras
9
  • Dalam hal ini menggunakan metode issettidak tepat.

Menurut dokumentasi PHP: http://php.net/manual/en/function.array-key-exists.php
(lihat Contoh # 2 array_key_exists () vs isset () )
Metode array_key_existsini dimaksudkan untuk memeriksa keberadaan kunci dalam array.

Jadi kode dalam pertanyaan bisa diubah sebagai berikut:

function fromPerson() {
   if (array_key_exists('fromPerson', $_POST) == FALSE) {
        return '';
   } else {
        return '+from%3A'.$_POST['fromPerson'];
   };
}

$newString = fromPerson();


  • Memeriksa keberadaan array $ _POST tidak diperlukan karena ini adalah variabel global lingkungan PHP sejak versi 4.1.0 (saat ini kami tidak memenuhi versi PHP yang lebih lama).
Bronek
sumber
Kode ini hanya berbeda dalam perilaku dari issetsolusi ketika bidang posting disetel tetapi berisi NULL. Ini adalah alternatif yang baik , jika Anda ingin mengizinkan NULLdi elsecabang. Namun , ini adalah kesalahan, jika string dibutuhkan; dalam situasi itu issetmelakukan hal yang benar, tetapi kode ini tidak - itu akan meneruskan NULLnilai. Jawaban Robert nanti menunjukkan perbedaannya.
ToolmakerSteve
6

Semua metode sebenarnya tidak disarankan, ini adalah peringatan di Netbeans 7.4 dan tentunya merupakan praktik yang baik untuk tidak mengakses variabel superglobal secara langsung, gunakan filter sebagai gantinya

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
linuxatico.dll
sumber
1
Di sisi lain, KESIAPAN kode juga penting. IMHO, issetjauh lebih mudah dibaca daripada ekspresi filter. Tapi terima kasih telah menunjukkan hal ini; ini adalah opsi yang berguna untuk dipertimbangkan.
ToolmakerSteve
baik, Anda dapat menulis metode pembungkus myIsset / 2 Anda sendiri yang menggunakan filter tetapi memiliki perilaku isset / 2
linuxatico
"Semua metode sebenarnya tidak disarankan" - itu adalah pernyataan yang kuat (bahkan jika NetBeans menandai sebagai peringatan). Apakah Anda memiliki tautan ke sumber otoritatif , yang mencegah referensi langsung ke $ _POST? (Ada banyak hal tentang php yang dirancang untuk kemudahan pengkodean daripada ketelitian - lihat berapa banyak orang dalam jawaban atas pertanyaan ini yang salah menggunakan empty, tersandung oleh pengetikan php yang longgar; sulit untuk membayangkan bahwa mengakses $ _POST akan dianggap buruk style.)
ToolmakerSteve
4

Mencoba

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
Augustus Francis
sumber
Per komentar Han Dijk tentang jawaban Rafael, empty($_POST['fromPerson'])apakah tes gabungan ini. Lebih mudah untuk membaca dan mengetik :)
ToolmakerSteve
@ ToolmakerSteve: empty('0')kembali true. Jadi tidak sama.
Shi
1
@ Shi - ya, Anda benar; apa yang saya katakan salah! Tampaknya tidak ada solusi yang lebih sederhana dari kode yang ditampilkan di sini.
ToolmakerSteve
3

Coba ?isset($_POST['fromPerson'])

strager
sumber
3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}
jezmck
sumber
1
Apakah is_array ($ _ POST) memeriksa apakah ada nilai sama sekali di POST? Di aplikasi saya, saya mencoba untuk menentukan apakah ada posting atau tidak sebelum melakukan hal lain.
Jeff LaFay
1
Lihat suntingan saya. is_array()memeriksa apakah itu array, bagian kedua memeriksa apakah itu memiliki item dengan kunci 'fromPerson'.
jezmck
2

if( isset($_POST['fromPerson']) ) benar.

Anda dapat menggunakan fungsi dan kembali, lebih baik daripada mengarahkan gema.

Cristian Weiser
sumber
2
Jawaban ini tidak menambahkan apa-apa ke diskusi, yang belum dikatakan dalam jawaban lain, beberapa tahun sebelumnya.
ToolmakerSteve
1

Saya ingin memeriksa apakah isset dan apakah itu kosong di operator terner.

// POST variable check
$userID  = (isset( $_POST['userID'] )    && !empty( $_POST['userID'] ))   ? $_POST['userID']   :  null;
$line    = (isset( $_POST['line'] )      && !empty( $_POST['line'] ))     ? $_POST['line']     :  null;
$message = (isset( $_POST['message'] )   && !empty( $_POST['message'] ))  ? $_POST['message']  :  null;
$source  = (isset( $_POST['source'] )    && !empty( $_POST['source'] ))   ? $_POST['source']   :  null;
$version = (isset( $_POST['version'] )   && !empty( $_POST['version'] ))  ? $_POST['version']  :  null;
$release = (isset( $_POST['release'] )   && !empty( $_POST['release'] ))  ? $_POST['release']  :  null;
Raymondim
sumber
5
empty('0')adalah true. Jadi lebih baik tidak punya version 0, atau userID 0, dll.
Shi
0

Saya ingin menambahkan jawaban saya meskipun utas ini berumur bertahun-tahun dan peringkatnya tinggi di Google untuk saya.

Metode terbaik saya adalah mencoba:

if(sizeof($_POST) !== 0){
// Code...
}

Seperti $_POSTarray, jika skrip dimuat dan tidak ada data di file$_POST variabel, ia akan memiliki panjang array 0. Ini dapat digunakan dalam pernyataan IF.

Anda mungkin juga bertanya-tanya apakah ini memunculkan kesalahan "indeks tidak terdefinisi" karena kami memeriksa apakah $_POSTtelah disetel ... Sebenarnya $_POSTselalu ada, kesalahan "indeks tak terdefinisi" hanya akan muncul jika Anda mencoba mencari $ _POST nilai larik yang tidak ada.

$_POSTselalu ada dengan sendirinya kosong atau memiliki nilai larik. $_POST['value']mungkin tidak ada, sehingga memunculkan kesalahan "indeks tidak terdefinisi".

Jack Wright
sumber