Bagaimana cara membaca jika kotak centang dicentang dalam PHP?


266

Bagaimana cara membaca jika kotak centang dicentang dalam PHP?


8
Pertanyaan ini sebenarnya berarti " sudah diperiksa" (ketika formulir diserahkan). PHP menentukan apakah kotak centang yang diperiksa akan membutuhkan panggilan Ajax sekali elemen itu toggle.
rybo111

Jawaban:


342

Jika halaman HTML Anda terlihat seperti ini:

<input type="checkbox" name="test" value="value1">

Setelah mengirimkan formulir, Anda dapat memeriksanya dengan:

isset($_POST['test'])

atau

if ($_POST['test'] == 'value1') ...

57
Kotak centang juga dapat memiliki nilai on, ketika dicentang. Oleh karena itu untuk kompatibilitas lebih mudah digunakan isset($_POST['checkboxName']).
Damiqib

13
Nilai "on" mungkin didukung oleh beberapa browser saat atribut nilai tidak disetel, tetapi secara umum lebih baik untuk mengatur atribut nilai dan memeriksanya saat pengiriman.
m_vitaly

3
Apakah 'Value1' berubah jika kotak dicentang?
MoralCode

10
@Developer_ACE Kecuali saya salah paham dengan Anda, nilai dalam contoh ini adalah value1jika kotak centang dicentang. Jika tidak dicentang, $_POST['test']sama sekali tidak ada.
rybo111

104

Zend Framework menggunakan peretasan bagus di kotak centang, yang juga bisa Anda lakukan sendiri:

Setiap kotak centang yang dihasilkan dikaitkan dengan bidang tersembunyi dengan nama yang sama, ditempatkan tepat sebelum kotak centang, dan dengan nilai "0". Kemudian jika kotak centang Anda sebagai nilai "1", Anda akan selalu mendapatkan nilai '0' atau '1' di GET atau POST yang dihasilkan

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

Saya juga memperhatikan hal itu, tetapi saya merasa aman untuk menggunakannya: Zend Framework juga melakukannya!
hpaknia

Ini menarik. Tetapi apakah ada kemungkinan kecil bahwa agen pengguna dapat mengirimkan nilai pertama dan bukan yang terakhir, dengan asumsi kotak centang dicentang?
rybo111

@ rybo111, untuk agen pengguna saya tidak berpikir begitu, tetapi untuk parser bentuk javascript kustom Anda harus berhati-hati.
regilero

Maaf, bisakah seseorang menjelaskan kepada saya bagaimana cara kerjanya? Saya tidak mengerti. Mengapa bidang tersembunyi itu jika hanya nilai terakhir yang selalu dikirimkan (satu input[type="checkbox"]-satunya)?
tonix

6
ketika kotak centang tidak dicentang itu tidak dikirimkan dalam pos (jadi hanya yang disembunyikan yang dikirimkan). Ketika dicentang itu ditransmisikan, dan akan menimpa nilai tersembunyi.
regilero

53

Saat menggunakan kotak centang sebagai array:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Anda harus menggunakan in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

Ingatlah untuk memeriksa array yang diatur terlebih dahulu, seperti:

if(isset($_POST['food']) && in_array(...

kotak centang sebagai array dan foreach ($_POST['food'] as $selected_food)untuk bekerja pada satu diperiksa bagus, terima kasih
bcag2

42

Biarkan html Anda untuk kotak centang Anda akan seperti

<input type="checkbox" name="check1">

Kemudian setelah mengirimkan formulir Anda, Anda perlu memeriksa suka

if (isset($_POST['check1'])) {

    // Checkbox is selected
} else {

   // Alternate code
}

Dengan asumsi itu check1harus nama kotak centang Anda. Dan jika metode pengiriman formulir GETAnda maka Anda perlu memeriksa dengan $_GETvariabel seperti

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

Saya telah menggunakan trik ini selama beberapa tahun dan berfungsi dengan baik tanpa masalah untuk memeriksa / tidak mencentang status kotak centang saat menggunakan dengan PHP dan Database.

Kode HTML: (untuk Tambah Halaman)

<input name="status" type="checkbox" value="1" checked>

Petunjuk: hapus "kotak centang" jika Anda ingin menunjukkannya sebagai tidak dicentang secara default

Kode HTML: (untuk Edit Halaman)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

Kode PHP: (digunakan untuk Tambah / Edit halaman)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

Petunjuk: Akan selalu ada nilai kosong kecuali jika pengguna memeriksanya. Jadi, kita sudah memiliki kode PHP untuk menangkapnya dan menyimpan nilainya menjadi 0. Kemudian, cukup gunakan variabel $ status untuk database.


1
ini adalah bentuk yang sangat bagus untuk melakukan ini dalam php sederhana murni. tetapi harus dicatat bahwa nilai kotak centang adalah string pada saat diaktifkan nilai yang ada jika dicentang.
Elvis Technologies

4

Untuk memeriksa apakah kotak centang dicentang gunakan kosong ()

Ketika formulir dikirimkan, kotak centang akan SELALU ditetapkan, karena SEMUA variabel POST akan dikirim bersama formulir.

Periksa apakah kotak centang dicentang dengan kosong sebagai berikut:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
Jika kotak centang tidak dicentang itu tidak akan diposting sehingga SEKARANG SELALU akan selalu ditetapkan.
Wessam El Mahdy

^ TIDAK * selalu disetel
The Codesee

3

Anda dapat memeriksa nilai terkait sebagai diset dan tidak kosong dalam array $ _POST atau $ _GET tergantung pada tindakan formulir Anda.

yaitu: Dengan formulir POST menggunakan name"tes" (yaitu:, <input type="checkbox" name="test">Anda akan menggunakan:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}

2

Pelajari tentang issetyang merupakan "fungsi" built-in yang dapat digunakan dalam pernyataan jika untuk mengetahui apakah suatu variabel telah digunakan atau ditetapkan

Contoh:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }

2

Nah, contoh-contoh di atas hanya berfungsi ketika Anda ingin menyisipkan nilai, tidak berguna untuk memperbarui nilai yang berbeda ke kolom yang berbeda, jadi di sini adalah sedikit trik saya untuk memperbarui:


//EMPTY ALL VALUES TO 0 
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();
if(!empty($_POST['check_menus'])) {
    foreach($_POST['check_menus'] as $checkU) {
try {
//UPDATE only the values checked
    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
            $stmtMU = $db->prepare($queryMU);
            $stmtMU->execute();  
        } catch(PDOException $e) {
          $msg = 'Error: ' . $e->getMessage();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

Rahasianya baru saja memperbarui semua VALUES terlebih dahulu (dalam hal ini ke 0), dan karena hanya akan mengirim nilai yang dicentang, itu berarti semua yang Anda dapatkan harus disetel ke 1, jadi semua yang Anda tetapkan menjadi 1.

Contohnya adalah PHP tetapi berlaku untuk semuanya.

Selamat bersenang-senang :)


2

Anda dapat melakukannya dengan singkat jika:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;

atau dengan PHP7 baru Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;

1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

Evaluasi hubung singkat akan dilakukan agar Anda tidak mengakses your_checkbox_nameketika itu tidak dikirimkan.


1

Pemeriksaan boolean minimalis dengan penahan posisi sakelar

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

1
Saat memberikan jawaban, lebih baik memberi penjelasan mengapa MENGAPA jawaban Anda adalah jawabannya . Ini terutama benar ketika menjawab posting SANGAT lama 11 jawaban lainnya.
Stephen Rauch

Ada baiknya Anda mengenali perlunya kotak centang untuk mempertahankan kondisinya. Namun, kode Anda untuk melakukan ini tidak benar.
Vern Jensen

1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>

dapatkah Anda menjelaskan tujuan Anda di sini?
Elvis Technologies

0

di BS3 bisa Anda masukkan

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Harap Perhatikan penggunaanisset($datosOrdenCompra[0]['exenta'])


0

filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)


0

Wordpress memiliki checked()fungsi. Referensi: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

Deskripsi Membandingkan dua argumen pertama dan jika tanda identik seperti dicentang

Parameter $ checked (campuran) (Diperlukan) Salah satu nilai untuk membandingkan

$ current (mixed) (Opsional) (true) Nilai lain untuk dibandingkan jika tidak hanya benar Nilai default: true

$ echo (bool) (Opsional) Apakah akan menggema atau hanya mengembalikan string Nilai default: true

Kembalikan atribut #Return (string) html atau string kosong


-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>

Selamat Datang di Stack Overflow! Meskipun potongan kode ini dapat menyelesaikan masalah, itu tidak menjelaskan mengapa atau bagaimana ia menjawab pertanyaan. Harap sertakan penjelasan untuk kode Anda , karena itu sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Penanda / pengulas: Untuk jawaban hanya kode seperti ini, downvote, jangan hapus!
Scott Weldon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.