obsah súboru: anketa.php3
<?
$adresa = $HTTP_X_FORWARDED_FOR . $REMOTE_ADDR;            //zistime IP adresu navstevnika + IP z ISP Cache servera

if ($hlasoval==ano):
     $cas = 1200;                                          //doba za ktoru sa moze znova hlasovat
                                                           //ak uz hlasoval a cookies su stale ulozene zvysi sa hodnota $uz_hlasoval
     $uz_hlasoval++;                                       //cookies su serveru zasielane automaticky, po naviazani spojenie klient server
     if ($uz_hlasoval == 1):                               //je tu prvy krat alebo ma zakazane Cookies => test IP
          $data = file("data.log");                        //prehlada log subor na pritomnost IP adresy
          for ($i=0; $i<count($data); $i++):
              $data[$i] = str_replace("\n","",$data[$i]);
              $zaznam = explode(":",$data[$i]);
              if ($zaznam[7]==$adresa):      //zistuje, ci nasiel rovnaku IP v log subore, ak ano porovna cas posledneho hlasovania
                   if (time()-mktime($zaznam[0],$zaznam[1],$zaznam[2],$zaznam[3],$zaznam[4],$zaznam[5])<$cas) $uz_hlasoval=2;
              endif;
          endfor;

     endif;

     if ($uz_hlasoval == 1):                                    //je tu prvy raz
          //caka, kym prestane existovat hlasuje_niekto_iny, sucasne cisti vyrovnavaciu pamat, opakuje kazdych 500ms
          do {ClearStatCache();usleep(500);} while (file_exists("hlasuje_niekto_iny"));
          fopen("hlasuje_niekto_iny","w");                      //vytvori subor, aby nikto nemohol hlasovat

          setcookie("uz_hlasoval",$uz_hlasoval,time()+$cas);    //zasleme cookies klientovi s platnostou 20 min od teraz

          $subor = fopen("data.log",w);                         //zapiseme do log suboru zaznam o hlasovani + IP adresu
          if ($uz_hlasoval == 1) fwrite($subor,date("H:i:s:m:j:Y").":".$volba.":".$adresa."\n");
          for ($i=0; $i<count($data); $i++):
                fwrite($subor,$data[$i]."\n");
          endfor;
          fclose($subor);

          $subor=file("anketa");                                    //anketa, otazky a vysledky su v subore anketa
          $pocet_otazok = str_replace("\n","",$subor[0]);           //v prvom riadku je pocet otazok
          $otazka=str_replace("\n","",$subor[1]);                   //v druhom riadku je otazka
          $texty=explode("|||",str_replace("\n","",$subor[2]));     //v tretom su jednotlive odpovede oddelene |||
          $hlasy = explode("|||",str_replace("\n","",$subor[3]));   //vo stvrtom su prislusne pocty hlasov
          $sucet = 0;
          $hlasy[$volba]+=1;                                        //v premennej volba je cislo poslednej volby, => zvysenie o 1
          $subor1=fopen("anketa",w);                                //vsetky nove udaje sa zapisu do "anketa"
          fwrite($subor1,$pocet_otazok."\n");                       //do 1. riadku pocet otazok
          fwrite($subor1,$otazka."\n");                             //do 2. riadku otazka

          for ($i=0;$i<$pocet_otazok-1;$i++):                       //jednotlive odpovede spojime retazcom |||
                fwrite($subor1,$texty[$i]."|||");
          endfor;
          fwrite($subor1,$texty[$i] . "\n");                        //do 3. riadku spojene odpovede

          for ($i=0;$i<$pocet_otazok-1;$i++):                       //jednotlive hlasy spojime retazcom |||
                fwrite($subor1,$hlasy[$i]."|||");
          endfor;
          fwrite($subor1,$hlasy[$i]);                               //do 4. riadky spojene hlasy

          fclose($subor1);                                          //zatvorime subor
          include("vypis.php3");                                    //vypiseme anketu aj s novym hlasom
          unlink("hlasuje_niekto_iny");                             //zmaze subor, aby mohli hlasovat ostatni
     else:                                                          //niekto sa pokusa hlasovat viac krat za sebou, uz_hlasoval <> 1
          echo "<FONT face='Arial' size='2' color='#AA0000'><center>Už ste hlasovali!</center></font>";
          include("vypis.php3");                                    //vypiseme anketu
     endif;
