Sonra da ayarlamak veya değil ister alınırken bir MySQL veritabanında onay kutusu değerleri saklamak ...

3 Cevap php

Kullanıcıların siteleri göndermek ve farklı tarayıcılarda çalışır söyleyebilir eğer bir form var. Şu anda, bu gibi görünüyor:

<input type=checkbox name="browsers[]"  value="IE6"/>Internet Explorer 6<br/> 

<input type=checkbox name="browsers[]"  value="IE7"/>Internet Explorer 7<br/> 
<input type=checkbox name="browsers[]"  value="IE8" checked="checked"/>Internet Explorer 8<br/> <br/>
<input type=checkbox name="browsers[]"  value="FF2" checked="checked"/>Firefox 2<br/> 
<input type=checkbox name="browsers[]"  value="FF3" checked="checked"/>Firefox 3<br/> <br/>
<input type=checkbox name="browsers[]"  value="SA3" checked="checked"/>Safari 3<br/> 
<input type=checkbox name="browsers[]"  value="SA4" checked="checked"/>Safari 4<br/> <br/>
<input type=checkbox name="browsers[]"  value="CHR" checked="checked"/>Chrome<br/>  <br/>
<input type=checkbox name="browsers[]"  value="OPE" checked="checked"/>Opera<br/>  <br/>
<input type=checkbox name="browsers[]"  value="OTH" />Other Browsers<br/>  <br/>

Ne bilmek istiyorum, bir veritabanında onay kutusu değerlerini saklamak en etkili yolu nedir nedir? Bir kullanıcı sitemde sitenin sayfasına tarayıcıları, ben bu veritabanını sorgulamak ve onunla uyumlu hangi sitelerin dönmek istiyorum. Şu anda böyle bir şey ile bunu yapmayı düşünüyorum:

<?php if (!$browsers['FF2'] = NULL) {
                //(Insert into field named 'FF2')

            } else {
                //(Keep field named 'FF2' as NULL)
            } ?>

Sitenin sayfasını ziyaret ederken Sonra, sadece değer null olup olmadığını görmek için her veritabanı sütunu (FF2, vb FF3, SA4) aracılığıyla kontrol olur. Değilse, vb 'FF2 ile Uyumlu' echo

Bu biraz mantık dışı olarak beni vurur. Her tarayıcı için ayrı bir sütun olması biraz komik görünüyor - bu gerçekten bu konuda gitmek için en kolay yolu varsa bana şüpheci olmak ya da olup olmadığını bilmiyorum. Herkes bazı başka yöntemler önerebilirsiniz?

Teşekkürler!

Kriko

3 Cevap

Esneklik sağlamak için, ben bir many-to-many ilişkiyi yapardı.

Bu yüzden, örneğin, browserId karşılık tarayıcısını destekleyen WebSitesiKimliği karşılık web sitesi, yani browserId ve WebSitesiKimliği foreign keys ile Destek tablo var. Sonra tabii kimlikleri ve diğer gerekli bilgiler ile tarayıcı ve web sitesi tablolar var.

Bu sizin seçenekleri değiştirmek zorunda olacağını düşünüyorum ne sıklıkta bağlıdır.

Genel olarak, birçok benzer alanları sahip çok basit, ama veri depolama çok esnek bir yol. Alternatif seçenek olası değerleri (bir kayıt her biri) için bir tablo oluşturmak ve bir bağlantı tablo ile kullanıcı kaydı onları bağlamak için olduğunu. Bu, ancak, daha karmaşık bir çözüm daha esnek ve veritabanı sunucusu üzerinde fazla yük koyar.

Bu ipuçları için 'One True Arama Tablo' için Google.

You asked many questions so I'll answer this one:
"What I want to know is, what's the most efficient way of storing checkbox values in a database?"

Ancak ... MySQL'in BOOLEAN kullanabilirsiniz, muhtemelen bir değişken tüm verileri depolayarak optimize olabilir [bit değişen ve uzun bir tamsayı?] Eğer 10 varsa MySQL'in Boole gerçekten 8 bit [kısa bir int ...] olduğundan doğru / yanlış değerleri, siz gerçekte, sadece 10 ihtiyacınız MySQL'in Boole, kullanıyorsanız 80 bit kullanan bendim.

First bit: Works in ie7
second bit: Works in ie8
...etc