Autor Zpráva
Venca190
Profil *
Dobrý večer,

mám script na vkládání článků a zařazení do kategorií(lze zvolit i více kategorií) pomocí checkboxů. To mi funguje parádně. Mám pro to dvě tabulky,první tabulka slouží pro uložení nadpisu, obsahu článku a druhá tabulka je pro id_clanku, id_kategorie ... tedy když zatrhnu 3 kategorie, budu mít v druhé tabulce 3 řádky se stejným id_článku u id_kategorie každé jiné podle vybrané kategorie.
kod mám
...
script pro uložení článku
...
foreach($_POST['check_list'] as $selected) {
$zapis = dibi::query('INSERT INTO `clanky_kategorie`', array(
    'id_kategorie' => $selected,
    'id_clanku' => $aktual_id,
));
}

nyní řeším editaci článku a narážím na problém, jak mám udělat, aby když změním kategorie článku se mi podle toho upravila druhá tabulka v db podle aktuálního výběru checkboxu? Protože dejme tomu u přidávání článku jsem zaškrtl 3 kategroie a v editaci odškrtnu 2 kategorie, zbyde mi tedy jedna a v db by to mělo ty co už nejsou zaškrtlí smazat...a naopak, když zatrhnu další mělo by to do DB přidat další řádky atd. Jak se tohle řeší? Napadá mě asi jen možnost, že při editaci to smaže všechny řádky tabulky daného id_clanku a zas vytvoří nový výběr.
Kajman
Profil
Můžete smazat jen ty kategorie u článku, které nejsou zatrhuté (pokud není zatrženo nic, smažte všechny kategorie u článku).

Můžete nechat insert jak při přidání, stačí uvést
insert ignore into ...
Pokud tam je primární klíč na kombinaci sloupců, vloží se jen nové.

Ale o chlup ryhlejší bývá přidání 3 řádků jedním insertem než dělat 3 inserty jednoho řádku.
Alphard
Profil
Můžete smazat jen ty kategorie u článku, které nejsou zatrhuté (pokud není zatrženo nic, smažte všechny kategorie u článku).
K tomu bych doplnil konstrukci delete from tabulka where sloupec not in (seznam id).
Kajman
Profil
... and clanek_id=42
Venca190
Profil *
Díky, takže pokud to chápu dobře, budu mít dva dotazy (insert ignore into a delete)?

Ještě mám jeden dotaz, jak udělat kontrolu, že je vyžádováno minimálně 1 kategorie zaškrtnout?
ted mám
if (empty($kategorie)) { $err[] = "Vyber min. jednu kategorie."; }
Monkeys
Profil *
Venca190:
Ak nie je nic zaskrtnute mozete ukladat defaultnu hodnotu, bez toho aby ste s tym otravovali uzivatela.
M.
Venca190
Profil *
Monkeys:
defaultní hodnotu? Ta není definovaná žádná. Mám cca 15 kategorií a není preferovaná žádná.
Kajman
Profil
Venca190:
Ano dva dotazy. Nejde mazat a vkládat jedním dotazem.

empty by mělo fungovat, v čem je problém?
Venca190
Profil *
Kajman:
Už v ničem, měl jsem v proměnný přidanou funkci ochrany(htmlspecialchars,trim a stripslashes), bez ní to funguje. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0