else:                                                               //prve zobrazenie ankety
     include("vypis.php3");                                         //vypiseme anketu
endif;
?>
 
obsah súboru: vypis.php3
<HTML>
<HEAD>
<TITLE>Anketa na WWW, spracovanie pomocou PHP</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<style type="text/css">
  a:link       { color: #0000AA; text-decoration: none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px }
  a:visited    { color: #0000AA; text-decoration: none; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px }
  a:hover      { color: #0000FF; text-decoration: underline; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px }
  .hlavicka    { background-color: #BBBBBB; font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; Font-weight: bold; color:#FFFFFF; font-weight: bold }
  .hlavicka_v  { background-color: #BBBBBB; font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif; Font-weight: bold; color: #FFFFFF; font-weight: bold }
  .telo        { background: #EEEEEE; font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000}
  td           { font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000}
</style>
</head>
<body>

<?
     $subor=file("anketa");                                   //anketa, otazky a vysledky su v subore anketa
     $pocet_otazok = $subor[0];                               //1. riadok je pocet odpovedi
     $otazka=$subor[1];                                       //2. riadok je otazka
     $texty=explode("|||",$subor[2]);                         //3. riadok su texty odpovedi oddelene |||
     $hlasy = explode("|||",$subor[3]);                       //4. riadok pocty jednotlivych odpovedi oddelene |||
     $sucet = 0;
     for ($i=0;$i<$pocet_otazok;++$i):                        //zistime pocet vsetkych hlasov
           $sucet += $hlasy[$i];
     endfor;
     $pocet_hlasov = $sucet;
     if ($sucet==0): $sucet=1; endif;                         //ak pocet hlasov je nula nastavime si lokalne 1, kvoli deleniu 0
     echo "<br>";                                             //vypiseme tabulku s anketou
     echo "<table border='0' width='150'  cellspacing='3' cellpadding='3'>";
     echo "<tr><td align='center' class='hlavicka_v'>Anketa</td></tr>";
     echo "<tr><td align='center'></td></tr>";
     echo "<tr><td align='left' class='hlavicka'>" . $otazka . "<br></td></tr>";
     for ($i=0;$i<$pocet_otazok;++$i):
           echo "<tr><td valign='middle' align='left' class='telo'>";
           echo "<a href='anketa.php3?volba=".$i."&hlasoval=ano'>";  //parametre posielame skriptu v URL riadku
           echo $texty[$i] ." <br>";                                 //stlpce grafu su tvorene obrazko, ktoremu sa mi rozmer v znacke IMG
           echo "<IMG BORDER='0' SRC='graf.gif' align='middle' width='".round(75*$hlasy[$i]/$sucet)."' height='8'></a>&nbsp;&nbsp;". round(100*$hlasy[$i]/$sucet) . "%";
           echo "</td></tr>";
     endfor;
     echo "<tr><td></td></tr>";
     echo "<tr><td class='telo'>Počet hlasov: " . $pocet_hlasov . "</td></tr>";
     echo "<tr><td><a href='mailto:gunis@gjar-po.sk'>© Ján Guniš, 2003</a></td></tr>";
     echo "</table>";
     echo "\r";
?>
</body>
</html>

 

obsah súboru: anketa
7
Má zmysel Klub učiteľov informatiky?
jednoznačne|||áno|||asi hej|||neviem|||ani nie|||nie|||aký klub?
0|||0|||0|||0|||0|||0|||0

 

obsah súboru: data.log
11:57:14:05:14:2003:4:10.2.241.3213.81.218.26
11:35:42:05:14:2003:4:10.2.241.3213.81.218.26

Obrázok: graf a jeho zväčšenina: graf