Diskuze: Uložení checkbox do databaze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Udělej to tak že jeden checkbox bude mít hodnotu 4, druhej 2 a třetí 1 a do DB ukládej součet těch tří hodnot, podle toho který checkbox je zaškrtnutý
Jasně, protože máš stejný atribut name
Takže:
<input type="checkbox" name="prirazeni[]" value="1" >Základní desky<br/>
<input type="checkbox" name="prirazeni[]" value="2" >Synot<br/>
<input type="checkbox" name="prirazeni[]" value="3" >Ostatní hardware<br/>
A PHP kód bude třeba něco takovýho:
$sqls = Db::query('INSERT INTO typ (checkbox) VALUES (' . implode(',', $_POST['prirazeni']) . ')';
Pro budoucí studium si doporučuji pak ještě něco přečíst o SQL injection
ještě se zeptám mužu mít v databazi nastaveno int nebo tam musí být
varchar? pokud chci vložit více záznamu vedle sebe pouze čísla
děkuji
Varchar Int by bylo jen pro samostatnou číselnou hodnotu, pokud je to ale oddělené čárkou, ukládáš tam vlastně text.
Ono není moc dobré ukládat víc záznamů do jedné buňky. Lepší je
buď udělat extra tabulku, co bude skladovat 1:N relaci. To je tady ale docela
overkill upřímně, takže ideální by bylo řešení od Petr Langer
Pokud přiřadíš hodnotám mocniny dvojky (nebo klidně trojky, pokud chceš
dělat v trojkové soustavě ) a uložíš jejich součet. Pokud se budeš chtít dotázat, jestli
měl ten checkbox zaškrtnutou hodnotu, zeptáš se:
if( intval($saved_value) & IS_VALUE == IS_VALUE )
//nejsem si jist, jestli tam musí být to intval()
Samozřejmě si budeš muset definovat konstanty asi jako
const CHECK_MOTHERBOARDS=0;
const CHECK_SYNOT = 1;
const CHECK_OTHER_HW = 2;
nebo to můžeš načítat z DB, je to celkem jedno.
Jak to funguje: http://www.alanzucconi.com/…e-operators/ to je tedy pro C#,
ale princip je stejný
To se dá dělat i v MySQL: https://dev.mysql.com/…nctions.html
Ještě proč je to lepší než řešení s ukládáním listu, tedy
implode()
a varchar:
Zobrazeno 7 zpráv z 7.