Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z sondą
Forum PHP.pl > Forum > Przedszkole
zbig13
Mam taki kod:
  1. <?php
  2. $glosowanie = array ('1' => 'Cienka', 'Taka sobie', 'Niezła', 'Fajna', 'Super');
  3. function glosowanie($odp, $glosowanie) {
  4.     if (file_exists(&#092;"wyniki.txt\")) {
  5.         $plik = fopen(&#092;"wyniki.txt\", \"r+\");
  6.         flock($plik, 2);
  7.         $wiersz = fgets($plik, 255);
  8.         $wyniki = explode (&#092;"|\", $wiersz);
  9.         fseek ($plik, 0);
  10.     } else {
  11.         $plik = fopen (&#092;"wyniki.txt\", \"w+\");
  12.         flock ($plik, 2);
  13.     }
  14.     
  15.     for ($i=0; $i<count($glosowanie); $i++) {
  16.         if ($odp == $i+1) { $wyniki[$i]++; }
  17.         fputs($plik, $wyniki[$i]);
  18.         if ($i<count($glosowanie)-1) {fputs($plik, '|');}
  19.     }
  20.     flock ($plik, 3);
  21.     fclose($plik);
  22. }
  23.  
  24. if (isset($_POST['wyslij'])) {
  25.     glosowanie($_POST['odpowiedz'], $glosowanie);
  26. }
  27.  
  28.  
  29.  
  30. ?>
  31. <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
  32.         \"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd\">
  33. <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\" lang=\"pl\">
  34. <head>
  35.     <meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-2\" />
  36.     <title>Tytuł strony</title>
  37. </head>
  38. <body>
  39. <form action=\"<?php $_SERVER['PHP_SELF']; ?>\" method=\"post\">
  40. <input type=\"radio\" name=\"odpowiedz\" value=\"1\" /> Cienka<br />
  41. <input type=\"radio\" name=\"odpowiedz\" value=\"2\" /> Taka sobie<br />
  42. <input type=\"radio\" name=\"odpowiedz\" value=\"3\" /> Niezła<br />
  43. <input type=\"radio\" name=\"odpowiedz\" value=\"4\" /> Fajna<br />
  44. <input type=\"radio\" name=\"odpowiedz\" value=\"5\" /> Super<br />
  45. <input type=\"submit\" name=\"wyslij\" value=\"Glosuj!\" />
  46. </form>
  47. </body>
  48. </html>

Ten skrypt jest odpowiedzialny za aktualizację wyników sondy. Dane przechowywane są w pliku wyniki.txt w formacie: 0|0|0|0|0. Problem w tym, że aktualizowane są wszystkie wyniki oprócz ostatniego. To znaczy, że jeśli na każdą możliwość ktoś oddał głos to wyniki będą wyglądały mniej więcej tak: 11|23|42|98|0 Ten ostatni wynik nie chce się aktualizować! Co jest nie tak?
hesus
W podanym przez Ciebie przykładzie 0 jest wartością szóstą z kolei. Jeśli plik istnieje po prostu zapisujesz do niego, więc - jeśli poprzedni ciąg znaków był dłuższy, od obecnie wprowadzanego - pozostaną na końcu śmieci choćby w postaci takiego zera. Najpewniej byłoby usuwać plik i tworzyć od nowa czyli niezależnie od tego, czy plik istnieje, czy nie używać trybu w+
zbig13
Pomyliłem się przy przepisywaniu i dlatego podałem 6 wartości. Teraz już poprawiłem, ale problem nadal nie jest rozwiązany sad.gif
hesus
Mimo wszystko spróbuj tak:
  1. <?php
  2.  
  3. $plik = fopen (&#092;"wyniki.txt\", \"w+\");
  4. flock ($plik, 2);
  5. if (file_exists(&#092;"wyniki.txt\")) {
  6. $wiersz = fgets($plik, 255);
  7. $wyniki = explode (&#092;"|\", $wiersz);
  8. fseek ($plik, 0);
  9. }
  10.  
  11. ?>
Wave
U mnie wszystko działa. :/
Guest
To że u Wave'a wszystko działa potwierdza moją teorię. Według mnie chodzi o to że zbig13 ma w swoim pliku jakieś śmiecie i musi go usunąć. Po tym powinno działać.
Fragment kodu, który wpisałem wyżej jest oczywiście niepoprawny - tak jest, jak człek siedzi przed monitorem przez 10 godzin.
zbig13
To w koncu jakie "śmiecie" mam wywalić. Przecież w pliku jest tylko 0|0|0|0|0 a tego chyba nie wyrzuce?
edit: hesus zrobiłem tak jak mi napisałeś i teraz w pliku z wynikami jest: ||1|| tongue.gif
hwao
Bardzo stara sonda na plikach ale dziala mozesz podpatrzec ;-)
http://amnesty.scene.pl/~szacool/hwao/php/sonda.zip
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.