Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][javascript] Losowe wyswietlanie danych bez koniecznosci odswiezania strony
Forum PHP.pl > Forum > Przedszkole
tomii
witam ponownie - chcialbym się Was poradzić jeszcze w jednej kwestii - pobieram sobie dane z bazy np.:
  1. <?php
  2. include("funkcje/iso.php");
  3. $zapytanie = mysql_query ("SELECT id_ulica, ulica, kontakt FROM $mysql_tabela WHERE status='s' ORDER BY rand() LIMIT 1") or die ("Błąd w zapytaniu");
  4. while ($rekord = mysql_fetch_array ($zapytanie)) {
  5. $ulica = $rekord[0];
  6. $kontakt = $rekord[1];
  7. ...
  8. print(iso("$ulica"));
  9. ...
  10. ?>

w taki sposob wyswietla mi losowo ale musze za kazdym razem odswiezyc strone - lub kliknac ponownie w jakis odnosnik - a jak zrobić aby to automatycznie np. co 5 sek. oswizalo sie? z javascript u mni ekiepsko wiec moze cos poradzicie?
Wieviór
  1. <?php
  2. <script>setTimeout('document.location = "strona.php"', 100);</script>
  3. ?>


Gdzie "100" to czas w milisekundach.
tomii
dzięki Wieviór ale nie do konca o to mi chodziło - bo stsujac ta metode to odswieza mi cala strone i np. jak ktos czyta w srodku to wywala go spowrotem na gore i ten cholerny odglos przeladowania strony mnie denerwuje winksmiley.jpg

a czy da sie zrobic to np. do okreslonej czesci serwisu? np. jakiejs tabeli? zeby tylko ja odswiezalo a nie cala strone? - stronki nie mam w ramkach. Chodziło mi o coś podobnego do: (lewa gorna strona - reklamy sie zmieniaja losowo) link
drPayton
AJAX:
Zrób funkcję JS , która będzie pobierała te dane z bazy (czyli to co napisałeś w osobnym pliku php). Na stronie, np div o określonym id a funkcja JS metodą innerHTML wstawia do niego odpowiedź php. I na koniec skryptu (strony) daj fragmencik js
  1. setInterval('moja funkcja', 1000)

Gdzie ta druga wartość to czas (w milisekundach), co który ma być wywoływana funkcja zdefiniowana w pierwszym parametrze.
mrjozo
Poczytaj o AJAX.... i JavaScript

Do elementu na stronie możesz sie odwołać poprzez:

element = document.getElementById(id);

http://developer.mozilla.org/en/docs/DOM:d....getElementById
tomii
ehhhhhh za ciezki na razie dla mnie AJAX - ciezko od razu to zrobic - czy ktos moglby jakiegos tutka podeslac lub pokazac jak by to mialo wygladac? po ok 1,5 godz. nadal ciezko mi jest cos dzialajacego wyskorobac ...
mrjozo
Skorzystaj z bliblioteki: http://advajax.anakin.us/index-pl.htm (dołącz do Twojej strony)

Tam gdzie chcesz mieć ogłoszenie dodaj:

Kod
<div id="ogloszenia"></div>

Funckja JS:

Kod
function changeContent() {

advAJAX.get({
    url: "http://twojastrona.pl/strona.php",
    onSuccess : function(obj) {
document.getElementById('ogloszenia').innerHTML = obj.responseText;
}
});

}


Na końcu strony skrypt:

Kod
setInterval('changeContent', 1000);
tomii
no to teraz wyjde na kompletnego glupka - az wstyd no ale musze zapytac: mam tak: index.html - gdzie wstawilem:
  1. <script type="text/javascript" src="advajax.js"></script>
  2.  
  3. <script type="text/javascript">
  4. function changeContent() {
  5.  
  6. advAJAX.get({
  7. url: "os.php",
  8. onSuccess : function(obj) {
  9. document.getElementById('ogloszenia').innerHTML = obj.responseText;
  10. }
  11. });
  12.  
  13. }
  14.  
  15. setInterval('changeContent', 1000);
  16. </head>

w pliku os.php zapisalem sobie tebele w ktorej wynonuja sie zapytania do bazy:
  1. <table border="0" width="90%" cellspacing="0" cellpadding="0">
  2. <?php
  3. include("tabela.php");
  4. include("mysql_connect.php");
  5. include("iso.php");
  6. $zapytanie = mysql_query ("SELECT id_ulica, ulica FROM $mysql_tabela WHERE status='s' ORDER BY rand() LIMIT 1") or 
  7. die ("Błąd w zapytaniu");
  8. while ($rekord = mysql_fetch_array ($zapytanie)) {
  9. $id_ulica = $rekord[0];
  10. $ulica = $rekord[1];
  11. ?>
  12. <tr>
  13. <td class="normal" colspan="2">
  14. <p align="right">
  15. <img border="0" src="images/6_1.gif" width="1" height="14"></td>
  16. </tr>
  17. <tr>
  18. <td class="normal" colspan="2">
  19. <img border="0" src="images/napisy/ulica.gif" width="94" height="9">: 
  20. <font color="#3487E4"><i> <?php print(iso("$ulica")); ?></i></font></td>
  21. </tr>
  22. <tr>
  23. <td class="normal" colspan="2">
  24. <p align="right">
  25. <img border="0" src="images/6_1.gif" width="1" height="3"></td>
  26. </tr>
  27. <tr>
  28. <td class="normal" width="3%">
  29. <img border="0" src="images/kropka_c.gif" width="4" height="4"></td>
  30. <td class="normal" width="97%"><font color="#000000">
  31. <?php echo"<a href=ulica.html?id_ulica=$id_ulica><font color=\"#000000\">więcej informacji</font></a>"; ?></font></td>
  32. </tr>
  33. <tr>
  34. <td class="normal" colspan="2">
  35. <p align="right">
  36. <img border="0" src="images/6_1.gif" width="1" height="6"></td>
  37. </tr>
  38. <?php 
  39. } 
  40. ?>
  41. </table>


w pliku index.html w miejscu (o ile dobrze zrozumialem) gdzie ma sie pojawic plik os.php wtawiłem
  1. <div id="ogloszenia"></div>


no i klapa - nie działa zupełnie - a teraz mozecie po mnie jechac .... sadsmiley02.gif
mrjozo
Nie wiem jakie błedy są generowane... możesz podać adres strony aby zobaczyć? W konsoli błędów sprawdź czy w JS są jakieś błedy...

Kod
setInterval('changeContent', 1000);


zmień na:

Kod
window.setInterval('changeContent()', 10000);


Spróbuj przed linijką:

Kod
document.getElementById('ogloszenia').innerHTML = obj.responseText;


dać:

Kod
alert(obj.responseText);


aby zobaczyc czy jest cos zwracane...
tomii
nic sie nie dzieje nic nie zwraca: link
tomii
tam gdzie sa ogloszenia specjalne powinno wyswietlac te ktore spelniaja warunek - a tu nic - sorki ze tak zasmiecam ale musze zalozyc konto ... ;-)
mrjozo
Nie zmieniłeś tej linijki: setInterval('changeContent', 1000); zgodnie z powyzszym...

