Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Błąd w kodzie, problem z sesjami
Forum PHP.pl > Forum > Przedszkole
ebate
Mam kod, który pobiera 2 losowe dane z bazy MySQL (zdjęcia). Po kliknięciu na jedno z nich kliknięte dodaje 1 punkt do bazy w polu wygrana, zaś niekliknięte zdjęcie dostaje 1 punkt do bazy w polu przegrana. po tym wszystkim losują się dwa kolejne zdjęcia i tak w kółko.

Problemem jest to, że jeśli kliknę na któreś zdjęcie (doda punkty jak wspomniałem powyżej) i wylosują się 2 następne zdjęcie, to po ręcznym odświeżeniu strony kliknięte wcześniej zdjęcie dostaje kolejny punkt a niekliknięte również dostaje punkt (powtarza sie dodawanie punktów)

Czy da sie zrobic, aby nic nie dodawało przy odświeżaniu tylko po prostu losowało 2 kolejne zdjęcia?

Oto kod:
  1. <?php
  2.  
  3.  
  4. require('conn.php');
  5.  
  6. $wykonaj=mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1")or die(mysql_error());
  7.  
  8. $wiersz = mysql_fetch_array($wykonaj);
  9.  
  10.  
  11.  
  12. $wykonaj1=mysql_query("SELECT * FROM user WHERE plec='meżczyzna' ORDER BY rand() limit 1")or die(mysql_error());
  13.  
  14. $wiersz1 = mysql_fetch_array($wykonaj1);
  15.  
  16.  
  17.  
  18. echo '<a href=glosowaniem.php?pierwszy=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  19.  
  20. echo '<a href=glosowaniem.php?drugi=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';
  21.  
  22. if(isset($_GET['pierwszy']))
  23.  
  24. {
  25.  
  26. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$_GET['wyg']."'")or die(mysql_error());
  27.  
  28. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$_GET['prze']."'")or die(mysql_error());
  29.  
  30. }
  31.  
  32. if(isset($_GET['drugi']))
  33.  
  34. {
  35.  
  36. mysql_query("UPDATE user SET wygrana=wygrana+1 WHERE sciezka='".$_GET['prze']."'") or die(mysql_error());
  37.  
  38. mysql_query("UPDATE user SET przegrana=przegrana+1 WHERE sciezka='".$_GET['wyg']."'")or die(mysql_error());
  39.  
  40. }
  41.  
  42.  
  43. ?>


Odświeżam. Nie ma nikt na to pomysłu?
Sephirus
Powiem tak - ogólnie podejście masz średnie do tematu tongue.gif ale da się to naprawić bez zmieniania twojego kodu za mocno.

Co musisz zrobić? proste -

Na początku pliku po includowaniu conn.php wylosuj randomową zmienną do sesji przypisując starą jeżeli istnieje:

  1. require('conn.php');
  2.  
  3. $oldR = isset($_SESSION['zmienna_do_zdjec']) ? $_SESSION['zmienna_do_zdjec'] : '';
  4. $_SESSION['zmienna_do_zdjec'] = time() + mt_rand(1000000,9999999);
  5.  
  6. (...)
  7.  


Teraz tam gdzie masz generowanie linków dodaj nową zmienną do getów:

  1. echo '<a href=glosowaniem.php?pierwszy=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'&r='.$_SESSION['zmienna_do_zdjec'].'><img height="200" width="175" src="'.$wiersz['sciezka'].'"/></a>';
  2.  
  3. echo '<a href=glosowaniem.php?drugi=1&wyg='.$wiersz['sciezka'].'&prze='.$wiersz1['sciezka'].'&r='.$_SESSION['zmienna_do_zdjec'].'><img height="200" width="175" name="przycisk" src="'.$wiersz1['sciezka'].'"/></a>';


Nastepnie przy sprawdzaju czy dodawać/odejmować punkty daj dodatkowy warunek:

  1. if(isset($_GET['pierwszy']) && isset($_GET['r']) && $_GET['r'] == $oldR) (...)
  2.  
  3. (...)
  4.  
  5. if(isset($_GET['drugi']) && isset($_GET['r']) && $_GET['r'] == $oldR) (...)


Skasuj z końca "session_destroy()".

Gotowe wink.gif

Prosta idea - przy każdym odświeżeniu generowana jest nowa zmienna. po przejściu na link jest sprawdzana i się zgadza, po odświeżeniu już się nie zgadza bo została wygenerowana nowa wink.gif

HTH! wink.gif
ebate
Tak więc zrobiłem jak Ty mi zasugerowałeś i problem zniknął. Wszystko działa w jak najlepszym porządku. Wielkie dzięki za pomoc i poświęcony mi czas.
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.