Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowa wartość zmiennej PHP z bazy MySQL do JS - ciągle ta sama.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
MariuszS
Witam,
Mam taką zagwostkę. Mianowicie mam w js napisany pewien quiz.
Funkcja pobierająca pytania odwołuje się do pliku php poprzez funkcję httpRequest:
  1. function pobierzPytanie() {
  2. httpRequest('pytania.php');
  3. }

, którą napisałem w taki sposób:
  1. function httpRequest(uri)
  2. {js=document.createElement('script');
  3. js.src=uri;
  4. js.type='text/javascript';
  5. oDoc=document.getElementsByTagName('head')[0];
  6. oDoc.appendChild(js);
  7. }

Plik pytania.php to nic innego jak pobranie pytań z bazy i uzupełnienie zmiennych:
  1. <?php
  2. $zapytanie="SELECT * FROM pytania ORDER BY RAND() LIMIT 1";
  3. $wykonaj=mysql_query($zapytanie);
  4. $wiersz=mysql_fetch_array($wykonaj);
  5. question[0] = \''.$wiersz[pytanie].'\';
  6. question[1] = \''.$wiersz[a].'\';
  7. question[2] = \''.$wiersz[b].'\';
  8. question[3] = \''.$wiersz[c].'\';
  9. question[4] = \''.$wiersz[d].'\';
  10. pokazPytanie();';
  11. ?>

Chcę pobierać jedno losowe pytanie z bazy i wyświetlić go funkcją pokazPytanie(), która wygląda tak:
  1. function pokazPytanie() {
  2. x=document.getElementById('question');
  3. if (x) x.innerHTML=question[0];
  4. for (i=1;i<question.length;i++)
  5. tu kod wysiwetlajacy odpowiedzi, kliknięcie na odpowiedz wywołuje funckję sprawdzającą czy odp. jest poprawna, jeśli tak to ponownie uruchamia się funkcja pobierzPytanie();
  6. }

Funkcja pobierzPytanie uruchomiana jest na window.onload i wówczas wszystko działa ok, tj. otrzymuję pierwsze losowo wybrane pytanie. Gdy udzielam poprawnej odpowiedzi, następuję kolejne wylosowanie pytanie, natomiast gdy udzielę poprawnej odpowiedzi na drugie pytanie to ponownie otrzymuję to poprzednie, i tak na przemian. Ewentualnie drugie pytanie powtarza się do samego końca.
Nie wierzę że akurat taki zbieg okoliczności występuję że losuje mi tak te pytania, że się powtarzają. Wygląda mi to na jakiś problem w pliku pytania.php. Tak jakby to zapytanie nie wykonywało się za każdym razem, a chyba powinno zawsze kiedy wywołuję funckję pobierzPytanie.
Jakieś podpowiedzi?
CuteOne
To nie problem PHP a JS. Musisz usunąć wcześniej utworzony element <script> i dopiero wtedy zassać nowy w przeciwnym wypadku nowe dane zostaną "z tłamszone" przez stare dane
MariuszS
Jakaś podpowiedź?
Zrobiłem to w ten sposób, wywołuje się to po kliknięciu na odp. w pierwszym pytaniu, tak by przed pobranie drugiego pytania element został usunięty.:
  1. q=document.getElementsByTagName('script')[0];
  2. if (q) q.parentNode.removeChild(q);


ale nic to nie dało. Losuje dobrze do momentu aż się zatnie i wówczas pokazuje te same wartości zmiennych na przemian.

Edit.
Zaobserwowałem, że zawieszenie tj. naprzeminne powtarzanie zaczyna się w momencie gdy zostanie wylosowane pytanie które już wcześniej było.
piotr.kazmierczak
Problemem może być z cachowanie przeglądarki. Zobacz czy pomoże jeżeli zrobisz:


  1. function pobierzPytanie() {
  2. httpRequest('pytania.php?t=' + (+new Date));
  3. }

MariuszS
Mądra głowa smile.gif
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.