pozatym tuaj mozesz dać link bezwzględny:

Kod
url: "http://www.paczkat.webd.pl/test/os.php",


PS. na początek możesz umieścić w tym divie jakieś ogłoszenie, gdyż zostenie ono zastąpione dopiero po 10 sek
drPayton
Jeżeli pliki są w tym samym katalogu, to na pewno "coś" jest zwracane. Błąd na pewno był w:
  1. setInterval('changeContent', 1000);

powinno być:
  1. setInterval('changeContent()', 1000);


window przed tym nie jest potrzebne, ale nawiasy bezwzględnie
tomii
heh działa winksmiley.jpg dzięki śliczne - tylko jeszcze mam jedno pytanie - czemu najpierw wali komunikat (alert a pozniej dopiero wyswietla wyniki? jak sie tego pozbyc?
drPayton
Wywalić alert. Przecież on miał służyć jedynie sprawdzeniu poprawności pobierania danych, teraz Ci już chyba nie jest potrzebny, co? winksmiley.jpg
tomii
heh calkowicie o nim zapomnialem hehe winksmiley.jpg ok juz wszystko działa tak jak nalezy - zrobie z tego tutka i zamieszcze tu pliki dla innych - dziękuje Wam za cierpliwosc do mojej osoby winksmiley.jpg i wyrozumialosc winksmiley.jpg

dzięki exclamation.gif! [} [} [} [} browarki dla was winksmiley.jpg
dred
Czesc wszystkim - dobrze ze trafilem na ten temat bo bardzo mis ie przydal - chciałem zapytac Was o jedna rzecz - nie iwem jak autor sobie z tym poradzil ale ja jakoś nie moge. Zrobiłem wszystko tak samo jak w temacie tylko mam problem z wyswietlaniem prostych polskich liter ęśćą itp nawet z ł. Czy możecie mi doradzić lub pomoc jak to zrobic? Mysle ze wiele osob pomoze ten temat bo w sumie bardzo fajnie został omówiony ...

pozdrawiam
mrjozo
Ustaw odpowiednie kodowanie dla strony oraz zapisuj strony w odpowiednim kodowaniu (np ISO-8859-2)

Nie napisałeś czy normalnie jeśli wejdziesz na stronę która pobiera dane, taki problem tez występuje, może być to spowodowane problemami z kodowaniem w bazie jeśli z niej pobierasz dane
dred
z bazy dobrze mi wyciaga dane i z polskimi znakami - dopiero przez ten skrypt jak wywolam to nie mam polskich znakow ...
dred
z bazy dobrze mi wyciaga dane i z polskimi znakami - dopiero przez ten skrypt jak wywolam to nie mam polskich znakow ...
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.