Hodnotenia článkov v PHP

28. dubna 2002

Máte aj vy svoje stránky? A na nich články? A chcete vedieť, ako sa vašim čitateľom páčia? Dajte im možnosť článok zhodnotiť známkou a vyjadriť tým svoj názor. Výhoda je aj to, že táto aplikácia sa veľmi jednoducho vloží do stránok.

Celá aplikácia využíva PHP a MySQL. Nie je zložité ju vkladať na stránku, pretože využíva jednu MySQL tabuľku nezávisle od článkov. Jediné, čo bude mať s článkami spoločné, je určité ID, ktoré je pre každý článok jedinečné.

Vytvoríme si teda tabuľku:

create table hodnotenie (
id int,
z1 int,
z2 int,
z3 int,
z4 int,
z5 int,
PRIMARY_KEY (id))

Myslím, že takáto jednoduchá tabuľka úplne postačuje. Pole id musí byť, ako som písal, zhodné s nejakou hodnotou článku. K tomu prídeme ešte neskôr. Do z1z5 sa bude ukladať počet hodnotení jednotlivých známok. Znamená to, že keď užívateľ klepne na hodnotenie 1, do poľa z1 sa uloží pôvodná hodnota + 1. Tým pádom môžeme robiť grafy, vyjadriť percentá ad.

Teraz prejdeme na samotný skript, ktorý užívateľ uvidí. Bude sa volať hodnotenie.php:

<?
mysql_pconnect("SERVER", "LOGIN", "HESLO");
$hodnot = mysql_db_query("DB", "SELECT * FROM hodnotenie WHERE id = $id");
if(mysql_num_rows($hodnot)==0 || !$hodnot):
echo "Tento článok ešte nemá hodnotenie";

else:
$h = mysql_fetch_array($hodnot);
$pocet = $h["z1"] + $h["z2"] + $h["z3"] + $h["z4"] + $h["z5"] ;
$hod = $h["z1"] + 2*$h["z2"] + 3*$h["z3"] + 4*$h["z4"] + 5*$h["z5"];
$priemer = $hod/$pocet;

echo "Priemerná známka: $priemer<br>";
echo "Hlasovalo ľudí: $pocet<br>";
echo "<small>známka 1 (".$h["z1"]."), známka 2 (".$h["z2"]."), známka 3 (".$h["z3"]."), známka 4 (".$h["z4"]."), známka 5 (".$h["z5"].")</small><br><br>";
endif;

echo "Hodnoťte: <a href=’hodnot.php?id=$id&znamka=1′>1</a> – <a href=’hodnot.php?id=$id&znamka=2′>2</a> – <a href=’hodnot.php?id=$id&znamka=3′>3</a> – <a href=’hodnot.php?id=$id&znamka=4′>4</a> – <a href=’hodnot.php?id=$id&znamka=5′>5</a>";

?>

Tento skript sa pripája k databáze (doplňte svoje údaje) a v druhom riadku vyberá z tabuľky hodnotenie id, ktoré mu zadáte. Tento skript môžeme volať zo stránky s článkom príkazom require "hodnotenie.php?id=xx", kde xx je id článku, alebo ho môžeme vložiť priamo do stránky a do premennej id uložiť id článku. Potom sa to začína trošku komplikovať. Ak článok ešte nemá hodnotenie, vypíše určitý text a ďalej nerobí to, čo by robil, keby ten článok už hodnotenie mal. A robil by asi to, že by do premennej h uložil asociatívne pole s výsledkom z riadku 2. Do premennej pocet ukladáme počet ľudí, ktorí článok už hodnotili. Do premennej hod ukladáme všetky hodnotenia (počet ľudí, ktorí hodnotili článok tou ktorou zámkou * hodnota známky, to zn. napr. 25 * 4 – 25 ľudí hlasovalo za 4, všetky hodnotenia za 4 sú 100). Potom do premennej priemer uložíme podiel premennej hod a pocet, čím dostaneme priemernú známku. Ďalej uvedené vypíšeme (musíte si to graficky upraviť). Potom si vypíšeme i riadok, kde môžu užívatelia hodnotiť článok.

Teda ešte to nie je všetko. Ešte potrebujeme skript, ktorým toto hodnotenie vlastne zapíšeme:

<?
mysql_pconnect("SERVER", "LOGIN", "HESLO");
$h = "hodnot".$id;
$hh = HTTP_COOKIE_VARS[$h];
if($hh=="ano"):
Header("Location: $HTTP_REFERER?text=Uz+ste+hlasovali!");

else:
$z = "z".$znamka;
mysql_db_query("DB", "Update hodnotenie set $z = $z + 1 where id = $id");
setcookie($h, "ano");
Header("Location: $HTTP_REFERER?text=Dakujeme+za+hlasovanie");
endif;
?>

V tomto kratučkom skripte sa pripájame k databáze MySQL. V druhom a treťom riadku zisťujeme, či užívateľ už hlasoval pomocou cookies. Ak už hlasoval, presmerujeme ho späť a popr. môžeme vypísať i text, že už hlasoval. Ak však nehlasoval, pridáme k počtu hlasujúcich za konkrétnu známku ešte jeden hlas. Potom uložíme do cookie s názvom hodnotid, teda napr. hodnot123456, text "ano". Potom ho presmerujeme späť a opäť môžeme vypísať text, ktorý si nastavíme. Teda napr.:

if(isset($text)) echo $text;

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

3 komentářů

  1. philip777

    Úno 2, 2010 v 21:05

    dobry navod, akurat dve male poznamky:
    chyba ti znak $ v datovej kolekcii HTTP_COOKIE_VARS [$h]
    a overovanie pomocou cookies je dost nebezpecne pretoze kazdy skusenejsi user si moze cookies zmenit ako chce kedze to nieje nic ine ako len textovy subor na jeho vlastnom pocitaci

    Odpovědět
  2. steevee333

    Srp 14, 2011 v 17:30

    id = $id“); mas to nezabezpecene na sql injection

    Odpovědět
  3. steevee333

    Srp 14, 2011 v 17:30

    id = ‚$id'“);tak to by to malo byt :)

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *