Nasıl onay kutusu durumunu gelmek her zaman PHP script için birlikte geçmedi mi?

4 Cevap php

Ben bir HTML formu var:

<form action='process.php' method='post'>
  <input type='checkbox' name='check_box_1' /> Check me!<br>
</form>

Burada PHP script bir bölümü process.php:

echo (isset($_POST['check_box_1']))?'Set':'Girilmedi';

Onay kutusu ayarlanır yazısının çıkışı

Set

Onay kutusunu ayarlı değil ama ne zaman, çıktı:

Girilmedi

Neden bu? Benim PHP komut emin onlar script boyunca geçirildi yapmak için $_POST değişken bir dizi denetler, çünkü bu çok kötü bir tasarım gibi görünüyor. $_POST['check_box_1'] değeri ayarlanırsa, o zaman nasıl komut sadece set değil değer veya onay kutusunu iletmekten başarısız olmadığını biliyor musunuz?

4 Cevap

Bu tasarım özelliği üstesinden gelmek istiyorsanız, bu deneyin:

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

Bu şekilde, her zaman $_POST['check_box_1'] geri arama sayfasında ayarlanmış olacak ve o zaman sadece onlar işaretli olup olmadığını görmek için değerini kontrol edebilirsiniz. Daha sonra bir öncelik alacak beri iki giriş olsa bu sırayla olmak zorunda.

nickf iyi cevabı verilmiştir, ancak aynı adı taşıyan birden fazla onay kutularını zaman özel durumlarda çalışmaz. (JQuery kullanıyorsanız) Bunun yerine, şöyle bir gerçek, gizli bir giriş değeri geçiş için sahte bir onay kutusunu kullanabilirsiniz:

<input type="checkbox" onclick="$(this).next().val(this.checked?1:0)"/>
<input type="hidden" name="verified[]"/>

<input type="checkbox" onclick="$(this).next().val(this.checked?1:0)"/>
<input type="hidden" name="verified[]"/>

Sadece gizli onay kutularını adlandırılır unutmayın.

Ne yazık ki, gönderilen formlarda onay kutularını için spec nasıl çalışır - onay kutusu işaretli değilse, tarayıcı ille de tüm bu alan göndermez.

Işaretli onay kutularını Sadece değeri sunucuya gönderilmektedir. Bu bir HTML / tarayıcı tasarım şeydir ve PHP ile ilgisi yoktur. Başka nasıl güvenilir bir denetlenmeyen birinden bir kontrol kutusunu ayırt edebiliriz?

... Sonra nasıl komut sadece set değil değer veya onay kutusunu iletmekten başarısız olmadığını biliyor musunuz?

Bunu sağ olsun tarayıcı ve PHP güvenebilirsiniz. Bu set değilse, kutusu işaretli değildi. Eğer formu gönderen ve yanlış alabilirsiniz bazı JavaScript çalıştırıyorsanız, bu komut dosyası hata ayıklama için sizin sorumluluğunuzdadır.


"Kötü bir dizayn" ile ilgili:

Bu efficient tasarım. Değerler sadece metin olarak gönderirseniz sınırlama verilen sadece iki olasılık vardır:

  1. checkbox:state=checked&checkbox:value=myvalue gibi, ayrı ayrı değeri hem de devleti gönder. Kullanıcının bu giriş elemanı adları için izin ne büyük baş ağrısı ve belirsizlikleri neden ve ne değildir ki, bir an için varsayalım.
  2. "Kontrolsüz" demek için sihirli bir değer kullanın: checkbox=false. İşte ben böyle bir onay kutusunu yapmak anlamına gelir: <input type="checkbox" name="checkbox" value="false" />

En yukarıdaki çözüm ya kullanılacak ve onlarla ilişkili sorunları çözülmüş olacağını varsayalım. Bu sayfadaki her onay kutusunu için bir POST değeri göndermek olacağı anlamına gelecektir. Genellikle bu büyük bir anlaşma değil, ama hadi 50 onay kutularını içeren bir sayfa düşünelim. Çok gerçekçi değil derdim. Ne 200 ile dersin? Yani her POST HTTP başlıklarını 200 * ~10+ karakter fazladan var, muhtemelen bunların çoğu sadece kullanıcı not yaptın ne söylüyorum.

Bant genişliği çok kıymetli iken bu tekniği icat edilmiştir yana, sadece not kontrolsüz onay kutularını değerleri göndermek için en verimli.