Anketa v PHP bez MySQL

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: D@Mike
Datum: 19.6.2004
Hodnocení/Hlasovalo: 2.63/35

Tento článek se může hodit tomu kdo si chce udělat anketu a nemůže z různých důvodů na svém webu používat MySQL.

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 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