Autor: D@Mike | 19.6.2004 |
Dnes si řekneme něco o tom jak udělat anketu v PHP bez MySQL, což se někdy
hodí s ohledem
na to, že na každém serveru nemusíte mít k dispozici MySQL databázi. To se sice
dá považovat za víhodu, ale na druhou
stranu existují servery, na kterých není možné zapisovat do souborů a to je
bohužel bez použití MySQL nutnost.
Nyní přejdeme k samotnému zdroji. Nejprve si musíme vytvořit soubor, kam se
budou ukládat data ankety. Pojmenujeme jej
anketa_data.dat a vložíme do něj tyto data.
Jak se vám anketa líbí?;2;Ano:Ne;192:168;360
Teď měnší vysvětlivka. Znaménko ; rozděluje jednotlivá data na pole a znaménko :
rozděluju údaje v polích na další části.
První pole "Jak se vám anketa líbí?" je otázka ankety. Druhé pole je počet
možných odpovědí. Třetí pole "Ano:Ne" jsou možné
odpovědi, které rozdělujeme znaménkem ":". Další pole jsou počty hlasů pro
jednotlivé odpovědi a poslední pole je celkový
počet hlasů. Teď je nutné vytvořit soubor který bude anketu zobrazovat.
Pojmenujeme ho anketa.php
Uvedu zdroj a na každém řádku bude za znaky // vysvětlivka.
---------------------------------
<?
if (File_Exists ("anketa_data.dat")): //Podmínka pokud anketa existuje
$fp = FOpen ("anketa_data.dat", "r"); //Otevřít soubor anketa_data.dat pro čtení
$data = FRead ($fp, FileSize("anketa_data.dat")); //Načíst to proměnné $data
soubor anketa_data.dat
$newdata = explode(";",$data); //Do proměnné $newdata rozděli proměnnou $data
znakem ;
$odpoved = explode(":",$newdata[2]); //Druhé pole v proměnné $newdata rozdělit
znakem : a vložit jej do proměnné $odpoved
$pocty = explode(":",$newdata[3]); //Třetí pole v proměnné $newdata rozdělit
znakem : a vložit jej do proměnné $pocty
echo"<table border=1 width=220><tr><td
align=center>$newdata[0]</td></tr><tr><td>"; //Vypsat základ tabulky a otázku
for($x=0;$x<$newdata[1];$x++): //Cyklus který vypisuje odpovědi
$sirka = $pocty[$x] / ($newdata[4] / 100) * 2.1; //Z počtu odpovědí spočítat
velikost ukazatele
if(!isset($HTTP_COOKIE_VARS["UkazkovaAnketa"])): //Podmínka pokud ještě nebylo
hlasováno
echo"<a href=anketa_pridej.php?hlas=$x style=text-decoration:none>$odpoved[$x] -
$pocty[$x]<br><img src=prouzek.jpg height=7 width=$sirka align=center></a><br>";
//Vypsat otázku x (x je proměnná cyklu for) i s obrázkovím barem
else:
echo"$odpoved[$x] - $pocty[$x]<br><img src=prouzek.jpg height=7 width=$sirka
align=center><br>"; //Pokud již bylo hlasováno vypsat opovědi bez odkazu
endif;
endfor;
echo"</td></tr><tr><td align=center>Hlasů celkem:
$newdata[4]</td></tr></table>"; //Ukončení tabulky a vypsání počtu hlasů
FClose($fp); //Uzavření souboru
else:
echo"<font color=red>Momentálně neprobíhá žádná anketa.</font>"; //Pokud soubor
anketa_data.dat nebude existovat vypíše se, že neprobíhá žádná anketa.
endif;
?>
---------------------------------
Dále je nutné vytvořit soubor který bude zpracovávat vaši odpověď. Pojmenujeme
jej anketa_pridej.php
Opět uvedu zdroj a na každém řádku bude za znaky // vysvětlivka.
---------------------------------
<?
$fp = FOpen ("anketa_data.dat", "r"); //Otevřít soubor anketa_data.dat pro čtení
$data = FRead ($fp, FileSize("anketa_data.dat")); //Načíst to proměnné $data
soubor anketa_data.dat
$newdata = explode(";",$data); //Do proměnné $newdata rozděli proměnnou $data
znakem ;
$pocty = explode(":",$newdata[3]); //Třetí pole v proměnné $newdata rozdělit
znakem : a vložit jej do proměnné $pocty
for($x=0;$x<$newdata[1];$x++): //Cyklus který kontroluje odpovědi
if($hlas==$x): //Pokud bude číslo otázky souhlasit s vaši odpovědí
$pocty[$x] = $pocty[$x] + 1; //Přičte se jeden hlas k dané odpovědi
endif;
endfor;
FClose($fp); //Uzavření souboru
$newdata[4] = $newdata[4] + 1; //Přičtení jedničky k celkovému počtu hlasů
$newdata[3] = implode(":",$pocty); //Do pole $newdata[3] spojit všechny počty
hlasů a mezi ně vložit znak :
$finaldata = implode(";",$newdata); //Do koncové proměnné která se bude ukládat
do souboru se spojít všechna pole a mezi ně se vloží znak ;
$fp = FOpen ("anketa_data.dat", "w"); //Otevřít soubor anketa_data.dat pro zápis
FWrite ($fp, $finaldata); //Zapsat do souboru anketa_data.dat proměnnou
$finaldata
FClose ($fp); //Uzavření souboru
SetCookie("UkazkovaAnketa","Voted",time()+(24*60*60)); //Nastavení cookie, že už
bylo hlasováno s platností jednoho dne
?>
<html><head>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=anketa.php"> //Znovunačtení stránky
anketa.php
</head></html>
---------------------------------
Už máme všechny zdrojové soubory, které potřebujeme. Nyní už jen stačí přihrát k
anketě ještě nějaký
obrázek jedno jaké výšky a s šířkou 1px. Pojmenujte ho prouzek.jpg. Ten bude
tvořit obrázkový
bar s počtem hlasů. Doufám, že vám tento článek nějak pomohl a pokud si chtete
vidět jak hotová anketa vypadá
koukněte
ZDE.
Pro stažení celé ankety klikněte ZDE.
Peace, Miky