Ankety univerzálne (PHP + MySQL + CSS)
Najrôznejšie druhy ankiet sa stali súčasťou mnohých webov, a každý používateľ internetu sa s nimi nepochybne už stretol. Napriek vizuálnym rozdielom, ich podstatné znaky sú takmer identické. Z nášho pohľadu – ako programátorov týchto ankiet, je pochopiteľne jednoduchšie napísať si jeden univerzálny „hlasovací modul“ ako zakaždým písať jednotlivé ankety samostatne.
Predtým, než si ukážeme konkrétne kódy pre konkrétnu technológiu (ako príklad použijeme nerozlučnú dvojicu PHP + MySQL), pokúsme sa definovať, čo od našich ankiet budeme požadovať. Budeme skôr konzervatívni, preto naše požiadavky neprekročia bežne zaužívanú funkcionalitu, čiže:
- zobrazenie percentuálneho stavu výsledkov,
- zobrazenie vizuálneho stavu výsledkov (simulácia stĺpcového grafu),
- zobrazenie celkového počtu hlasov,
- umožnenie hlasovať len raz (cookies).
A samozrejme nesmieme zabudnúť na požiadavky univerzality, teda toho, čo nám uľahčí neskôr prácu. Môžeme pritom vychádzať z nasledovnej filozofie:
- vizuálne formátovanie rôznych ankiet budeme riešiť priradením rôznych CSS tried, čiže samotný HTML kód ankiet bude rovnaký,
- kód našeho hlasovacieho modulu bude rovnaký pre anketu s dvoma alebo s desiatimi možnosťami.
Tu je ukážka toho, k čomu sa môžeme dopracovať.
Na dosiahnutie našej funkcionality nevyhnutne potrebujeme:
- tabulku s dátami,
- funkciu na zobrazenie ankety (zobraz_anketu()),
- funkciu na zápis hlasovania (hlasuj()),
- vytvorenie predmetných kaskádových štýlov (odporúčam pozrieť zdrojový kód ukážky).
SQL štruktúra našej univerzálnej tabuľky môže teda vyzerať napríklad takto:
|
Ako som vyššie spomenul, že vopred nevieme koľko odpovedí (možností) bude mať naša anketa, vyriešime to jednoducho tak, že všetky odpovede zapíšeme ako jeden reťazec, v ktorom budú hodnoty oddelené hodnotou riadka "separator". Teda hodnota našeho riadku odpovede (pre separator ":") môže vyzerať napr.: Áno:Nie .
Riadok vysledky bude napĺňaný analogicky v tvare: počet hlasov pre 1. odpoveď separator počet hlasov pre 2. odpoveď…
V tejto chvíli je už mnohým z Vás určite jasná filozofia našeho hlasovacieho modulu. Reťazce odpovede a vysledky si rozdelíme do poľa (funkciou explode()) a získame tak jednotlivé odpovede (možnosti) ako aj zastúpenie hlasov pre jednotlivé možnosti, z ktorých neskôr ľahko vypočítame ako absolútny počet hlasov, tak aj percentuálny pomer.
Pokiaľ pozorný čitateľ namieta, že riadok "separator" je zbytočný, má do určitej miery pravdu. My ho tam však ponecháme, aby sme si zabezpečili maximálne možnú univerzálnosť.
Skôr, ako si ukážeme jednotlivé funkcie, vysvetlime si ešte akým spôsobom budeme vizuálne zobrazovať percentuálny pomer. Ako jeden z parametrov predáme funkcii zobraz_anketu() názov obrázku (najlepšie 1px x 1px jednofarebný GIF), ktorý budeme "rozťahovať" podľa percentuálnych hodnôt (ako ďaľší parameter predávame šírku pre 100%, teda maximálnu veľkosť (šírku) stĺpca)…
Funkcia zobraz_anketu() môže vyzerať napríklad takto:
|
Do súboru anketa_spracuj.php umiestnime funkciu ktorá zapíše náš hlas, teda funkciu hlasuj():
|
Po tom, čo táto funckia zapíše náš hlas, pomocou funkcie Header() presmerujeme návštevníka späť, teda:
|
V tejto chvíli máme pripravené nevyhnutné funkcie aj tabuľku. Ostáva nám už len naplniť tabuľku požadavanými dátami, napr.:
|
K správnemu fungovaniu potrebujeme samozrejme otvorené spojenie s databázou…
|
Po tom, čo sme si inicializovali premennú $anketa1 môžeme jednoducho vložiť do našej stránky tieto riadky…
|
Vyššie uvedenými funkciami sme si zabezpečili správne fungovanie našich ankiet. Na vizuálne zobrazenie použijeme kaskádové štýly, ktoré nám poskytujú úžasný komfort. Problematikou kaskádových štýlov sa však detailne zaoberať nebudeme. Ukážeme si iba jednoduchý príklad (odporúčam taktiež pozrieť zdrojový kód ukážky).
|
V rámci rekapitulácie si načrtnime, ako by mohol vyzerať konrétny súbor napr. anketa.php
|
Pre úplnosť treba uviesť aj schému súboru anketa_spracuj.php, teda:
|
Na záver treba poznamenať, že uvedené funkcie sa dajú značne rozšíriť. Napríklad pomocou knižnice GD si môžeme obrázky sami vytvárať, prípadne priraďovať každému stĺpcu inú farbu atď. Zdrojový kód ukážky si môžete stiahnuť tu.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
Jak se chránit před podvody na internetu – část 1
8. října 2024
Nejnovější
-
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024 -
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024
wyxsi
Čvc 15, 2009 v 2:34Nefunguje výsledok
Miroslav Kučera
Čvc 15, 2009 v 8:49Myslite ukazku?
wyxsi
Srp 10, 2009 v 12:41http://medium13.sk/tmp/anketa/anketa.php
Miroslav Kučera
Srp 10, 2009 v 13:03No, je to stary clanek (8 let) a bohužel nemame kontrolu nad „externimi zdroji“.
Khubajsn
Pro 6, 2009 v 11:27Mnohokrát děkuji za tento krásný článek, doufám, že všem pomohl stejně jako mně.
Anonym
Bře 16, 2010 v 8:39ja by som sa cela spitat ze ako programovat
V PHP CSS HTML MySQL
Drejk
Srp 21, 2010 v 6:58Kód ankety je zastaraný a nezabezpečený. V php5 vám kód bez úprav fungovať nebude.
Miroslav Kucera
Srp 21, 2010 v 12:09Drejk: myslíte, že v roce 2001 (coz je datum vydani tohoto clanku) existovalo PHP5?
Drejk
Srp 23, 2010 v 1:50Nie php5 samozrejme neexistovalo, ale podľa dátumu posledných komentárov vašu anketu očividne ľudia sťahujú a skúšajú nasadiť na svoje weby (na ktorých dnes beží prevažne len php5), preto by sa ich patrilo upozorniť, aby tak nerobili.
Ale mimochodom bezpečnostné zraniteľnosti v ankete sa dali opraviť aj v roku 2001.
Maathy
Pro 28, 2010 v 11:21Díky Drejku….