| 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
 

Známkování v PHP

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

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:

Ukázka známkování

Ukázka známkování

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.

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ý