Autor Zpráva
kopi
Profil
Zdravím,
formulářem odesílám vždy různý počet checkboxů, ty dávám do pole a cyklem foreach zpracuju. funguje mi to ale jen v přpadě, že checkboxy zaškrtávám, když je chci ale odškrtnout, tak se nic neděje.

$bonusy = array();
    if(isset($_POST['bonus'])) { // jsou data pro 'bonusy' v postu
        $bonusy = array_keys($_POST['bonus']); // do pole $bonusy se uloží id bonusu
    }
    
     if(!empty($bonusy)) {
        foreach($bonusy as $bonusyId) {
           $update_bonus = mysqli_query($conn,"UPDATE bonusy SET ".$bonusyId." = 1 WHERE id=$id"); 
           
        }
         
     }

chápu, že se zpracovávají jen checkboxy, které mají hodnotu a když je odškrtnu, tak hodnotu nemají, a proto se neupdatují. Poradíte mi, jak to mám zakomponovat do kodu?
děkuji.
Keeehi
Profil
kopi:
Spíš jde o to, že nezaškrtnuté checkboxy se vůbec neposílají.

Ale hlavně problém je už v návrhu databáze a v tom, že bonusy máte jako sloupce a ne řádky.
kopi
Profil
Keeehi:
chápu, že nezaškrtnuté se neodesílají. Jaké navrhujete řešení? Kombinuju produkty a bonusy. každý řádek je ID_produkt a buď 1 nebo 0, podle toho, jestli se na produkt váže daný bonus nebo ne.
Keeehi
Profil
kopi:
tabulka bonusy: id, jméno, ....
tabulka produkty_bonusy: id_produkt, id_bonus

Když se k nějakému produktu váže určitý bonus, bude záznam v tabulce produkty_bonusy.
kopi
Profil
Keeehi:
Děkuju. Předělám. Ale to neodstraní problém s těmi neodeslanymi checkboxy
Keeehi
Profil
kopi:
Ale ano, protože pak zavoláš
mysqli_query($conn, "DELETE FROM produkty_bonusy WHERE id_produkt = $id AND id_bonus NOT IN (".implode(',', $bonusy).")");

Nebo můžeš rovnou smazat všechny záznamy pro daný produkt a pak přidat ty nové.
mysqli_query($conn, "DELETE FROM produkty_bonusy WHERE id_produkt = $id");
kopi
Profil
Takže myslíš, že to mám udělat na dva dotazy? když odešlu formulář, tak nejdříve přes foreach zaškrtnout a pak v druhém dotazu toto:
mysqli_query($conn, "DELETE FROM produkty_bonusy WHERE id_produkt = $id AND id_bonus NOT IN (".implode(',', $bonusy).")"); ?
kopi
Profil
Už jsem si dal 1 a 1 dohromady :D Moc děkuju za pomoc

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: