Převracení boolean sloupce v administraci

U administrace je třeba ve většině případů počítat s tím, že ji může používat i více uživatelů naráz. Je zřejmé, že provedou-li změnu stejné databázové buňky současně, poslední zápis přepisuje ostatní. O tomhle problému se v souvislosti s PHP rozepsal Jakub Vrána.

Jsou ale situace, kdy pravidlo poslední vyhrává je tím nejmenším zlem. Jednou takovou je triviální převrácení boolean sloupce. Mějme například výpis článků u nichž je tlačítko publikovat, které se kliknutím přepíná na nepublikovat a zase zpět. URL takového tlačítka může vypadat takto:

  1. ?clanek=70&akce=prohodPublik
  2. ?clanek=70&akce=publikovat pro nepublikovaný článek
    ?clanek=70&akce=nepublikovat pro publikovaný článek

První zápis je jednoduchý a univerzální, protože ve výpisu měníme jenom ID článku a akce zůstává stejná. Převrátit boolean sloupec v databázi je také snadné. Přesto takové řešení nelze doporučit, protože převracejí-li uživatelé A a B hodnotu současně, vše se takhle zamotá:

  1. A i B vidějí článek nepublikováný
  2. A chce článek publikovat a prohodí jeho stav
  3. článek je nyní publikovaný, B který neobnovil stránku ho vidí jako nepublikovaný
  4. B chce článek publikovat a prohodí jeho stav
  5. článek je nyní nepublikovaný, což ani jeden z uživatelů nechtěl, navíc A ho vidí jako publikovaný

Druhý zápis si ve stejné situaci vede znamenitě. Uplatňuje ono pravidlo poslední vyhrává:

  1. A i B vidějí článek nepublikováný
  2. A chce článek publikovat a nastaví ho jako publikovaný
  3. článek je nyní publikovaný, B který neobnovil stránku ho vidí jako nepublikovaný
  4. B chce článek publikovat a nastaví ho jako publikovaný
  5. článek je nyní publikovaný, A i B ho vidějí správně

Komentáře

[1] igvqganpruf [web] – 2011-05-28, 17.53

[2] guglwjfuy [web] – 2011-07-22, 12.17

[3] bbthyhtzl [web] – 2011-07-24, 7.02

[4] pmwloxvvmbz [web] – 2011-07-24, 17.21

[5] xijxuakb [web] – 2011-11-04, 14.45

[6] gojilz [web] – 2011-11-27, 19.22

Přidat komentář

Identifikace autora

(zobrazí se v antispam podobě)

Komentář

Nepoužívej HTML značky a piš pokud možno s diakritikou. Na ostatní komentáře se odkazuj např. [1]

Díky za tvůj názor!

Navigace

Hledání