Aby bylo možné vypsat obrázky s nejlepším hodnocením, je nutné dát návštěvníkům možnost je ohodnotit. Dnes tedy k dosavadnímu kódu přidáme pár řádek, které způsobí zobrazení malé ankety u každého obrázku.
Já jsem si pro vás takovou minianketu už vytvořil. Je složena z pár obrázků a pokud se vám nebude líbit, není problém ji nahradit jinými obrázky nebo i textovými odkazy prostým pozměněním html kódu ankety. Takto ji do stránky vložíte:
|
<?
if (($zaznam[hlasovalo] == "0") || ($zaznam[hlasy] == "0")):
$write_width = "0";
else:
$write_width = Round($zaznam[hlasy]/$zaznam[hlasovalo], 2);
endif;
?>
<!-- Begin Table -->
<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" WIDTH=\"91\" HEIGHT=\"19\">
<TR><TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"18\" HEIGHT=\"19\">
<A HREF=\"index.php?hlasuj=1&hlas=1&src=".$zaznam[src]."&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\">
<IMG NAME=\"anketa0\" SRC=\"anketa_1x1.gif\" WIDTH=\"18\" HEIGHT=\"19\" BORDER=\"0\"></A></TD>
<TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"18\" HEIGHT=\"19\">
<A HREF=\"index.php?hlasuj=1&hlas=2&src=".$zaznam[src]."&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\">
<IMG NAME=\"anketa1\" SRC=\"anketa_1x2.gif\" WIDTH=\"18\" HEIGHT=\"19\" BORDER=\"0\"></A></TD>
<TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"18\" HEIGHT=\"19\">
<A HREF=\"index.php?hlasuj=1&hlas=3&src=".$zaznam[src]."&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\">
<IMG NAME=\"anketa2\" SRC=\"anketa_1x3.gif\" WIDTH=\"18\" HEIGHT=\"19\" BORDER=\"0\"></A></TD>
<TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"18\" HEIGHT=\"19\">
<A HREF=\"index.php?hlasuj=1&hlas=4&src=".$zaznam[src]."&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\">
<IMG NAME=\"anketa3\" SRC=\"anketa_1x4.gif\" WIDTH=\"18\" HEIGHT=\"19\" BORDER=\"0\"></A></TD>
<TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"19\" HEIGHT=\"19\">
<A HREF=\"index.php?hlasuj=1&hlas=5&src=".$zaznam[src]."&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\">
<IMG NAME=\"anketa4\" SRC=\"anketa_1x5.gif\" WIDTH=\"19\" HEIGHT=\"19\" BORDER=\"0\"></A></TD>
<TD ROWSPAN=\"1\" COLSPAN=\"1\" WIDTH=\"19\" HEIGHT=\"19\" style=\"padding: 0px 2px 0px 2px;\"><p style=\"color: red;\"><b>".$write_width."</b></p></TD></TR></TABLE>
<!-- End Table -->
|
Z celého kódu je nejdůležitější onen odkaz. Pomocí parametru v adresní řádce tímto skriptu předáme informace o hlasování.
hlasuj=1 - proveď hlasování
hlas=1 - jakou známkou hodnotit
src={img} - který obrázek hodnotit
zazn={titulek} - název galerie
zobrazena_strana={str} - kterou stránku z galerie zobrazit po hlasování (samozřejmě aktuální :) )
PHP kód zobrazený výše umístíme ještě před vypsáním obrázku a má nám ošetřit výpis chybového hlášení, pokud by se některá z hodnot hlasovalo nebo hlasy rovnala nule (tzn. pokud ještě nikdo nehlasoval). V proměnné $write_width tak budeme mít aktuální známku, kterou vypíšeme za anketu.
Následující skript nám provede hlasování a zapíše výsledky do databáze.
|
<?
if ($hlasuj == 1):
connect();
@$prikaz = MySQL_Query("SELECT ip FROM gallery WHERE src LIKE '".$src."'");
if (!$prikaz):
echo "Nepodařilo se zjistit IP.";
exit;
endif;
if ($ind == 1):
$reload = "location.reload(\"".$PHP_SELF."\");</script>";
else:
$reload = "location.reload(\"".$PHP_SELF."?click=1&zazn=".$zazn."&zobrazena_strana=".$zobrazena_strana."\");</script>";
endif;
$what = MySQL_Fetch_Row($prikaz);
if ($what[0] != $REMOTE_ADDR):
if ($hlas == 1):
$this = 1;
elseif ($hlas == 2):
$this = 2;
elseif ($hlas == 3):
$this = 3;
elseif ($hlas == 4):
$this = 4;
elseif ($hlas == 5):
$this = 5;
else:
$this = 3;
endif;
$prikaz2 = MySQL_Query("UPDATE gallery SET hlasy = hlasy + ".$this." WHERE src LIKE '".$src."'");
if (!$prikaz2):
echo "Nepodařilo se zapsat hlas.";
exit;
endif;
$prikaz2b = MySQL_Query("UPDATE gallery SET hlasovalo = hlasovalo + 1 WHERE src LIKE '".$src."'");
if (!$prikaz2b):
echo "Nepodařilo se zapsat počet hlasujících.";
exit;
endif;
$prikaz3 = MySQL_Query("UPDATE gallery SET ip = '".$REMOTE_ADDR."' WHERE src LIKE '".$src."'");
if (!$prikaz3):
echo "Nepodařilo se zapsat IP.";
exit;
endif;
echo "<script>".$reload;
else:
echo "<script>window.alert (\"Vašeho zájmu o hlasování si vážíme, ale dvakrát za sebou hlasovat nemůžete!\");\n";
echo $reload;
endif;
endif;
?>
|
RED
Skript kontroluje ip adresu hlasujícího.
DARKRED
Při hlasování z úvodní stránky se bude v adresním řádku předávat ještě jeden paramert ind. Pokud bude existovat, skript vygeneruje kód, který způsobí přesměrování na úvodní stránku. V opačném případě bude hlasující přesměrován na místo, odkud hlasoval.
NAVY
Pokud hlasující ještě nehlasoval, zkontrolujeme jak hodnotí obrázek. Kontrola je zde proto, že kdyby nějaký otrapa chtěl pozměnit výsledky a poslal parametr hlas=35, tak aby nám to místo známky 35 přičetlo jen 3.
BLUE
U daného obrázku updatujeme údaje v tabulce v buňkách hlasy, hlasovalo a jako poslední IP zadáme ip adresu hlasujícího. Tímto mu znemožníme hlasovat 2x za sebou.
GREEN
No a nakonec provedeme přesměrování.
Já už vás nebudu víc napínat a nechám vás si celý skript stáhnout - ZDE. Aby vám aplikace fungovala, nahrajte si do databáze údaje, uvedené v souboru data.txt (obrázky potřebovat nebudete). V příštím díle vám ještě vysvětlím onen javacsript, jež obstarává otevření nového okna ve velikostech obrázku.
Čevelíček Marek
|