Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: if wartość X w mysql=1 to include plik.php
Forum PHP.pl > Forum > XML, AJAX
adek-
Chłopaki zrobiłem sobie w php proste sprawdzanie warunku, gdzie jeśli się spełni to użytkownik dostaje monit na ekranie -include popup.php, ale jak to w php bywa, trzeba odświerzyć stronę co załatwiłem wpisem do meta
  1. <meta http-equiv="refresh" content="200">

co nie bardzo mi leży, bo strona się odświeża bardzo często i co prawda tylko przy 20 użytkownikach jakoś nie męczy serwera, ale bardzo przeszkadza ;/
Szukałem rozwiązań w AJAXIE na którym się totalnie nie znam i poznjandywałem tutoriale, które robią to wszystko za pomocą GET,POST itd, a ja mam tylko sprawdzenie wartości MySQL nakierujcie mnie proszę na jakiś wątek jak by mógł wyglądać taki request poniżej w ajaxie?
  1. <?php // #### komunikat dla zalogowanego użytkownika gdy info=1 -zmieniono wartość popup wyskoczy
  2.  
  3. if (isset($_SESSION['login']) && !empty($_SESSION['login'])) {
  4. $wynik=mysql_query("SELECT * FROM $tabela WHERE login='{$_SESSION['login']}' and info=1");
  5. if (mysql_num_rows($wynik) == 1) {
  6. include('popup.php');
  7. } else {?>
  8. <?php }} ?>
amii
Ustaw sobie w JS setInterval na 200 sek. i wywołuj skrypt php sprawdzający sesję. Zmniejszysz obciążenie i nie będziesz przeładowywał całej strony.
Wskazówki jak to zrobić z jQuery:
1. w body onload lub document.ready ustawiasz funkcję jQuery np. zaladuj
[JAVASCRIPT] pobierz, plaintext
  1. function zaladuj () {
  2. setInterval("load", 20000);
  3. }
[JAVASCRIPT] pobierz, plaintext


2. W funkcji load piszsz :
[JAVASCRIPT] pobierz, plaintext
  1. function load () {
  2. $.post("skrypt.php",{login:document.forms[0].session_login.value}, function(data) {
  3. if (data) $('#pole_input').html("zawartosc_popup"); //to może być problem bo w ten sposób możesz umieścić treść tylko po przeparsowaniu przez serwer, ewentualnie możesz pokombinować z header i przekierowaniem z odpowiednim parametrem ale wtedy nie unikniesz przeładowania całej strony więc wyjdzie na to samo co masz teraz
  4. else {}
  5. setInterval("load", 20000);
  6. });
  7. }
[JAVASCRIPT] pobierz, plaintext


3. Ustawiasz ukryte pole z wartością sesji:
  1. <input name="session_login" id="session_login" type="hidden" value="'.$_SESSION['login'].'"/>


4. W pliku php zaczytujesz zmienną z tablicy POST i dalej obsługujesz tak samo jak teraz:
  1. $login = $_POST['login'];
adek-
Witaj, dziękuję Ci amii za odpowiedź. Niestety jako iż do dzisiaj nie miałem potrzeby interesować się JS, będę miał parę pytań do Ciebie jeśli będziesz miał chwilkę to prosze odpowiedz, bo nie wiem czy dokładnie Cię rozumiem.

Mówiąć jQuery, przypuszczalnie mam też użyć biblioteki js w head jak poniżej, oraz funkcję załaduj wstawić np w coś w ten deseń?
  1. <script src="http://code.jquery.com/jquery-latest.js"></script>
  2. <script>
  3. $(document).ready(function zaladuj () {
  4. setInterval("load", 200);
  5. });
  6. </script>

Nie wiem dokładnie gdzie później miał bym umieścić funkcję load, ale domyślam się, że skrypt.php ma zawierać ten warunek php z pierwszego postu "if (isset($_SE..." służący do odczytania wartości tak?, a "zawartość_popup" ma posiadać całą treść wcześniejszego pliku popup.php?
Jeśli tak to pojawia się pewien problem, bo wcześniej miałem zrobiony popup tak, że gdy warunek if się spełniał, popup został zaincludowany, a on miał zawartość
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <script type="text/javascript">
  6. jQuery(document).ready(function() {
  7. $.fancybox(
  8. '<h2>Dane zmienione!</h2><center><br>Kliknij poniżej aby przejść do strony akceptacji<br><br><a href="akceptuj.php"><b>-= KLIKNIJ TU =-</b></a><br><br><br><object data="webplayer.swf" type="application/x-shockwave-flash" width="32" height="16"><param name="movie" value="webplayer.swf"><param name="menu" value="false"><param name="scale" value="noscale"><param name="bgcolor" value="#C0C0C0"><param name="flashvars" value="src=mp3.mp3&autostart=yes&loop=no&debug=no"></object><!--<br><br>--></center>',
  9. {
  10. 'autoDimensions' : false,
  11. 'width' : 350,
  12. 'height' : 'auto',
  13. 'transitionIn' : 'none',
  14. 'transitionOut' : 'none'
  15. }
  16. );
  17. });
  18. </script>
  19. </head> <body> </body> </html>

