
Eurotel (20%)


T-Mobile (21%)


Oskar (26%)


Jiný (12%)


Nemám mobil (21%)



Jednoduchá anketa ANO/NE v PHP
V tomto článku si povíme o tom, jak vytvořit jednoduchou anketu ANO/NE v PHP a bez pomoci databáze.
Naše anketa bude zobrazovat počet kladných a záporných odpovědí, počet hlasujících návštěvníků a výsledek ztvární do grafické podoby formou zeleného a červerného gifu, který přizpůsobí svou šířku podle toho, jak velká část uživatelů hlasovala pro danou odpověď.
Zdrojový kód ankety se zkládá ze tří základních částí - načtení aktuálních výsledků, zapsání hlasů do souboru (pokud bylo hlasováno) a samotného zobrazení ankety. Anketu samozřejmě můžete ošetřit tak, aby v ní jeden uživatel nemohl hlasovat vícekrát. To je ale složitější téma, kterému se budeme věnovat v jiném článku. Samotnou úpravu lze provést tak, že všechny podmínky if(1) nahradíte podmínkou pro zápis (if($muzuhlasovat)). Moment, kdy probíhá zápis hlasu návštěvníka je pak zastoupen komentářem Zde můžete vložit aktivaci blokování opětovného hlasování. Počet odpovědí je zapsán v souboru ve formátu ano:ne.
Část první - načtení aktuálního stavu
<?php
if (file_exists("anketa.dat")):
$fp = fopen("anketa.dat", "r");
$data_anketa = FRead ($fp, FileSize("anketa.dat"));
list($ano,$ne) = Explode(":", $data_anketa);
endif;
V první části, pokud už existuje soubor s výsledky ankety anketa.dat, načteme obsah celého souboru do proměnné $data_anketa. Pomocí funkce explode ho rozdělíme na část před dvojtečkou (kladné odpovědi) a za pomlčkou (záborné odpovědi). Jednotlivé části pak uložíme do proměnných $ano a ne.
Část druhá - zápis nového hlasu
if ($odpoved == "ano" || $odpoved == "ne") {
Zápis nového hlasu provedeme jen ve chvíli, kdy uživatel kledpnul na nějakou odpověď a proměnná $odpoved má hodnotu ano, nebo ne.
if (!file_exists("anketa.dat")):
$ano = "0";
$ne = "0";
$fp = fopen("anketa.dat", "w");
fwrite ($fp, $ano .":" . $ne);
fclose($fp);
endif;
Pokud ještě neexistuje soubor s anketou, vytvoříme nový, kde počet odpovědí ano i ne bude nula.
if (1) {
// Zde můžete vložit aktivaci blokování opětovného hlasování
if ($odpoved == "ano"):
$ano++;
$data_anketa = $ano. ":" . $ne;
else:
$ne++;
$data_anketa = $ano. ":" . $ne;
endif;
$fp = fopen ("anketa.dat", "w");
fwrite ($fp, $data_anketa);
fclose ($fp);
}
Pokud tento návštěvník ještě nehlasoval (v tomto případě opětovné hlasování ošětřeno není), přičte se jedna odpověď buď ke kladným odpovědím ($ano), nebo k těm záporným ($ne). Aktuální výsledky se pak uloží do souboru.
}
?>
Část třetí - zobrazení ankety
<table>
<tr><td colspan="2">
Souhlashlasíte se vsupem ČR do EU?
</td></tr>
<tr><td align="left">
<?php if(1) { ?>
<a href="anketa.php?odpoved=ano">Ano</a>
<?php } else { ?>
Ano
<?php } ?>
<br/><?php echo($ano); ?>
</td><td align="right">
<?php if(1) { ?>
<a href="anketa.php?odpoved=ne">Ne</a>
<?php } else { ?>
Ne
<?php } ?>
<br/><?php echo($ne); ?>
</td></tr>
Pokud návštěvník ještě nehlasoval (v tomto příkladě není ošetřeno), zobrazí se texty Ano a Ne, jako odkazy. Pod každou odpovědí je také zobrazen počet hlasujících, kteří tuto odpověď zvolili.
<tr><td colspan="2" align="center">
<?php
if (file_exists("anketa.dat")) {
$soucet = $ano + $ne;
$wano = round(100/$soucet*$ano);
$wne = 100 - $wano;
} else {
$wano=50;
$wne=50;
}
?>
<img src="ano.gif" width=<?php echo($wano); ?> height="6" border="0" alt=""><img src="ne.gif" width=<?php echo($wne); ?> height="6" border="0" alt=""><br><br>
</td></tr>
Pokud soubor anketa.dat existuje, použijí se odpovědi, které už byly načteny dříve. Tento "graf" bude mít šířku 100px, proto šířka levého sloupce bude 100 / kladné odpovědi a šířka sloupce pravého bude 100px + šířka levého sloupce. Tím zajistíme, že dohromady bude graf široký 100 poxelů. Pokud soubor anketa.dat ještě neexistuje, bude šířka levého i pravého sloupce stejná, tedy 50px.
<tr><td colspan="2">
Celkem hlasovalo <?php echo($ano + $ne); ?> lidí.
</td></tr>
</table>
A ještě můžeme říct, kolik lidí už v naší anketě hlasovalo. To provedeme součtem kladných a záporných odpovědí.
Závěr
Všechny soubory ankety včetně obrázků si můžete stáhnout.
Věc | Autor | Datum a čas |
K článku nejsou žádné komentáře. | ||
Zobrazit Vše | Přidat nový |