Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Polli php:llä ja gd:llä

Cc [02.01.2006 19:16:23]

#

Tämä skripti on graafinen kysely, jossa on vastaus vaihtoehtoja maximissaan 8 kpl.
Tässä skriptissä on käytetty hyväksi Antti Laaksosen <a href="https://www.ohjelmointiputka.net/koodivinkit/23564-php-php-ympyrädiagrammi">PHP-ympyrädiagrammi</a> koodia kuvaajan piirtämisessä.
Tämä skripti tarvitsee palvelimelta php tuen ja GD-libraryn, jonka version on oltava vähintään 2.0.

Koodi laitetaan sivulle include 'polli.php'; tavalla

polli.php

<?php

//Asetukset
$aanestaneet = @file("admin/aanestaneet.txt"); // Tiedosto jossa on jo äänestäneiden IP-osoitteet
$tulokset = @file("admin/tulokset.txt"); // Tiedosto jossa on äänien määrä ja kysymykset

if ($_GET["vastaus"] == "") {

   //Käydään jo äänestäneiden ip osoitteet läpi
   foreach ($aanestaneet as $value) {
      $aanestanneet = explode("|", $value);
      $ip = trim($aanestanneet[0]);
      if ($ip == $_SERVER['REMOTE_ADDR']) {

         //Jos on jo äänestännyt niin lisätään kuvaaja
         echo '<img src="kuvaaja.php" alt="Kyselyn tulokset" />';
     die();
      }

      //Jos ei niin lisätään kysymykset
      elseif($ip != $_SERVER['REMOTE_ADDR']) {
         $r = 0;
         echo '<center>';
         echo '<h3><u>Kysely</u></h3><br />';
         foreach ($tulokset as $value) {
            $kysymykset = explode("|", $value);
            $kysymys = trim($kysymykset[1]);
            $kysymys = str_replace("ä", "ä", $kysymys);
            $kysymys = str_replace("ö", "ö", $kysymys);
            echo '<a href="index.php?sivu=etusivu&vastaus=' . $r . '" title="' . $kysymys . '">' . $kysymys . '<br />';
            $r++;
         }
         echo '<br /></center>';
     die();
      }
   }
}

elseif ($_GET["vastaus"] != ""){

   //Tarkistetaan taas onko jo äänestetty, ettei voi huijata
   foreach ($aanestaneet as $value) {
      $aanestanneet = explode("|", $value);
      $ip = trim($aanestanneet[0]);
      if ($ip == $_SERVER['REMOTE_ADDR']) {
         echo '<img src="kuvaaja.php" alt="Kyselyn tulokset" />';
     die();
      }
   }

   //Asetukset
   $faanestaneet = fopen("admin/aanestaneet.txt", "a"); // Tiedosto johon tallennetaan jo äänestäneiden koneiden IP-osoitteet
   $ftulokset = fopen("admin/tulokset.txt","w"); // Tiedosto johon tallennetaan äänien määrä ja kysymykset

   //Otetaan vastaus numero ja ip osoite talteen
   $vastaus = $_GET["vastaus"];
   $iposote = $_SERVER['REMOTE_ADDR'];

   //Tarkistetaan ettei huijata
   if ($vastaus > count($tulokset)) {
      echo '<img src="kuvaaja.php" alt="Kyselyn tulokset" />';
   }

   //Jaetaan tulokset tiedoston merkkijonot | merkin kohdalta
   for ($i=0; $i<count($tulokset); $i++) {
      $entry = explode("|", $tulokset[$vastaus]);
   }

   //Lisätään tuloksiin ääni
   $tulokset[$vastaus]=$entry[0]+1 . "|" . $entry[1] . "|\r\n";
   foreach ($tulokset as $rivi) {
      fwrite($ftulokset, "$rivi");
   }
   fclose($ftulokset);

   //Lisätään ip osoite ettei voi äänestään uudelleen ja näytetään kuvaaja
   fputs($faanestaneet,"" .$iposote."|");
   fputs($faanestaneet, "\r\n");
   fclose($faanestaneet);
   echo '<img src="kuvaaja.php" alt="Kyselyn tulokset" />';
}

?>

kuvaaja.php

<?php

//Asetukset
$otsikko="Kyselyn vastaukset"; // Kuvan otsikko
$tiedosto = file("admin/tulokset.txt"); // Tiedosto jossa on tulokset ja kysymykset
$yksikko="%"; //Yksikkö missä vastaus tulee
$z = 0;
$x = 0;

//Käydään kaikki äänet läpi
foreach ($tiedosto as $value) {
$tiedot = explode("|", $value);
$kaikkiaanet = $kaikkiaanet + $tiedot[0];
$x++;
}

//Jaetaan tiedoston merkkijonot | merkin kohdalta
foreach ($tiedosto as $value) {
$tiedot = explode("|", $value);

//Annetaan $arvo muuttujaan 1 desimaalin tarkkuudella oleva luku ja lukua vastaavan vastauksen merkkijono
$arvo[$z][0]=round($tiedot[0]/$kaikkiaanet*100, 1);
$arvo[$z][1]=$tiedot[1];
$z++;
}


//kuvan alustaminen
$leveys=254; //kuvan leveys
$korkeus=145+count($arvo)*(ImageFontHeight(2)+4); //kuvan korkeus
header ("Content-type: image/png");
$im = @ImageCreate ($leveys, $korkeus)
    or die ("GD-kirjaston käyttäminen ei onnistu!");
$valkoinen = ImageColorAllocate ($im, 255, 255, 255);
$musta=ImageColorAllocate ($im, 0, 0, 0);


//arvojen yhteismäärä ja värien määritys
for ($i=0;$i<count($arvo);$i++)
  {
  $yht=$yht+$arvo[$i][0];
  $arvo[$i][2]=ImageColorAllocate ($im, $i*60,($i+1)*60,($i+2)*60);
  }

//kehykset
ImageRectangle($im,36,131,218,133+count($arvo)*(ImageFontHeight(2)+4),$musta);

//otsikko
$opituus=ImageFontWidth(5)*strlen($otsikko);
$okohta=$leveys/2-$opituus/2;
ImageString($im,5,$okohta,5,$otsikko,$musta);

//kuvion piirtäminen
$vkulma=0;
for ($i=0;$i<count($arvo);$i++)
  {
  ImageFilledRectangle($im,39,136+$i*(ImageFontHeight(2)+4),46,145+$i*(ImageFontHeight(2)+4),$arvo[$i][2]);
  ImageString($im,2,49,135+$i*(ImageFontHeight(2)+4),$arvo[$i][1]." (".$arvo[$i][0].$yksikko.")",$musta);
  $kulma=($arvo[$i][0]/$yht)*360;
  ImageFilledArc($im,$leveys/2-1,75,90,90,$vkulma,$vkulma+$kulma,$arvo[$i][2],IMG_ARC_PIE);
  $vkulma=$kulma+$vkulma;
  }
ImageArc($im,126,75,90,90,0,360,$musta);

//kuva PNG-muotoon
ImagePNG ($im);
?>

tulokset.txt

64|Hieno ulkoasu|
63|Menettelevä ulkoasu|
22|Vanha oli hienonpi|
25|Mätä ku rusina|

aanestaneet.txt

52.527.235.257|
42.62.213.146|
192.168.0.254|

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta