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