PHP: anketa s databází

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í

  1. Jak ošetřit, aby návštěvník webu mohl hlasovat pouze jednou?
  2. Jak ošetřit chyby, které vzniknou při prázdné databázové tabulce?
  3. Jak ošetřit vstupy, aby kód nebyl zneužitelný při předávání hodnoty metodou GET?
  4. 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?

Přílohy

  • zip anketa
    Velikost souboru: 1 KB Stažení: 25

Napsat komentář