
Eurotel (20%)


T-Mobile (21%)


Oskar (26%)


Jiný (12%)


Nemám mobil (21%)



Známkování v PHP
Není na škodu, když mají návštěvníci webu možnost ohodnotit článek, fotografii, nebo program známkou 1 - 5 (jako ve škole). A abyste se s tímto skriptem na své stránky nemuseli namáhat, je tu tento článek.
Princip ankety není složitý - data budeme zapisovat do textového souboru a ke každé známce napíšeme počet lidí, kteří ji udělili. Jednotlivé počty oddělíme dvojtečkou. Když pak budeme chtít zobrazit výslednou známku, jednoduše vytvoříme průměr. Nejdříve si ukážeme, jak vlastně bude naše anketa vypadat:
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 známkováno) a samotného zobrazení průměru. Známkování samozřejmě můžete ošetřit tak, aby v něm jeden uživatel nemohl hlasovat vícekrát. Toto ošetřování ale bude tématem některého z dalších článků. 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("znamky.dat")):
$fp = fopen("znamky.dat", "r");
$data_znamkovani = FRead ($fp, FileSize("znamky.dat"));
list($z1,$z2,$z3,$z4,$z5) = Explode(":", $data_znamkovani);
endif;
V první části, pokud už existuje soubor s výsledky známkování znamkovani.dat, načteme obsah celého souboru do proměnné $data_znamkovani. Pomocí funkce explode ho nějprve rozdělíme na pět částí a ty uložíme do pole. Funkce list potom zapíše data z nově vytvořeného pole do proměnných $z1, $z2, $z3, $z4 a $z5. Proměnná $z1 obsahuje počet jedniček, $z2 počet dvojek a tak dále...
Část druhá - zápis nové známky
if (isset($odpoved)) {
Nová známka se přičítá tehdy, klepnul-li před tím uživatel na příslušný hypertextový odkaz. V tom případě se stránka znamkovani.php načte znovu, tentokrát s parametrem odpoved=známka. A v tom samém případě potřebujeme započítat jeho hlas.
if (!file_exists("znamky.dat")):
$z1 = "0";
$z2 = "0";
$z3 = "0";
$z4 = "0";
$z5 = "0";
$fp = fopen("znamky.dat", "w");
fwrite ($fp, $z1 .":" . $z2 .":" . $z3 .":" . $z4 .":" . $z5);
fclose($fp);
endif;
Pokud ještě neexistuje soubor se známkami, vytvoříme úplně nový, kde každá známka bude mít 0 hlasů.
if (1) {
// Zde můžete vložit aktivaci blokování opětovného hlasování
if (isset($odpoved)):
if ($odpoved == '1') $z1++;
if ($odpoved == '2') $z2++;
if ($odpoved == '3') $z3++;
if ($odpoved == '4') $z4++;
if ($odpoved == '5') $z5++;
$data_znamkovani = $z1 . ":" . $z2 . ":" . $z3 . ":" . $z4 . ":" . $z5;
endif;
$fp = fopen ("znamky.dat", "w");
fwrite ($fp, $data_znamkovani);
fclose ($fp);
}
Pokud tento návštěvník ještě neznámkoval (v tomto případě opětovné známkování ošětřeno není), přičte se jeden hlas ke známce, kterou zvolil. Aktuální výsledky se pak uloží do souboru.
}
?>
Část třetí - zobrazení ankety
<table>
<tr><td colspan="2">
Jak se Vám to líbí?<br/>
Známkujte, jako ve škole!
</td></tr>
<tr><td align="left">
<?php if(1) { ?>
<a href="znamkovani.php?odpoved=1">1</a> |
<a href="znamkovani.php?odpoved=2">2</a> |
<a href="znamkovani.php?odpoved=3">3</a> |
<a href="znamkovani.php?odpoved=4">4</a> |
<a href="znamkovani.php?odpoved=5">5</a>
<?php } else { ?>
Už jste hlasovali.
<?php } ?>
</td></tr>
<tr><td colspan="2" align="center">
<?php
if (file_exists("znamky.dat")) {
$soucet = ($z1*1) + ($z2*2) + ($z3*3) + ($z4*4) + ($z5*5);
$znamek = $z1 + $z2 + $z3 + $z4 + $z5;
if($soucet != 0) { $prumer = round(100*($soucet/$znamek))/100; } else { $prumer='?'; }
} else {
$prumer='?';
}
echo('Průměr : <strong>' . $prumer . '</strong>');
?>
</td></tr>
<tr><td colspan="2">
Celkem známkovalo <?php echo($znamek); ?> lidí.
</td></tr>
</table>
Třetí část je o trochu složitější. Nejprve je nutné zobrazit odkazy 1 - 5, aby bylo možné známkovat. Pokud známkování ošetříme proti opětovnému hlasování a uživatel už hlasoval, zobrazí se text Už jste hlasovali..
Samotné počítání dosavadního průměru je pak spíše záležitostí matematiky. To spočívá v započítání každé známky tolikrát, kolikrát byla zvolena a následném vydělení celkovým počtem známek. Ten pak můžeme buď okamžitě zobrazit, nebo nabídnout zobrazení průměru až poté, co návštěvník přispěje svým hlasem (aby nebyl ovlivňován).
Závěr
Zdrojový kód známkování si můžete stáhnout.
Věc | Autor | Datum a čas |
K článku nejsou žádné komentáře. | ||
Zobrazit Vše | Přidat nový |