Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zmiana rekordu po określonym czasie
Dyqmin
post 17.01.2016, 23:41:04
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.12.2014

Ostrzeżenie: (0%)
-----


Witam!
Chcę dodać do kodu skrypt, który by umożliwił dodanie monet dla gracza po określonym czasie.
Jest to swego typu "misja", w której czas do jej zakończenia musi być gdzieś przechowywany.

Próbowałem już nawet dodanie końca misji do rekordu w bazie danych, ale monety dodają się tylko po odświeżeniu strony.

  1. <?php
  2. $host = "localhost";
  3. $db_user = "root";
  4. $db_password = "";
  5. $db_name = "gra";
  6.  
  7. $connection = mysql_connect($host, $db_user, $db_password)
  8. or die ("Could not connect to server ... \n" . mysql_error ());
  9. mysql_select_db($db_name)
  10. or die ("Could not connect to database ... \n" . mysql_error ());
  11.  
  12. $wynik = mysql_query("SELECT monety FROM gracze WHERE nick ='domin' ")
  13. or die('Błąd zapytania');
  14.  
  15. if(mysql_num_rows($wynik) > 0) {
  16. while($r = mysql_fetch_assoc($wynik)) {
  17. $monety = $r['monety'];
  18. }
  19. }
  20.  
  21. echo "Masz aktualnie $monety monet <br />";
  22.  
  23. if(isset($_POST['SubmitButton'])){
  24. echo "Rozpocząłeś polowanie!";
  25. $sql = 'UPDATE gracze SET monety = monety + 1 WHERE nick = "domin" ';
  26. mysqli_query($sql, $connection);
  27.  
  28. }
  29. ?>


Dla zobrazowania: Klik submit -> rozpoczęcie misji, start licznika -> po zakończeniu (np. po 30s) dodają się monety

Proszę o nakierowanie mnie na jakąś dobrą drogę.
Z góry dzięki.

Ten post edytował Dyqmin 17.01.2016, 23:55:48
Go to the top of the page
+Quote Post
adrianpl20
post 18.01.2016, 00:59:41
Post #2





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 20.02.2014

Ostrzeżenie: (10%)
X----


użyj do tego javascriptu + ajaxa
Go to the top of the page
+Quote Post
Riggs
post 18.01.2016, 07:21:23
Post #3





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

Ostrzeżenie: (0%)
-----


Lepiej będzie zakolejkować jakieś zadanie z czasem rozpoczęcia i z poziomu crona wywołanego co jakiś czas te monety dodawać... Ale to już zależy od architektury Twojego systemu.
Go to the top of the page
+Quote Post
Dyqmin
post 18.01.2016, 07:50:06
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.12.2014

Ostrzeżenie: (0%)
-----


Nocka zarwana na ulepszanie kodu.

skrypt ajaxa (kod znalazłem i pozmieniałem na własne potrzeby):
  1. $(document).ready(function() {
  2.  
  3.  
  4. $("#FormSubmit").click(function (e) {
  5. e.preventDefault();
  6.  
  7. $("#FormSubmit").hide(); //hide submit button
  8.  
  9.  
  10. var myData = 'content_txt='+ $("#contentText").val(); //build a post data structure
  11. jQuery.ajax({
  12. type: "POST", // HTTP method POST or GET
  13. url: "re2.php", //Where to make Ajax calls
  14. dataType:"text", // Data type, HTML, json etc.
  15. data:myData, //Form variables
  16. success:function(response){
  17. $("#responds").append(response);
  18. $("#contentText").val(''); //empty text field on successful
  19. $("#FormSubmit").show(); //show submit button
  20.  
  21. },
  22. error:function (xhr, ajaxOptions, thrownError){
  23. $("#FormSubmit").show(); //show submit button
  24. alert(thrownError);
  25. }
  26. });
  27. });
  28. });
  29. function refresh_div() {
  30. jQuery.ajax({
  31. url:'re3.php',
  32. type:'POST',
  33. success:function(results) {
  34. jQuery(".result").html(results);
  35. }
  36. });
  37. }
  38.  
  39. t = setInterval(refresh_div,1000);

