Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyniki głosowania nie chcą zapisywać się do plików
Forum PHP.pl > Forum > PHP
eremen
Witam,

oto kod:
  1. <?php
  2. //SPRAWDZANIE CZY PLIK ISTNIEJE
  3. $plik = "kody.txt";
  4.  
  5. if (!file_exists($plik)) {
  6.  
  7. for ($s = 0; $s < 11; $s++){
  8. srand((double)microtime()*1000000);
  9. $kod=md5(uniqid(rand()));
  10.  
  11. if (strlen($kod)>=5) {
  12. $txt = substr($kod,0,5);
  13. }
  14. else{
  15. $txt = $kod;
  16. }
  17. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  18. }
  19.  
  20. file_put_contents("kody.txt", serialize($kody));
  21. }
  22. else{
  23. $kody = unserialize(file_get_contents('kody.txt'));
  24. }
  25. //---------------------------------------------------------------------
  26.  
  27.  
  28. if (isset($_POST['haslo']) && $_POST['glosuj']) {
  29.  
  30. if (in_array($_POST['haslo'], $kody)){
  31.  
  32. //ZAPISYWANIE WYNIKOW DO PLIKOW
  33. for($i = 1; $i < 10; $i++){
  34. $name = 'auto'.$i;
  35.  
  36. if ($_POST[$name] != ''){
  37. $filename = $_POST[$name].'.txt';
  38. $votes = 1;
  39.  
  40. if(file_exists($filename)){
  41. $votes = file_get_contents($filename);
  42. $votes++;
  43. }
  44.  
  45. file_put_contents($filename, $votes);
  46. }
  47. }
  48. $message = "dziękujemy za oddanie głosu";
  49. }
  50. else {
  51. $message = "wpisałeś niepoprawne hasło";
  52. }
  53. }
  54. //------------------------------------------------------------------
  55.  
  56. /*POKAZUJE SONDE*/
  57. echo '<p><map glosuj="glosuj">
  58. <form action="" method="post">
  59. <table align="center" style="text-align:center;">
  60. <tr>
  61. <td>1.<img src="./zdjecia/auto1.jpg" alt="" /></td>
  62. <td>2.<img src="./zdjecia/auto2.jpg" alt="" /></td>
  63. <td>3.<img src="./zdjecia/auto3.jpg" alt="" /></td>
  64. <td>4.<img src="./zdjecia/auto4.jpg" alt="" /></td>
  65. <td>5.<img src="./zdjecia/auto5.jpg" alt="" /></td>
  66. </tr>
  67. <tr>
  68. <td>6.<img src="./zdjecia/auto6.jpg" alt="" /></td>
  69. <td>7.<img src="./zdjecia/auto7.jpg" alt="" /></td>
  70. <td>8.<img src="./zdjecia/auto8.jpg" alt="" /></td>
  71. <td>9.<img src="./zdjecia/auto9.jpg" alt="" /></td>
  72. <td>10.<img src="./zdjecia/auto10.jpg" alt="" /></td>
  73. </tr>
  74. </table>
  75.  
  76. <div>
  77. <input type="radio" name="auto" value="auto1" checked="checked"/> nr 1.
  78. <input type="radio" name="auto" value="auto2" /> nr 2.
  79. <input type="radio" name="auto" value="auto3" /> nr 3.
  80. <input type="radio" name="auto" value="auto4" /> nr 4.
  81. <input type="radio" name="auto" value="auto5" /> nr 5.
  82. <input type="radio" name="auto" value="auto6" /> nr 6.
  83. <input type="radio" name="auto" value="auto7" /> nr 7.
  84. <input type="radio" name="auto" value="auto8" /> nr 8.
  85. <input type="radio" name="auto" value="auto9" /> nr 9.
  86. <input type="radio" name="auto" value="auto10" /> nr 10.
  87. </div>
  88.  
  89. <div><br/> <input type="text" name="haslo"/><input type="submit" name="glosuj" value="głosuj" /><br/>';echo $message;'</form></map></p>';
  90. ?>

jak pisałem w tytule, podczas głosowania na serwerze nie tworzą się pliki odpowiedzialne za 'zbieranie' głosów. Gdy tworze te pliki ręcznie również wyniki się do nich nie zapisują.

Być może warto nadmienić, że plik kody.txt, tworzący się za pierwszym razem przy załadowaniu strony, pojawia się dopiero gdy odświeżę serwer.

CHMOD katalogu i plików w nim to 777, dla pliku kody.txt, po utworzeniu automatycznym, to 644.
crocodillo
Rozumiem, że nie wyskakuje żaden błąd, pliki po prostu się nie zapisują. Sprawdź po kolei instrukcje warunkowe, tam raczej będzie coś nie tak. Odnośnie pliku kody.txt to nie wiem co oznacza odświeżanie serwera, chodzi o odświeżanie strony?
eremen
nie, chodzi o to, że np. w Total Commanderze mam uruchomiony serwer FTP i jak otworzę stronę www z sondą nie widzę żeby pojawił się w TC plik kody.txt, dopiero jak odświeżę serwer... chociaż może to jest normalne, ale myślę że powinien pojawiać się od razu
crocodillo
Nie używam total commandera, ale raczej trzeba chyba w każdym kliencie ftp odświeżyć, żeby zobaczyć zmiany.

