Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Anketní systém v PHP
php_anketa
6. března 2001, 00.00 | Chcete nechat návštěvníky svých stránek hlasovat na různá témata? Nechte se inspirovat naším článkem a udělejte si svůj anketní systém!
Anketní systém
Pro vytvoření tohoto jednoduchého anketního systému budeme potřebovat
podporu PHP skriptů a databázi (já používám MySQL). Další věcí,
kterou si usnaďnuji práci s databází jsou tyto tři soubory,
které jsou volně šiřitelné (ct_sql.inc, db_mysql.inc, local.inc) - v souboru
local.inc si nastavíme parametry pro připojení k databázi (pro větší bezpečnost
si je přejmenujte na *.php :)
Co vytvoříme nejdříve
Jedinou věc, kterou si musíme vytvořit je tabulka v datábazi,
ve které budeme mít uložené všechny ankety. Tento způsob je
jednoduchý, má však jednu nevýhodu. Má stanovený max. počet
možností výběru odpovědí. Z praxe se však
ukazuje že 7 je dostatečné množstí. Takže vytvoříme tabulku,
ve které bude mít 16 sloupcu. Jeden pro jednoznačnou identifikaci ankety (sloupec id),
další pro otázku(sloupec otazka) a 14 (odp1 az idp7 pro odpověd a p1 az p7 pro počet odpovědí).
Tabulku vytvoříme pomocí sql dotazu.
create table ankety (id int4 not null default '0' auto_increment primary key, otazka varchar(50), odp1 varchar(35), p1 int2, odp2 varchar(35), p2 int2, odp3 varchar(35), p3 int2, odp4 varchar(35),p4 int2, odp5 varchar(35), p5 int2, odp6 varchar(35), p6 int2, odp7 varchar(35), p7 int2 )
Dále bude potřeba vytvořit údaje o anketě, tedy nějaký systém pro tvoření, úpravu a mazání anket.
Tomuto se bude věnovat v druhém díle. Zatím však stačí poslat databázi tento příkaz.
insert into ankety values(0,"Jak často jsi na internetu?", "Jsem na internetu náhodou",0,"Jednou za čas",0,"Jednou za týden", 0,"3x do týdne",0,"Denně", 0, "Je to má droga", 0,"",0 )
Mužete si všimnout že 7.možnost odpovědi není vyplněna, zobrazovací funkce tento sloupec vůbec nevykreslí :)
Jak se s tím bude pracovat?
Způsob jak vkládat ankety je několik. Já doporučuji univerzální způsob,
který mi umožní vložit anketu kamkoliv do mých stránek. Nejdříve něco k jeho principu.
Do stánek vložím na určené místo anketu pomocí volání "funkce" zobrazanketu(idankety : integer)(z programátorského
hlediska to funkce není, protože její výstup není v hodnotě, ale na obrazovku) a vykonání
bude provádět soubor delejanketu.php, který se nebude mít žádný výstup na obrazovku,
ale na jeho konci nás znovu přesměruje na stánku na které byla anketa zobrazena.
Tento pracovní soubor také zajistí pomocí cookies, aby se nemohlo hlasovat dvakrát. (lze to zajistit i pomocí identifikaci IP adresy Poznámka redakce: tomuto problému se budeme věnovat ve speciálním článku)
Pracovní soubor delejanketu.phtml
Na začátku souboru si vložím usnadňující soubory (*.inc) popsané na začátku
a definuji objekt ( pokud neumíte objektově programovat, vůbec to nevadí, já také ne :)
|
Takže teď můžeme sestavit dotaz, který upraví(zvýší o jedna) počet odpovědí na kterou se kliknulo.
|
A nakonec přesměrujeme návštěvníka zpět na stránku, ze které hlasoval. Provedeme to pomocí HTTP hlavičky a proměnné $HTTP_REFERER ve které je hodnota stránky ze které se přišlo.
|
Teď přijde věc zajímavější, zobrazit údaje z ankety. Vyřešíme to definicí funkcí, kterou si budeme moci vložit kamkoliv do kódu stránek. (Jen ji nevolejte v souboru delejanketa.php ) Ja ji vytvorim treba v souboru stranka.phtml
|
|
|
Zobrazovací část funkce
Máme tedy spočítány celkový počet hlasů, jiné hodnoty máme v "databázovém objektu".
Můžeme přistoupit k zobrazení ankety. Ještě bych upozornil, že každý si asi zobrazení
udělá podle svého, budu se tedy snažit o jednoduché zobrazení,hlavně aby se pochopil jeho princip.
|
Otázka je zobrazena a teď můžeme přistoupit k zobrazování jednotlivých položek, využili na to cyklus for. Aby se však při kliknutí na odpověd, hlas započítal musím text odpovědi definovat jako odkaz. Tento odkaz bude ukazovat na náš "pracovni soubor" delejanketu.php . Soubor však musím volat s parametry takže za jeho název přidám ?id=1 tím řeknu že soubor delejanketu.php bude mít přednastavenou hodnoutu proměné id na 1. Já však místo 1 vložím současnou hodnotu proměnné $id. A dále připojím pomoci &odp= a číslo odpovědi (dosazené pomocí proměnné $i)
|
|
Zobrazení ankety
Anketu zobrazíme voláním funkce zobrazanketu($id) to znamená
v souboru stranka.phtml který je jako příklad doplním tohle
|
Elegantnější zobrazení ankety (přehlednější pro tvůrce stránek)
Pokud však nechceme do každého souburu psát definici zobrazovací funkce,
tak necháme soubor stranka.phtml jen s definicí funkce (bez jejího volání)
a do absolutně jiného souboru vložíme tohle
|
Download popisovaných souborů
Poznámka redakce: Takto popisovaný způsob zobrazení anket je jednoduchý a snadný pro pochopení principu. V praxi je ale lépe při provedení hlasování html kód ankety vygenerovat do statického souboru a ten poté includovat. V případě navštěvovaného serveru to velmi oceníte (srovnejte kolikrát někdo hlasuje a kolikrát je stránka pouze zobrazena - jsou zbytečně vypočítávány parametry ankety). Obecně je nutné vždy myslet na to, co je vhodné zobrazovat on-line a co můžeme předgenerovat, ale o tom možná jindy ve speciálním článku..
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007