Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP]puste tablice
Forum PHP.pl > Forum > Przedszkole
Th0e
Problem polega na tym, że zarówno zwykła tablica, jak i $_SESSION staje się pusta gdy chcę jej ponownie użyć.
Najpierw losuję zawartość dla 25 elementów i te dane są. Potem jednak gdy chcę się odnieść do tablicy z metody sprawdź, jest ona pusta (tworzy plik nieee.txt)


script.js:
  1. var test = document.getElementById('center');
  2.  
  3. test.onclick=function()
  4. {
  5. //Rozpoczęcie gry
  6. var graj = document.getElementById('graj');
  7. graj.style.display='none';
  8.  
  9. if(document.getElementById('20'))
  10. return 0;
  11.  
  12.  
  13. for(i=1;i<=25;i++) //pętla tworząca x pól
  14. {
  15. var element = document.createElement('div');
  16. element.id=i;
  17. element.style.width='50px';
  18. element.style.height='50px';
  19. element.style.margin='2px';
  20. element.style.display='inline-block';
  21. element.style.backgroundColor='black';
  22. element.onclick=function(){sprawdz(this);}
  23.  
  24. test.appendChild(element);
  25.  
  26. var r = new XMLHttpRequest(); //odsyłanie do skryptu PHP
  27. r.open('GET', 'obiekty.php?losuj='+i, true);
  28. r.send(null);
  29. }
  30. }
  31.  
  32. function sprawdz(element)
  33. {
  34. var pole = element.id;
  35. var r = new XMLHttpRequest(); //odsyłanie do skryptu PHP
  36. r.open('GET', 'obiekty.php?sprawdz='+pole, true);
  37. r.send(null);
  38. }


obiekty.php:

  1. class Gra
  2. {
  3. function losuj($pole)
  4. {
  5. $_SESSION[$pole]=rand(0,1);
  6. }
  7.  
  8.  
  9. function sprawdz($pole)
  10. {
  11. if(!empty($_SESSION[$pole]))
  12. fopen("taaa.txt","w");
  13. else
  14. fopen("nieee.txt","w");
  15.  
  16.  
  17.  
  18. }
  19. }
  20.  
  21. $menu = new Menu();
  22.  
  23. $gra = new Gra();
  24.  
  25. if(isset($_GET['losuj'])) $gra->losuj($_GET['losuj']);
  26.  
  27. if(isset($_GET['sprawdz'])) $gra->sprawdz($_GET['sprawdz']);
Pyton_000
!empty($_SESSION[$pole])
zamień na
array_key_exists($pole, $_SESSION)
Th0e
Zależy mi na uzyskaniu zawartości danego elementu tablicy smile.gif

Edit: ogolnie to chodzi mi o to by metoda SPRAWDZ wykonała jakis kod js gdy element tablicy zawiera 1

Cytat(Pyton_000 @ 22.01.2016, 15:26:46 ) *
!empty($_SESSION[$pole])
zamień na
array_key_exists($pole, $_SESSION)


array_key_exists($pole, $_SESSION) również stworzyło plik nieee, czyli taki element nie istnieje.

==================
Zamiana sesji na zwykłą tablicę daje takie same rezultaty
  1. class Gra
  2. {
  3. var $tablica = array();
  4. function losuj($pole)
  5. {
  6. $this->tablica[$pole]=rand(0,1);
  7. }
  8.  
  9.  
  10. function sprawdz($pole)
  11. {
  12. if(array_key_exists($pole, $this->tablica))
  13. fopen("taaa.txt","w");
  14. else
  15. fopen("nieee.txt","w");
  16.  
  17. }
  18. }
Pyton_000
zmiana nic ci na pewno nie da.
Sprawdź lepiej co masz w $_SESSION;

Ew. przy ustawianiu elementów w sesji daj niże session_commit();
Th0e
  1. class Gra
  2. {
  3.  
  4. public $tablica = array();
  5.  
  6. function losuj($pole)
  7. {
  8. $this->tablica->$pole=rand(0,1);
  9. }
  10.  
  11.  
  12. public function sprawdz($pole)
  13. {
  14. for($i=0;$i<=25;$i++)
  15. fopen($pole."-".$this->tablica->$i.".txt","w");
  16. }
  17. }


powyższy kod tworzy plik o nazwie np.
  1. 3-.txt
Pyton_000
Po chińsku piszę czy jak?
Th0e
Cytat(Pyton_000 @ 22.01.2016, 19:28:57 ) *
Po chińsku piszę czy jak?


kombinuję i nie mam pojęcia jak użyć tego session_commit();

Próbowałem już chyba wszystkich sposobów
  1. class Gra
  2. {
  3. function start()
  4. {
  5. }
  6. function close()
  7. {
  8. }
  9. function losuj($pole)
  10. {
  11. $this->start();
  12. $_SESSION[$pole]=rand(0,1);
  13. $this->close();
  14. }
  15.  
  16.  
  17. public function sprawdz($pole)
  18. {
  19. $this->start();
  20. fopen($pole."-".$_SESSION[$pole].".txt","w");
  21. $this->close();
  22. }
  23. }


Odnośnie zawartości SESSION, to w trakcie wykonywania metody losuj, dane są umieszczane poprawnie.

--------
Dobra zrobiłem to na COOKIE. Najwidoczniej zmienne resetowały się przy każdym połączeniu z plikiem php poprzez ajax. Temat do zamknięcia.
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.