Jeden wysyła zadanie zmiany rekordu końca misji, drugi odświeża co sekunde z zapytaniem do bazy, czy koniec jest równy aktualnej dacie.
Kontynuacja index.php
  1. <?php
  2. $host = "localhost";
  3. $db_user = "root";
  4. $db_password = "";
  5. $db_name = "gra";
  6.  
  7. $connection = mysql_connect($host, $db_user, $db_password)
  8. or die ("Could not connect to server ... \n" . mysql_error ());
  9. mysql_select_db($db_name)
  10. or die ("Could not connect to database ... \n" . mysql_error ());
  11.  
  12. $wynik = mysql_query("SELECT monety FROM gracze WHERE nick ='domin' ")
  13. or die('Błąd zapytania');
  14.  
  15. if(mysql_num_rows($wynik) > 0) {
  16. while($r = mysql_fetch_assoc($wynik)) {
  17. $monety = $r['monety'];
  18. }
  19. }
  20.  
  21. echo "<div class=\"result\"></div>";
  22.  
  23. ?>
  24.  
  25. <div class="form_style">
  26. <button id="FormSubmit">Add record</button>
  27. </div>

re2.php
  1. <?php
  2. $username = "root"; //mysql username
  3. $password = ""; //mysql password
  4. $hostname = "localhost"; //hostname
  5. $databasename = 'gra'; //databasename
  6.  
  7. //connect to database
  8. $mysqli = new mysqli($hostname, $username, $password, $databasename);
  9.  
  10. $zero = "0000-00-00 00:00:00";
  11. $time = date('Y-m-d H:i:s', strtotime('+10 second'));
  12. $data = date('Y-m-d H:i:s');
  13.  
  14. $check = $mysqli->query("SELECT koniec FROM gracze WHERE nick = 'domin' ");
  15. while($row = $check->fetch_assoc())
  16. {
  17. $kuniec = $row["koniec"];
  18.  
  19. }
  20. if($kuniec!=$zero){
  21. echo "Aktualnie robisz zadanie";
  22. } else{
  23. $tez = $mysqli->query("UPDATE gracze SET koniec = '$time' WHERE nick = 'domin'");
  24. }
  25. ?>


re3.php
  1. <?php
  2. $username = "root";
  3. $password = "";
  4. $hostname = "localhost";
  5. $databasename = 'gra';
  6.  
  7. //connect to database
  8. $mysqli = new mysqli($hostname, $username, $password, $databasename);
  9. $dodaj = $mysqli->query("SELECT monety FROM gracze WHERE nick = 'domin' ");
  10. while($row = $dodaj->fetch_assoc())
  11. {
  12. echo 'Masz aktualnie '.$row["monety"].'monet';
  13.  
  14. }
  15. $zero = "0000-00-00 00:00:00";
  16. $data = date('Y-m-d H:i:s');
  17.  
  18. $check = $mysqli->query("SELECT koniec FROM gracze WHERE nick = 'domin' ");
  19. while($row = $check->fetch_assoc())
  20. {
  21. $time = $row["koniec"];
  22.  
  23. }
  24.  
  25.  
  26. if($time<=$data && $time != $zero){
  27. $tez = $mysqli->query("UPDATE gracze SET koniec = '$zero' WHERE nick = 'domin'");
  28. $dodaj = $mysqli->query("UPDATE gracze SET monety = monety + 1 WHERE nick = 'domin'");
  29. }
  30.  
  31. ?>


Zastanawiam się, czy te co sekundowe odświeżanie diva ajaxa będzie okej, czy nie będzie obciążało serwera.
Wybaczcie za to mieszanie mysql i mysqli, ale skupiłem się na rozbudowie tego skryptu, zamiast na wyszczupleniu kodu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 08:56