Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Sonda - nie liczy głosów
Forum PHP.pl > Forum > PHP
jj09
Witam mam skrypt sondy w 2 plikach:

No i problem jest następujący: nie zapisuje mi do pliku wyniku głosowania...prawdopodobnie przyczyna tkwi w błędzie przy przesyłaniu wyboru głosowania, bo chciałem przerobić głosowanie poprzez naciśnięcie linku:
  1. <?php
  2. echo "<br />$wynik <a href=\"index.php?o=$i\">$odp[$i]</a>";
  3. ?>


do głosowania poprzez formularz z inputami:
  1. <form action="sonda/glosuj.php" onsubmit="java script:window.open('sonda/wyniki.php', 'Sonda', 'toolbar=no,scrollbars=yes,directories=no,status=no,menubar=no,resizable=no,width
  2. 600,height=500'); return false;" method="post">
  3. <?php
  4. echo $pyt;
  5. for ($i=0;$i<$ile;$i++)
  6. {
  7.  preg_match_all("/<$i>/i", $plik, $li);
  8.  echo "<br /><input type='radio' name='glos' value=$i>".$odp[$i];
  9. }
  10. ?>
  11. <input type="submit" value="Zagłosuj" />
  12. </form>


całe plki:

glosuj.php
  1. <?
  2. $pyt = "Czy kupiłeś już DSJ3?";
  3. $odp[] = "Tak";
  4. $odp[] = "Nie, ale zamierzam";
  5. $odp[] = "Nie, mam pirata";
  6. $glosowan = 100;
  7. $pl = "sonda/ip.txt";
  8. $ip = $_SERVER["REMOTE_ADDR"];
  9. $o = $_GET["o"];
  10.  
  11. $ile = count($odp);
  12. $f = fopen($pl, "r");
  13. $plik = fread($f, filesize($pl));
  14. fclose($f);
  15.  
  16. preg_match_all("/$ip/i", $plik, $glos);
  17. if (($o>-1)and($o<$ile)and(count($glos[0])<$glosowan)) {
  18.  $f = fopen($pl,"a");
  19.  fputs($f, "<$o>$ip"); fclose($f);
  20.  $plik .= "<$o>";
  21. }
  22. ?>
  23. <form action="sonda/glosuj.php" onsubmit="java script:window.open('sonda/wyniki.php', 'Sonda', 'toolbar=no,scrollbars=yes,directories=no,status=no,menubar=no,resizable=no,width
  24. 600,height=500'); return false;" method="post">
  25. <?php
  26. echo $pyt;
  27. for ($i=0;$i<$ile;$i++)
  28. {
  29.  preg_match_all("/<$i>/i", $plik, $li);
  30.  echo "<br /><input type='radio' name='glos' value=$i>".$odp[$i];
  31. }
  32. ?>
  33. <input type="submit" value="Zagłosuj" />
  34. </form>


wyniki.php
  1. <?php
  2. $pyt = "Czy kupiłeś już DSJ3?";
  3. $odp[] = "Tak";
  4. $odp[] = "Nie, ale zamierzam";
  5. $odp[] = "Nie, mam pirata";
  6. $glosowan = 100;
  7. $pl = "ip.txt";
  8. $ip = $_SERVER["REMOTE_ADDR"];
  9. $o = $_GET["o"];
  10.  
  11. $ile = count($odp);
  12. $f = fopen($pl, "r");
  13. $plik = fread($f, filesize($pl));
  14. fclose($f);
  15.  
  16. $suma=0;
  17. for ($i=0;$i<$ile;$i++)
  18. {
  19.  preg_match_all("/<$i>/i", $plik, $li);
  20.  $wynik = "[". count($li[0]) ."]";
  21.  $suma+=$wynik;
  22. }
  23. echo $pyt;
  24. echo "<table>";
  25. for ($i=0;$i<$ile;$i++)
  26. {
  27.  preg_match_all("/<$i>/i", $plik, $li);
  28.  $wynik = "[". count($li[0]) ."]";
  29.  echo "<tr><td>$odp[$i]</td><td>$wynik</td></tr>";
  30. }
  31. echo "</table>";
  32. ?>
  33.  
  34. <!--<img src='pasek.gif' width=100*$wynik/$suma>$wynik />-->


zaincludowany w index.php:
  1. <?php
  2.  include("sonda/glosuj.php");
  3. ?>
M4T3U5Z
wydaje mi się ze jak pracujesz na jednym pliku i załóżmy hipotetyczną sytuację ze kilku userów na raz zagłosuje to plik ci się "ip.txt" rozjedzie i cała sonda pójdzie się kochać...
czy nie będzie miliard razy łatwiej to zrobić przy pomocy bazy sqlowej?

np (gotowiec):

tworzymy bazę:
  1. CREATE TABLE `nazwa_bazy`.`sonda` (
  2. `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `glos` INT( 10 ) NOT NULL
  4. )



następnie sonda:
  1. <?
  2. $user = 'wpisz';
  3. $pass = 'wpisz';
  4. $baza = 'nazwa_bazy';
  5.  
  6. $sql_con = mysql_connect('localhost', $user, $pass);
  7.  
  8. $pyt = "Czy kupiłeś już DSJ3?";
  9. $odp[] = "Tak";
  10. $odp[] = "Nie, ale zamierzam";
  11. $odp[] = "Nie, mam pirata";
  12. $ile = count($odp);
  13.  
  14. if(!isset($_POST['spr'])) {
  15. echo '<p>' . $pyt . '</p><form action="?" method="post">';
  16.  
  17. for ($i=0;$i<$ile;$i++)
  18. echo '<input type="radio" name="glos" value="' . $i . '"/>' . $odp[$i] . '<br/>';
  19.  
  20. echo '<input type="hidden" name="spr" value="1" /><input type="submit" value="Zagłosuj" /></form>';
  21. }
  22. else {    
  23.    mysql_query("INSERT INTO `$baza`.`sonda` ( `id` , `glos` ) VALUES ( NULL , '{$_POST['glos']}' );");
  24.    echo '<p>dziękuje za oddanie głosu<p>';    
  25. }
  26.  
  27. echo '<hr><p>aktualne wyniki</p><p>' . $pyt . '</p><table border="1" width="200" cellpadding="2" style="border-collapse: collapse">';
  28.  
  29.    for ($i=0;$i<$ile;$i++)
  30.    echo '<tr><td>' . $odp[$i] . '</td><td>' . mysql_num_rows(mysql_query("SELECT * FROM `sonda` WHERE `glos` =$i")) . '</td></tr>';
  31.    
  32. echo '</table>';
  33. ?>



jeśli chcesz zobaczyć jak działa to tu masz podgląd
pinochet
1. zmien metodę w formularzu na GET lub zmienne w php na POST :]
2. dodaj blokady plikow bo moze sie stac tak jak mówi M4T3U5Z
flock($f, LOCK_EX) i LOCK_UN
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.