Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: błędne liczenie w ankiecie
Forum PHP.pl > Forum > PHP
ZenekPOL
Witam, php się dopiero uczę. Dziś postanowiłem sobie napisać taką mini "ankiete" od zera.
3 pliki:
1. html ( do wyswietlenia ankiety )
2. php
3. .txt ( zapis wyników )

  1. <!DOCTYPE HTML>
  2. <html lang="pl">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <title>Ankieta</title>
  5. </head>
  6.  
  7. <h1>Czy pójdziesz na wybory?</h1>
  8.  
  9. <form action="glosowanie.php" method="post">
  10.  
  11. <input type="radio" value="tak" name="vote" />Tak <br />
  12. <input type="radio" value="nie" name="vote" />Nie<br />
  13. <input type="radio" value="niewiem" name="vote" />Nie interesuje się polityką<br />
  14.  
  15. <input type="submit" value="Głosuj" name="vote1" />
  16.  
  17. </form>
  18.  
  19.  
  20. </body>
  21. </html>


  1. <?php
  2.  
  3.  
  4. $file = "wyniki.txt";
  5.  
  6. function vote()
  7. {
  8. global $file;
  9. $fo = fopen("wyniki.txt", "r+");
  10. $fr = fgets($fo);
  11. $odp = "";
  12.  
  13. if(!isset($_POST['vote']))
  14. {
  15. echo "Nie oddałeś głosu!";
  16. }
  17. else
  18. {
  19. $odp = $_POST['vote'];
  20. }
  21.  
  22. if(!file_exists($file)) echo "Brakuje pliku z wynikami!";
  23. $tak = (int)($fr);
  24. $nie = (int)($fr);
  25. $niewiem = (int)($fr);
  26.  
  27.  
  28.  
  29. switch($odp)
  30. {
  31. case "tak" : $tak++; break;
  32. case "nie" : $nie++; break;
  33. case "niewiem" : $niewiem++; break;
  34. }
  35.  
  36. fseek($fo, 0);
  37. fputs($fo,$tak."\n");
  38. fputs($fo,$nie."\n");
  39. fputs($fo,$niewiem."\n");
  40.  
  41. fclose($fo);
  42.  
  43. return true;
  44. }
  45.  
  46. if(isset($_POST['vote1']))
  47. {
  48. vote();
  49.  
  50. }
  51.  
  52.  
  53. ?>


i plik wyniki.txt powinien zapisywac wyniki w postaci :
0
0
0


Główny problem polega na tym że inkrementacja nie działa jak należy, jeśli wybierzemy jedną opcję to i tak inkrementacja nastąpi we wszystkich zmiennych $tak, $nie, $niewiem.

w.g mojego kodu poiwnno działać jak należy, przynajmniej tak to rozumuje w głowie a jednak jest inaczej biggrin.gif

taka pierdoła ale chce wiedzieć co jest nie tak.
nospor
$tak = (int)($fr);
$nie = (int)($fr);
$niewiem = (int)($fr);

Czemu uwazasz, ze kazda ze zmiennych otrzyma inna wartosc??
ZenekPOL
juz sobie poradziłem smile.gif

wrzucę napisany działający kod aczkolwiek nie idealny biggrin.gif

"ankieta + wyniki":

  1. <?php
  2.  
  3. $file = "wyniki.txt";
  4.  
  5. function vote()
  6. {
  7.  
  8. global $file;
  9.  
  10. if(!isset($_POST['vote'])) echo "Nie oddałeś głosu!";
  11. else echo "Dziękujemy za oddany głos <br /><br />";
  12.  
  13. if(file_exists($file))
  14. {
  15. if(!($fo = fopen($file, "r+"))) echo "Błąd nr.1";
  16. }
  17. else{
  18. if(!($fo = fopen($file, "w+"))) echo "Błąd nr.2";
  19. }
  20.  
  21.  
  22. $odp = isset($_POST['vote']);
  23.  
  24.  
  25. $tak = (int)(fgets($fo));
  26. $nie = (int)(fgets($fo));
  27. $niewiem = (int)(fgets($fo));
  28.  
  29. switch($odp)
  30. {
  31. case "tak" : $tak++; break;
  32. case "nie" : $nie++; break;
  33. case "niewiem" : $niewiem++; break;
  34. }
  35.  
  36. flock($fo, LOCK_EX);
  37. fseek($fo, 0);
  38. fputs($fo, $tak."\n");
  39. fputs($fo, $nie."\n");
  40. fputs($fo, $niewiem."\n");
  41. flock($fo, LOCK_UN);
  42. fclose($fo);
  43.  
  44. }
  45.  
  46. function show()
  47. {
  48. global $file;
  49.  
  50. if(file_exists($file))
  51. {
  52. if(!($fo = fopen($file, "r"))) echo "Bład nr 1";
  53. }
  54. else
  55. {
  56. if(!($fo = fopen($file, "w+"))) echo "Błąd nr 2";
  57. }
  58.  
  59. $tak = (int)(fgets($fo));
  60. $nie = (int)(fgets($fo));
  61. $niewiem = (int)(fgets($fo));
  62.  
  63. $votes = $tak + $nie + $niewiem;
  64. $votes == 0 ? $votes = 1 : 0;
  65.  
  66. $tak_proc = sprintf("%.2f", $tak * 100 / $votes);
  67. $nie_proc = sprintf("%.2f", $nie * 100 / $votes);
  68. $niewiem_proc = sprintf("%.2f", $niewiem * 100 / $votes);
  69.  
  70.  
  71. echo "Tak : ".$tak." ($tak_proc %)<br />";
  72. echo "Nie : ".$nie." ($nie_proc %)<br />";
  73. echo "Niewiem : ".$niewiem." ($niewiem_proc %)<br />";
  74.  
  75. }
  76.  
  77. if(isset($_POST['show'])) show();
  78. else if($_POST['vote1'])
  79. {
  80. if(isset($_POST['vote'])){ vote(); show(); }
  81. else {vote();}
  82. }
  83.  
  84.  
  85. ?>


  1. <!DOCTYPE HTML>
  2. <html lang="pl">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <title>Ankieta</title>
  5. </head>
  6.  
  7. <h1>Czy pójdziesz na wybory?</h1>
  8.  
  9. <form action="glosowanie.php" method="post">
  10.  
  11. <input type="radio" value="tak" name="vote" />Tak <br />
  12. <input type="radio" value="nie" name="vote" />Nie<br />
  13. <input type="radio" value="niewiem" name="vote" />Nie interesuje się polityką<br />
  14.  
  15. <input type="submit" value="Głosuj" name="vote1"><br />
  16. <input type="submit" value="Pokaz Wyniki" name="show">
  17.  
  18. </form>
  19.  
  20.  
  21. </body>
  22. </html>



można się do czegos przyczepić w tym kodzie? za niedługo się będę uczył obiektowego. Pewnie tam by to ładniej wszystko wyglądało.



To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.