Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Java][SQL][PHP]Odliczanie czasu z bazy MYSQL
Forum PHP.pl > Forum > Przedszkole
awek520
Witam.

Piszę taki mały skrypt polegający na odliczaniu czasu rzeczywistego.

Chodzi o to.. że gdy klikniemy np w link to wykona się zapytanie do bazy i skrypt zacznie odliczac czas (podany w bazie mysql)

W bazie będą dwa rekordy. Czas rzeczywisty zmieniający się po kliknięciu w link + drugi rekord z czasem np. 30min. (czas potrzebny do zmiany)

Po 30 min jakieś powiadomienie że czas się skończył + kolejne zapytanie do mysql że coś zostało zmienione.
Oczywiście odliczanie w js.

Czy można to tak zrobic?

Jak sie do tego zabrac.? W JS jestem bardzo slaby a potrzebuje tylko tego skryptu.

Pozdrawiam
rad11
Musisz w tym wypadku uzyc AJAX`a. Po kliknieciu w odnosnik dodajesz aktualnie klikniety czas i aktualny czas + 30minut. Mozesz dac warunek po kliknieciu ktory bedzie sprawdzac czy data aktulana >= data+30minut jesli sie rowna lub jest wieksze to wtedy robisz zmiane.
awek520
Mam taki kodzik:

  1. <a href="?action=stacje&pts=1">241 - CZAS AKTUALNY</a>
  2.  
  3. <?php
  4. if($_GET['pts']!=''){
  5. if ($_GET['pts']==1){
  6. $pociagi=mysql_query("SELECT * FROM pociagi WHERE gracz=$_SESSION[id] AND id = 241");
  7.  
  8. $czas_aktualny=date('Y.m.d, H:i:s');
  9. $czas_potrzebny = date('Y.m.d, H:i:s', strtotime('+30 minutes'));
  10.  
  11. mysql_query("UPDATE pociagi SET czas_aktualny='$czas_aktualny', czas_potrzebny='$czas_potrzebny' WHERE id='241'");
  12. echo '<br><br>Czas zmieniony <b>'.$czas_aktualny.'</b>
  13.  
  14. <br><br>
  15.  
  16. Pociąg dojedzie do celu o <b>'.$czas_potrzebny.'</b>';
  17. }
  18. }
  19. ?>


1. Chciałbym teraz się zapytac czy jak zmienie czas na kompie to czy tamten czas także sie zmieni?
2. I jak zrobic te odejmowanie czasu + zapytanie mysql.
3. Czy jesli ktoś nie bedzie zalogowany to czy zapytanie także dojdzie do celu ?
timon27
1. Nie, czas pobierany jest na serwerze.
2. Niepotrzebnie używasz funkcji date - zamienia ona czas unix na wersję "czytelną dla ludzi" która trudniej przetwarzać.
Uzyj time(), to po prostu odejmiesz te dwie liczby i będziesz miał wynik w sekundach. Funkcji date używaj tylko przy wyświetlaniu.
Reszta to logiczne myślenie.
3. tak, jeśli to nie jest w ifie sprawdzającym zalogowanie
awek520
Zmieniłem to na time.. no ale teraz pytanie jak to wyswietlic ? bo narazie to wyświetla w formie " Czas zmieniony 1418990376 "
Turson
Java !== Javascript
nospor
Niepotrzebnie zamieniales to na time... rzekome datetime wcale nie jest trudniejsze do przetwarzania...

No ale skoro juz zamieniles na time, to teraz przed wyswietleniem masz uzyc date() by zamienic to na wersje czytelną dla ludzi
awek520
Zrobiłem to trochę inaczej..

Oto kodzik:

  1. <?php
  2.  
  3. if($czas_aktualny >= $czas_potrzebny) {
  4. echo 'Czas dobiegł konca - edycja mysql';
  5. }
  6. else {
  7. echo 'do konca czasu pozostało: ....';
  8. }
  9. ?>


Chciałbym zapytac jeszcze jak obliczyc ten czas.. szukam po forach i nic.. a niby taki banał ; /


Yhy, działa tylko jak zmieniamy czas.. po odswieżeniu strony już nie działa ;/
rad11
Ten czas to ktory? potrzebny? Jak potrzebny to przeciez obliczales go i dodawales do bazy a czas aktualny to przeciez date("Y-m-d H:i:s").
awek520
Teraz to Cię nie rozumiem.. chciałem poprostu w if sprawdzic czy czas aktualny jest taki sam lub większy od czasu potrzebnego.. no ale nie bardzo się to udało


aa już chyba wiem.. jak zrobic zapytanie czas_potrzebny - czas_aktualny.. tak żeby wiedziec ile czasu pozostało do czas_potrzebny
rad11
Ale probujesz isc jak kon pod gore przeciez masz juz czas potrzebny do zmiany w bazie danych, porownuj go tak:



  1.  
  2. if(date('Y-m-d H:i:s') >= $czas_potrzebny){
  3.  
  4. echo 'koniec';
  5.  
  6. }
  7.  
  8.  



a jesli zrobisz ta operacje o ktorej Ty mowisz to otrzymasz tylko roznice ktora pokazuje Ci ile zostalo do zmiany.
awek520
Ok zrobiłem tak jak napisałeś..

  1. <?php
  2.  
  3. if(date('Y-m-d H:i') >= $czas_potrzebny){
  4.  
  5. echo 'koniec';
  6. }
  7. else {
  8. echo 'liczymy';
  9. }
  10. ?>


Tylko mówię że gdy klikam jakąś podstronę to zamiast w tym momencie przez 30 min wyswietlac liczymy to wyświetla koniec
rad11
A co pokazuje var_dump($czas_potrzebny); questionmark.gif
awek520
Pusty jest - NULL
rad11
No to masz odpowiedz na pytanie , a if dobrze pokazuje bo date('Y-m-d H:i:s') jest wieksze od NULL.
awek520
To czemu wyświetla się pusty jak dane są zapisane i wyświetlane dobrze ?
rad11
Moze dlatego

  1. date('Y.m.d, H:i:s', strtotime('+30 minutes'));


popraw na(usun przecinek i kropki):

  1. date('Y-m-d H:i:s', strtotime('+30 minutes'));
awek520
No zmieniłem.. i przy aktualizacji dobrze "wypluwa" dane na var_dump no ale po przejsciu w inna na poprzednią stronę znów to samo.. i "koniec"
rad11
A czy na tej innej stronie tez sprawdzasz ten czas?
awek520
Chodzi mi o stronę główną - home.php
Ten skrypt znajduję się też na niej - tylko na _GET

To jest ta sama strona - więc powinno działac
rad11
Wklej caly nowy kod ktory sie znajduje w home.php
awek520
  1. <a href="?action=stacje&pts=1">241 - CZAS AKTUALNY</a>
  2.  
  3. <?php
  4. if($_GET['pts']!=''){
  5. if ($_GET['pts']==1){
  6. $pociagi=mysql_query("SELECT * FROM pociagi WHERE gracz=$_SESSION[id] AND id = 241");
  7.  
  8. $czas_aktualny=date('Y-m-d H:i');
  9. $czas_potrzebny = date('Y-m-d H:i', strtotime('+5 minutes'));
  10.  
  11. mysql_query("UPDATE pociagi SET czas_aktualny='$czas_aktualny', czas_potrzebny='$czas_potrzebny' WHERE id='241'");
  12. echo '<br><br>Czas zmieniony <b>'.$czas_aktualny.'</b>
  13.  
  14. <br><br>
  15.  
  16. Pociąg dojedzie do celu o <b>'.$czas_potrzebny.'</b>';
  17. }
  18. }
  19. echo '<br><br>';
  20.  
  21. if(date('Y-m-d H:i') >= $czas_potrzebny){
  22.  
  23. echo 'koniec<br><br><br>';
  24. }
  25. else {
  26. echo 'liczymy<br><br><br>';
  27. }
  28. var_dump($czas_potrzebny);
  29. ?>
rad11
zrob var dumpa przed ifem i powiedz co pokazuje.
awek520
W tym _GET gdy klikam link wskazuje:

  1. string(16) "2014-12-19 14:12"
- zmieniłem narazie czas na 5min

a w głownej podstronie null
rad11
Powiniennes pobrac czas potrzebny z bazy danych a nie ze zmiennej tak wogole sprobuj tak zrobic zobaczymy co dalej.
awek520
Działa : ) Niby takie proste wink.gif

Mam jeszcze pytanie..

Czy można wyświetlic date i godzine z bazy ale bez sekund ?

  1. '.$czas['czas_potrzebny'].'
rad11
Tak mozna:

  1.  
  2. date('Y-m-d H:i', strtotime($czas['czas_potrzebny']));
  3.  


Popraw na takie cos.
awek520
Dodałem też rok i date ale wyszlo coś takiego..


1970-01-01 01:33

PS.

Dziękuje bardzo.. wszystko działa wink.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.