Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Poll tiedostolla (ilman tietokantaa)

punppis [17.12.2006 04:32:54]

#

Tälläinen gallup/poll ilman tietokantaa. Käyttää hyväkseen ihan tekstitiedostoa. Tekee vastauksen yhteydessä cookien, joka estää uudelleenvastaamisen, ei ole varmasti vaikea lisätä ip-osoitteen perusteella vastanneita. Demoa osoitteessa http://koti.mbnet.fi/punppis/koulusivut/poll.php

Muistakaa laittaa uusigallup.php:n salasanatarkistukseen oma hash.

Olen vielä aloittelija php:n parissa, joten kritiikkiä vastaanotetaan.

poll.php

<?php
if(file_exists('kys.txt')) {
  $tiedosto = file('kys.txt');
  $id = $tiedosto[0];
  if($_COOKIE['vastannut'] == $id) {
    include('vastaukset.php');
  }
  else {
    include('vastauslomake.php');
  }
  echo "<br />";
}
else {
  echo "\nKysymystiedostoa ei löytynyt!<br>\n";
}
echo "\n<a href=\"uusigallup.php\">Tee uusi gallup!</a>";
?>

gallupintekija.php

<?php
if(isset($_GET['teegallup'])) {
  $id = time();
  $fo = fopen("kys.txt", "w");
  fwrite($fo, $id . "\n");
  for($x=0;$x <= $_GET['vaihtoehtomaara']; $x++) {
    fwrite($fo, $_GET[$x] . "|0|\n");
  }
  fclose($fo);
}
else {
  echo "ERROR!";
}
chmod('kys.txt', 0777);
header('location: poll.php');
?>

kasittelija.php

<?php
$tiedosto = file('kys.txt');
$id = $tiedosto[0];
if($_COOKIE['vastannut'] == $id) {
  echo "Olet vastannut jo!<br>\n";
  echo "<a href=\"poll.php\">Takaisin</a>";
}
else {
  $maara = count($tiedosto);

  $valinta = $_GET['valinta'];

  $fp = fopen('kys.txt', 'w');
  fwrite($fp, "$id");
  for($x=1; $x < $maara; $x++) {
      $osa = explode("|", $tiedosto[$x]);
      $vaihtoehto = $osa[0];
      $vastaus = $osa[1];

      if($x == $valinta || $x == 1) {
          $vastaus++;
      }
        fwrite($fp, "$vaihtoehto|$vastaus|\n");
  }
  setcookie("vastannut", $id, time()+640800);
  fclose($fp);
  header("location: poll.php");
}
?>

uusigallup.php

<?php
echo "\n<form action=\"uusigallup.php\" method=\"get\">";
echo "\n<table>";
echo "\n<tr><td>Salasana</td><td><input type=\"password\" name=\"passu\" /></td></tr>";
echo "\n<tr><td>Vaihtoehtojen lukumäärä</td><td> <input type=\"text\" name=\"vaihtoehtomaara\" /></tr>";
echo "\n<tr><td><input type=\"submit\" value=\"Seuraava vaihe!\" name=\"kakkosvaihe\" /></td></tr>";
echo "\n</table>";
echo "\n</form>";
if(isset($_GET['kakkosvaihe'])) {
  if(md5($_GET['passu']) == "**HASH TÄHÄN**") {
    echo "\n<form action=\"gallupintekija.php\" method=\"get\">\n";
    echo "\n<table>\n";
    echo "\n<tr><td>Aihe: </td><td><input type=\"text\" name=\"0\" /></td></tr>\n";
    for($x=1;$x <= $_GET['vaihtoehtomaara']; $x++) {
      echo "\n<tr><td>Vaihtoehto $x: </td><td><input type=\"text\" name=\"$x\" /></td></tr>\n";
    }
    echo "\n<tr><td><input type=\"submit\" name=\"teegallup\" value=\"Tee gallup!\" /></td></tr>\n";
    echo "\n<input type=\"hidden\" name=\"vaihtoehtomaara\" value=\"" . $_GET['vaihtoehtomaara'] . "\" />";
    echo "\n</table>\n";
    echo "\n</form>\n";
  }
  else {
    echo "\nSalasana ei kelpaa!<br>\n";
  }
}
?>

vastaukset.php

<?php
$tiedosto = file('kys.txt');
$maara = count($tiedosto);

$otsikko = explode("|", $tiedosto[1]);
echo "\n<h3>Poll</h3>";
echo "\n<h3>".$otsikko[0]."</h3>";

print("\n<table>");
for($x=2; $x < $maara; $x++) {
  $osa = explode("|", $tiedosto[$x]);
  $vaihtoehto = $osa[0];
  $vastaus = $osa[1];
  $prosentti = round(($vastaus / $otsikko[1]) * 100, 2);
  echo "\n<tr><td>$vaihtoehto</td>
    <td><img src=\"bar.php?pituus=" . $prosentti*2 . "\"></td>
    <td>$vastaus</td><td>$prosentti%</td>
    </tr>";
}
echo "\n<tr><td colspan=\"2\">Vastauksia yhteensä: " . $otsikko[1] . "<td></tr>";
echo "\n</table>";
?>

vastauslomake.php

<html>
<head><title>Poll:. Vastauslomake</title></head>
<body>
<?php

$tiedosto = file('kys.txt');
$maara = count($tiedosto);

$otsikko = explode("|", $tiedosto[1]);

echo "\n<form action=\"kasittelija.php\" method=\"get\">";
echo "\n<table>";
echo "\n<tr><td>" . $otsikko[0] . "</td></tr>";
for($x=2; $x < $maara; $x++) {
  $osa = explode("|", $tiedosto[$x]);
  $vaihtoehto = $osa[0];
  echo "\n<tr><td>$vaihtoehto</td>
         <td><input type=\"radio\" name=\"valinta\" value=\"$x\"></td></tr>";
}
echo "\n<tr><td><input type=\"submit\" value=\"Vastaa!\" name=\"vastausnappula\"></td></tr></table></form>";
?>
</body>
</html>

bar.php

<?php
header('content-type: image/png');
$pituus = $_GET['pituus'];
$korkeus = 9;
if(!isset($pituus) || $pituus < 2) {
  $pituus = 2;
}
$kuva = imagecreate($pituus,$korkeus);
$valkonen=imagecolorallocate($kuva,250, 250, 250);
$vari=imagecolorallocate($kuva,0,0,0);
imageline($kuva,0,0,0,$korkeus,$vari);
imageline($kuva,$pituus-1,0,$pituus-1,$korkeus-1,$vari);
imageline($kuva, 0, $korkeus-1, $pituus, $korkeus-1, $vari);
imageline($kuva, 0, 0, $pituus, 0, $vari);
imagepng($kuva);
imagedestroy($kuva);
?>

Vastaus

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

Tietoa sivustosta