PHP'de bir onay kutusu işaretliyse nasıl okunur?


266

PHP'de bir onay kutusu işaretliyse nasıl okunur?


8
Bu soru aslında "anlamına edildi (form ibraz edildiğinde) işaretli". Bir onay kutusunun işaretli olup olmadığını belirleyen PHP , öğe değiştirildikten sonra Ajax çağrısı gerektirir.
rybo111

Yanıtlar:


342

HTML sayfanız aşağıdaki gibi görünüyorsa:

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

Formu gönderdikten sonra kontrol edebilirsiniz:

isset($_POST['test'])

veya

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

57
Onay kutularında on, işaretlendiklerinde değer de olabilir . Bu nedenle uyumluluk için sadece kullanımı daha kolaydır isset($_POST['checkboxName']).
Damiqib

13
"Açık" değeri, değer özelliği ayarlanmadığında bazı tarayıcılar tarafından desteklenebilir, ancak genel olarak değer niteliğini ayarlamak ve gönderildiğinde bu değeri kontrol etmek daha iyidir.
m_vitaly

3
Kutu işaretlenirse 'Değer1' değişir mi?
Şubat'ta MoralCode

10
@Developer_ACE Sizi yanlış anlamadığım sürece, bu örnekteki değer value1, onay kutusu işaretlenirse olur. İşaretli değilse, $_POST['test']sadece mevcut olmazdı.
rybo111

104

Zend Framework, kendiniz de yapabileceğiniz onay kutularında güzel bir kesmek kullanır:

Oluşturulan her onay kutusu, aynı adda, onay kutusundan hemen önce ve "0" değerinde gizli bir alanla ilişkilendirilir. O zaman onay kutunuz "1" değeri ise, sonuçta elde edilen GET veya POST'ta daima '0' veya '1' değerini alırsınız

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

Ben de bunu fark ettim, ama kullanmakta kendimi güvende hissediyorum: Zend Framework de yapıyor!
hpaknia

Bu ilginç. Ancak, onay kutusunun işaretli olduğu varsayılarak, kullanıcı aracısının son değer yerine ilk değeri gönderebileceği küçük bir olasılık var mı?
rybo111

@ rybo111, kullanıcı aracısı için sanmıyorum, ama özel bir javascript form ayrıştırıcı için dikkat etmelisiniz.
regilero

Üzgünüm, birisi bana nasıl çalıştığını açıklayabilir mi? Anlamadım. Neden yalnızca son değer her zaman gönderilirse bu gizli alan ( input[type="checkbox"]'s)?
tonix

6
onay kutusunun işareti kaldırıldığında postaya iletilmez (yalnızca gizli iletilir). İşaretlendiğinde iletilir ve gizli değerin üzerine yazılır.
regilero

53

Onay kutularını dizi olarak kullanırken:

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

Kullanmalısınız in_array():

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

Önce dizinin ayarlandığını kontrol etmeyi unutmayın, örneğin:

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

bir dizi foreach ($_POST['food'] as $selected_food)olarak kontrol kutuları ve işaretli bir üzerinde çalışmak güzel, teşekkürler
bcag2

42

Onay kutunuz için HTML'nizin aşağıdaki gibi olmasına izin verin

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

Sonra formunuzu gönderdikten sonra aşağıdaki gibi kontrol etmeniz gerekir

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

    // Checkbox is selected
} else {

   // Alternate code
}

Bunun check1onay kutusu adınız olması gerektiğini varsayarsak ve form gönderme yönteminiz ise, aşağıdaki gibi değişkenleri GETkontrol etmeniz gerekir$_GET

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

   // Checkbox is selected
} 


6

Ben birkaç yıldır bu hile kullanıyorum ve PHP ve Veritabanı ile kullanırken kontrol / kontrol edilmemiş onay kutusu durumu için herhangi bir sorun olmadan mükemmel çalışır.

HTML Kodu: (Sayfa Ekle için)

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

İpucu: varsayılan olarak işaretlenmemiş olarak göstermek istiyorsanız "onay kutusunu" kaldırın

HTML Kodu: (Sayfayı Düzenle için)

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

PHP Kodu: (Sayfa Ekle / Düzenle için kullanın)

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