Czyli praktycznie sama sekcja head to była, a sprawiała że pojawiało się z onload okienko fancyboxa na środku z auto startującym dzwiękiem i tekstem o kliknięciu aby przejść do strony akceptuj.php, gdzie był formularzyk malutki
  1. if (isset($_POST['wyslane']) && !empty($_POST['wyslane'])) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  2. //$info=$_POST['info'];
  3. $wynik = mysql_query("UPDATE $tabela SET info='0' WHERE login='{$_SESSION['login']}'");
który to po kliknięciu był wykonywany skrypt wrzucający do pola mysql usera wartość int 0, czyli likwidującą monit o zmianie i wyłączający dźwięk powiadomienia.

Brak wiedzy na temat paru języków sprawił, że musiałem kombinować wink.gif więc tak powstał cały ten proces...
warunek sprawdzający czy zalogowany user ma w mysql wartość info=1, jeśli tak to include popup.php, który ma wartość onload fancybox, puszcza dzwięk i wyświetla komunikat na środku ekrany z linkiem do strony gdzie możemy ustawić info=0 czyli wyłączyć notyfikację dźwiękową i wizualną. To wszystko po to aby użytkownik nie śledził zmian na stronie tylko dostał dźwięk i od razu wiedział o co chodzi wink.gif

// edited: łączenie się z bazą przez ajaxa jest możliwe i ma bardzo podobne komendy jak MySQL, szkoda tylko, że to DB2 ;/
http://www.ibm.com/developerworks/data/lib...e/dm-0701vohra/
amii
1. To powinno być dokładnie coś takiego:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. setInterval("load", 20000); //wywołanie co 200 sek.
  3. });
[JAVASCRIPT] pobierz, plaintext

Load umieszczasz w tym samym pliku. Kod php w/g mnie powinien wyglądać tak:
  1. $login = $_POST['login'];
  2. $wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and info=1");
  3. if (mysql_num_rows($wynik) == 1) echo 'ok'; //wydrukuj cokolwiek żeby funkcja JS otrzymała parametr data, wtedy to znaczy że user jest zalogowany
  4. else {}
  5. ?>


Z tym fancyboxem to może być faktycznie problem. Podepnij bibliotekę pod główny plik tam gdzie masz dodane funkcje JS. Nie wiem czy to zadziała ale spróbuj wsadzić poniższy fragment kodu. Oczywiście wcześniej definiujesz pustego diva w głównym dokumencie: <div id="pole_input"></div>

[JAVASCRIPT] pobierz, plaintext
  1. if (data) {
  2. if ($('#pole_input').html()) $('#pole_input').html('');
  3. $('#pole_input').html("<script type=\"text/javascript\">
  4. $.fancybox(
  5. '<h2>Dane zmienione!</h2><center><br>Kliknij poniżej aby przejść do strony akceptacji<br><br><a href=\"akceptuj.php\"><b>-= KLIKNIJ TU =-</b></a><br><br><br><object data=\"webplayer.swf\" type=\"application/x-shockwave-flash\" width=\"32\" height=\"16\"><param name=\"movie\" value=\"webplayer.swf\"><param name=\"menu\" value=\"false\"><param name=\"scale\" value=\"noscale\"><param name=\"bgcolor\" value=\"#C0C0C0\"><param name=\"flashvars\" value=\"src=mp3.mp3&autostart=yes&loop=no&debug=no\"></object><!--<br><br>--></center>',
  6. {
  7. 'autoDimensions' : false,
  8. 'width' : 350,
  9. 'height' : 'auto',
  10. 'transitionIn' : 'none',
  11. 'transitionOut' : 'none'
  12. }
  13. );
  14.  
  15. </script>");
  16. }
[JAVASCRIPT] pobierz, plaintext


Jakby nie działało spróbuj jeszcze dopisać do post script jako typ danych zwracanych przez serwer, teoretycznie powinny być wtedy przeparsowane jako kod javascript
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.