Jeszcze jedno: nie musisz sprawdzać $kod ma więcej niż 4 znaki, bo md5() zwraca ciąg składający się z 32 znaków
eremen
Cytat(crocodillo @ 23.02.2012, 20:57:30 ) *
Jeszcze jedno: nie musisz sprawdzać $kod ma więcej niż 4 znaki, bo md5() zwraca ciąg składający się z 32 znaków

a no racja smile.gif

ale nie wiem w czym tkwi błąd w tym zapisywaniu plików...
crocodillo
Po załadowaniu kodów daj:

  1. var_dump($_POST);
  2. var_dump($kody);
eremen
  1. //SPRAWDZANIE CZY PLIK ISTNIEJE
  2. $plik = "kody.txt";
  3.  
  4. if (!file_exists($plik)) {
  5.  
  6. for ($s = 0; $s <= 10; $s++){
  7. srand((double)microtime()*1000000);
  8. $kod=md5(uniqid(rand()));
  9.  
  10. $txt = substr($kod,0,5); //okrajamy kod do 5 znaków
  11.  
  12. $kody[] = $txt; // tutaj zapisujemy okrojony kod do tablicy
  13. }
  14.  
  15. file_put_contents("kody.txt", serialize($kody));
  16. }
  17. else{
  18. $kody = unserialize(file_get_contents('kody.txt'));
  19. }
  20. //---------------------------------------------------------------------
  21.  
  22.  
  23.  
  24. var_dump($_POST);
  25. var_dump($kody);
  26.  
  27.  
  28.  
  29. if (isset($_POST['haslo']) && $_POST['glosuj']) {
  30.  
  31. if (in_array($_POST['haslo'], $kody)){
  32.  
  33. //ZAPISYWANIE WYNIKOW DO PLIKOW


wkleiłem tak i wyskakuje zamiast ankiety coś takiego

wybierz auto: array(3) { ["auto"]=> string(5) "auto1" ["haslo"]=> string(5) "1446a" ["glosuj"]=> string(7) "głosuj" } array(11) { [0]=> string(5) "412c5" [1]=> string(5) "460f3" [2]=> string(5) "7784b" [3]=> string(5) "86620" [4]=> string(5) "d5374" [5]=> string(5) "d1bf6" [6]=> string(5) "2ffdb" [7]=> string(5) "1efdf" [8]=> string(5) "8bb02" [9]=> string(5) "ad889" [10]=> string(5) "af04f" }


a za drugim razem tak

array(0) { } array(11) { [0]=> string(5) "412c5" [1]=> string(5) "460f3" [2]=> string(5) "7784b" [3]=> string(5) "86620" [4]=> string(5) "d5374" [5]=> string(5) "d1bf6" [6]=> string(5) "2ffdb" [7]=> string(5) "1efdf" [8]=> string(5) "8bb02" [9]=> string(5) "ad889" [10]=> string(5) "af04f" }
crocodillo
Nie przechodzi Ci przez ten warunek:
  1. if (in_array($_POST['haslo'], $kody)){


Hasła nie ma w tablicy $kody

Te 3 linijki co Ci prędzej podałem możesz skasować, to było tylko po to żebyś porównał sobie dane i zobaczył gdzie jest coś nie tak
eremen
ale przecież zapisują się wcześniej tu
  1. file_put_contents("kody.txt", serialize($kody));


Cytat(crocodillo @ 23.02.2012, 21:40:11 ) *
  1. if (in_array($_POST['haslo'], $kody)){

no i muszą przechodzić przez ten warunek bo inaczej nie wyświetlał by się napis 'dziękujemy za oddanie głosu'
crocodillo
Już widzę co masz źle:

zamiast tego:

  1. //ZAPISYWANIE WYNIKOW DO PLIKOW
  2. for($i = 1; $i < 10; $i++){
  3. $name = 'auto'.$i;
  4.  
  5. if ($_POST[$name] != ''){
  6. $filename = $_POST[$name].'.txt';
  7. $votes = 1;
  8.  
  9. if(file_exists($filename)){
  10. $votes = file_get_contents($filename);
  11. $votes++;
  12. }
  13.  
  14. file_put_contents($filename, $votes);
  15. }
  16. }
  17.  

powinno być:

  1. $filename=$_POST['auto'].'.txt';
  2. $votes=1;
  3. if(file_exists($filename)){
  4. $votes = file_get_contents($filename);
  5. $votes++;
  6. }
  7.  
  8. file_put_contents($filename, $votes);
eremen
dziękuję smile.gif pomogłeś mi smile.gif

tworzy się ładnie plik tylko szkoda że za pierwszym głosowaniem plik jest pusty, a powinien mieć wartość 1 tak na logikę ;]

ale już sobie z tym poradziłem wink.gif
crocodillo
Wiem, zapomniałem dopisać $votes=1. Zerknij na post wyżej już poprawione
eremen
hehe sam poprawiłem to akurat było łatwe ;D
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.