| Einstein.cz | O Životě.cz | All4web | Chat4U | Soldát.cz |
Tvorba WWW
 
PHP
 
Odběr emailů

Aktuality
Články
 
 
Partnerské weby
 JakNaWeb.com - vše pro tvorbu webu - HTML, PHP, MySQL, ASP, CSS,
XML, JavaScripty, PHP
 
Informace o serveru
šéfredaktor
Marek Soldát

hostujeme u
WEB4U

kontaktní email
marek@soldat.cz

ISSN 1214-0082
 
Hledání
 
 
 
Anketa
Jakého používáte mobilního operátora?

Eurotel (20%)


T-Mobile (21%)


Oskar (26%)


Jiný (12%)


Nemám mobil (21%)



Celkem hlasovalo 110 lidí.
 
Co s článkem ?
 
Už jste četli...?
 
Ikonka serveru
 

Jednoduchá anketa ANO/NE v PHP

vydáno : 27. 01. 2003, autor : Marek Soldát, kategorie : Tvorba WWW - PHP - Ankety

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ěď.

Ukázka ankety ANO/NE

Ukázka ankety ANO/NE

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.

Fotografie autora
Marek Soldát, marek@soldat.cz
Autor je šéfredaktorem serveru Einstein.cz.
 
Komentáře
VěcAutorDatum a čas

K článku nejsou žádné komentáře.

Zobrazit Vše | Přidat nový