İpucu: Kullanıcı kontrol etmediği sürece her zaman boş bir değer olacaktır. Yani, zaten onu 0 tutmak için PHP kodu var değeri 0 tutmak. Sonra, sadece veritabanı için $ status değişkeni kullanın.


1
Bu saf basit php bunu yapmak için gerçekten iyi bir formdur. ancak etkinleştirildiğinde onay kutusunun değerinin dize olduğunu ve işaretliyse varolmayan bir değerin olduğunu unutmayın.
Elvis Technologies

4

Bir onay kutusunun işaretli olup olmadığını kontrol etmek için boş () kullanın

Form gönderildiğinde, TÜM POST değişkenleri formla birlikte gönderileceğinden, onay kutusu HER ZAMAN ayarlanacaktır .

Onay kutusunun boş olarak işaretli olup olmadığını kontrol edin:

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

3
Onay kutusunun işareti kaldırılırsa, ŞİMDİ HER ZAMAN ayarlanacak şekilde gönderilmez.
Wessam El Mahdy

^ NOT * her zaman ayarlanabilir
Codesee

3

Formunuzun işlemine bağlı olarak $ _POST veya $ _GET dizisinde karşılık gelen değeri ayarlanmış ve boş değil olarak kontrol edebilirsiniz.

ie: name"Test" in kullanıldığı bir POST formuyla (yani: şunu <input type="checkbox" name="test">kullanırsınız:

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

}

2

Hakkında bilgi al issetDeğişkenin kullanılıp kullanılmadığını veya ayarlanıp ayarlanmadığını belirtmek için if ifadelerinde kullanılabilecek yerleşik bir "işlev"

Misal:

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

2

Yukarıdaki örnekler yalnızca, bir değeri INSERT etmek istediğinizde çalışır, farklı değerleri farklı sütunlara GÜNCELLEME için yararlı değildir, bu yüzden güncellemek için küçük numaram:


//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[]" />

....

Sır, önce tüm DEĞERLER'i güncellemek (bu durumda 0 olarak) ve yalnızca kontrol edilen değerleri göndereceğinden, aldığınız her şeyin 1 olarak ayarlanması gerektiği için her şeyi 1 olarak ayarlayın.

Örnek PHP'dir, ancak her şey için geçerlidir.

İyi eğlenceler :)


2

Aşağıdaki durumlarda kısa ile yapabilirsiniz:

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

veya yeni PHP7 ile Null coalescing operator

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


1

Anahtar konumu sabitlenmiş minimalist bir boole kontrolü

<?php

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

?>

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

1
Bir cevap verirken cevabınızın NEDEN olduğu hakkında bazı açıklamalar yapmak tercih edilir . Bu özellikle ÇOK eski bir yazıyı diğer 11 cevaplara cevaplarken geçerlidir.
Stephen Rauch

Onay kutusunun durumunu koruması gerektiğini bilmeniz iyi olur. Ancak, bunu yapmak için kodunuz doğru değil.
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>

Burada amacınızı açıklayabilir misiniz?
Elvis Technologies

0

BS3'e

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

Lütfen dikkatisset($datosOrdenCompra[0]['exenta'])


0

filter_input (INPUT_POST, 'onay kutusu_adı', FILTER_DEFAULT, FILTER_FORCE_ARRAY)


0

Wordpress checked()işlevi var. Referans: https://developer.wordpress.org/reference/functions/checked/

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

Açıklama İlk iki argümanı ve işaretlenirse aynı işaretleri karşılaştırır

Parametreler $ checked (mixed) (Zorunlu) Karşılaştırılacak değerlerden biri

$ current (mixed) (İsteğe bağlı) (true) Yalnızca doğru değil karşılaştırılacak diğer değer Varsayılan değer: true

$ echo (bool) (İsteğe bağlı) Yankıyı yankılamak veya sadece döndürmek mi Varsayılan değer: true

#Return (string) html niteliğini veya boş dizeyi döndür


-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']);
} 

?>

Stack Overflow'a hoş geldiniz! Bu kod snippet'i sorunu çözebilir, ancak soruyu neden veya nasıl yanıtladığını açıklamaz. Lütfen kodunuz için bir açıklamaya yer gerçekten Yayınınızla kalitesini artırmak için yardımcı olarak,. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın. İşaretçiler / yorumcular: Bunun gibi yalnızca kod yanıtları için, aşağı oy, silmeyin!
Scott Weldon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.