Emerkove osobne stránky - Miroslav Rác

RSS
  30. január 2009

Výpis v nami žiadanom poradí

Nedávno som robil dynamicky generované menu v mojom redakčnom systéme. Jednoducho sa dajú vložiť, editovať a mazať položky v menu. Z hľadiska použiteľnosti som si povedal, že je nutné užívateľovi dovoliť upravovať aj poradie položiek pri výpise.

Predpokladáme, že už máme vytvorené vkladanie (poprip. upravovanie) a mazanie položiek. Nech už máme štruktúru tabuľky akúkoľvek, doplníme ju o stĺpec s názvom napríklad poradie. Tento stĺpec bude určovať poradie pri výpise, čiže bude typu INT a bude obsahovať hodnoty od 1 až po neurčité číslo (počet záznamov).

Pri vkladaní novej položky si zistíme najvyššiu hodnotu stĺpca poradie, pripočítame mu číslo jedna, čím získame poradie nového záznamu. Následne už len pri vkladaní nového záznamu pridelíme stĺpcu poradie túto hodnotu.

  • $vyber = mysql_query("SELECT MAX(poradie) FROM tabulka");
  • $poradie = mysql_result($vyber, 0);

Tak isto ako pri vkladaní, úpravu hodnôt stĺpca poradie musíme upravovať aj pri mazaní položiek. Je to jednoduché. V URL, ktorá vedie na tento script si spolu s id záznamu prenesieme aj jeho aktuálnu hodnotu stĺpca poradie, čím ušetríme jeden dotaz. Potom už len urpavíme hodnotu v ostaných záznamoch tak, aby nám to klapalo.

  • $poradie = intval($_GET['poradie']);
  • mysql_query("UPDATE tabulka SET poradie = poradie - 1 WHERE poradie > $poradie");

Nikdy nesmieme zabúdať na bezpečnosť. Funkciou intval() dosiahneme to, že sa nám do dotazu nedostanú žiadne znaky, ktoré tam nechceme, ale iba čísla.

Úprava poradia položiekTeraz sa dostaneme k samotnej úprave poradia. Nesmieme zabudnúť, že číslo poradia nemôže byť nulové alebo v zápornej hodnote, ani nemôže mať hodnotu, ktorá je vyššia viac ako o jedno číslo predošlého záznamu. Preto pri výpise zobrazíme prvej položke možnosť presunúť sa iba o úroveň nižšie a poslednej položke možnosť posunúť sa iba o úroveň vyššie. To tu ja nebudem riešiť, lebo každý môže mať odkazy riešene inak. Spoločné musíme mať iba informácie odovzdávane v URL. Potrebujeme id položky, aktuálne poradie a metódu posunutia (vyššie / nižžšie).

  • $id = intval($_GET['id']);
  • if($_GET['ako'] == 'hore'){ //metóda posunutia (vyššie / nižšie)
  •   $ako = '+';
  •   $poradie = intval($_GET['poradie']) - 1;
  • }else{
  •   $ako = '-';
  •   $poradie = intval($_GET['poradie']) + 1;
  • }
  • mysql_query("UPDATE tabulka SET poradie = poradie $ako 1 WHERE poradie = $poradie LIMIT 1");
  • if($ako == '-'){
  •   $ako = '+';
  • }
  • mysql_query("UPDATE tabulka SET poradie = poradie $ako 1 WHERE id = $id LIMIT 1");

To je všetko. Neskôr ak budem mať viac času, možno pridám aj rar s funkčným príkladom.


Článok napísal Miroslav Rác 30. januára 2009
vybrali.sme.sk


Airweb.sk - creative web solutions
2 príspevky

Diskusia

feroo | fero | 9. apríla 2009 o 00:03:33 | Hodnotenie: 0-+kokotina chlape

... | emer | 11. apríla 2009 o 16:32:18-+prečo?

Pridať komentár

Meno:
Predmet:
Text:Kontrola proti spamu
Menu Vyhľadávanie
  • Na stránke momentálne nie je možné vyhľadávať
Moje poznámky
  • 16. marca 2010 o 11:58:46:
    Na hodnotenie komentárov som použil správny výpočet podľa vzorcu uvedenom v dosť poučnom článku. Viac v rubrike Oplatí sa vidieť.
  • 1. januára 2010 o 13:29:02:
    Prajem vám šťastný a hlavne úspešný nový rok :)
  • 12. decembra 2009 o 23:51:55:
    Predmet v komentároch je už naozaj nepovinný :)
Používatelia
  • Je tu prítomných 1 používateľov.
emer, 2010

Na tomto blogu su vyjadrené moje myšlienky, názory a postoje k určitým veciam alebo udalostiam. Preto upozorňujem, že to čo tu napíšem nemusí byť 100% pravda a aj ja sa môžem zmýliť, alebo mať odlišný názor na vec. Texty neprešli jazykovou kontrolou.