Na začátku souboru, je třeba se připojit k databázi. Metodou include_once začleníme databázový konektor. Povšimněte si pouze, že je použito relativní adresování, kterou lze zaměnit za absolutní cestu podle potřeby.
V dalším kroku je třeba vytvořit databázovou tabulku. Pokud je předán hlas metodou GET, lze hlas uložit do tabulky.
<?php
include_once('../../db_konektor.php');
$ip=$_SERVER['REMOTE_ADDR'];
$dotaz1='CREATE TABLE hlasovani(id INT UNSIGNED AUTO_INCREMENT UNIQUE, nazev_hlasovani VARCHAR(20) NOT NULL,odpoved TINYINT NOT NULL,ip VARCHAR(20),cas TIMESTAMP)';
mysqli_query($db,$dotaz1);
// uložení hodnoty hlasování
if(isset($_GET['hlas']))
{
$hlas=$_GET['hlas'];
$dotaz2='INSERT INTO hlasovani(nazev_hlasovani,odpoved,ip) VALUES("hry",'.$hlas.',"'.$ip.'")';
$potvrzeni_hlasovani=mysqli_query($db,$dotaz2);
}
?>
Povšimneme si, jakým způsobem je předávána hodnota hlasu.
<ul>
<li><a href="anketa.php?hlas=1">Mafia DE</a></li>
<li><a href="anketa.php?hlas=2">WOFF</a></li>
<li><a href="anketa.php?hlas=3">FIFA</a></li>
<li><a href="anketa.php?hlas=4">Minecraft</a></li>
<li><a href="anketa.php?hlas=5">LOL</a></li>
</ul>
Výběr statistiky z databáze lze provést následujícím kódem.
<?php
$dotaz3='SELECT COUNT(IF(odpoved=1,1,NULL)) AS jedna, COUNT(IF(odpoved=2,1,NULL)) AS dva, COUNT(IF(odpoved=3,1,NULL)) AS tri, COUNT(IF(odpoved=4,1,NULL)) AS ctyry, COUNT(IF(odpoved=5,1,NULL)) AS pet FROM hlasovani';
$vysledky=mysqli_query($db,$dotaz3);
$pole=mysqli_fetch_array($vysledky);
if(isset($pole['jedna'])){$a=$pole['jedna'];}else{$a=0;}
if(isset($pole['dva'])){$b=$pole['dva'];}else{$b=0;}
if(isset($pole['tri'])){$c=$pole['tri'];}else{$c=0;}
if(isset($pole['ctyry'])){$d=$pole['ctyry'];}else{$d=0;}
if(isset($pole['pet'])){$e=$pole['pet'];}else{$e=0;}
$celkem=$a+$b+$c+$d+$e;
$a=round($a/$celkem*100,0);
$b=round($b/$celkem*100,0);
$c=round($c/$celkem*100,0);
$d=round($d/$celkem*100,0);
$e=round($e/$celkem*100,0);
?>
Prezentaci dat lze pomocí datových pruhů. Podíl hlasů v procentuálním vyjádření nám poslouží k nastavení šířky pruhu. Jednotlivé pruhy jsou vlastně prvky div.
<div id="statistika">
<div class="procento"><?php echo($a); ?>%</div><div class="pruhy" style="background:blue;width:<?php echo($a); ?>%;"></div>
<div class="procento"><?php echo($b); ?>%</div><div class="pruhy" style="background:red;width:<?php echo($b); ?>%;"></div>
<div class="procento"><?php echo($c); ?>%</div><div class="pruhy" style="background:green;width:<?php echo($c); ?>%;"></div>
<div class="procento"><?php echo($d); ?>%</div><div class="pruhy" style="background:yellow;width:<?php echo($d); ?>%;"></div>
<div class="procento"><?php echo($e); ?>%</div><div class="pruhy" style="background:black;width:<?php echo($e); ?>%;"></div>
</div>
K zamyšlení
- Jak ošetřit, aby návštěvník webu mohl hlasovat pouze jednou?
- Jak ošetřit chyby, které vzniknou při prázdné databázové tabulce?
- Jak ošetřit vstupy, aby kód nebyl zneužitelný při předávání hodnoty metodou GET?
- Jak lépe zorganizovat webovou aplikaci, aby bylo možno udržovat v jedné databázové tabulce více anket? Tedy, stačila by nám pouze jedna tabulka?
