Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odświeżanie diva po wpisie w bazie danych.
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
Damonsson

trening.php

  1. <?php
  2.  
  3.  
  4. $gracz=mysql_query("SELECT users.*, statystyki.* FROM users, statystyki
  5. WHERE users.id=statystyki.id
  6. AND users.login='$_SESSION[login]' LIMIT 1");
  7. $gracz=mysql_fetch_assoc($gracz);
  8.  
  9. $cena1_sila=($gracz['sila']-4)*5;
  10. $cena5_sila=($cena1_sila+10)*5;
  11.  
  12. $cena1_inteligencja=($gracz['inteligencja']-4)*5;
  13. $cena5_inteligencja=($cena1_inteligencja+10)*5;
  14.  
  15.  
  16. $cena1_szybkosc=($gracz['szybkosc']-4)*5;
  17. $cena5_szybkosc=($cena1_szybkosc+10)*5 ;
  18.  
  19.  
  20. if ($_GET['pts'] !=''){
  21. if ($_GET['pts']==1 ){
  22. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  23. WHERE zloto>=$cena1_sila AND id=$_SESSION['id'] LIMIT 1");
  24. if (mysql_affected_rows()===1){
  25.  
  26. echo'Gratuluje! Zyskales 1 punkt sily!<br>';
  27. }
  28. else{
  29. echo 'error';
  30. }
  31. }
  32.  
  33. if ($_GET['pts']==2 ){
  34. $wynik=mysql_query("UPDATE statystyki SET sila=sila+5, zloto=zloto-$cena5_sila
  35. WHERE zloto>=$cena5_sila AND id=$_SESSION[id] LIMIT 1");
  36. if (mysql_affected_rows()===1){
  37.  
  38. echo'Gratuluje! Zyskales 5 punktów sily!<br>';
  39. }
  40. else{
  41. echo'Nie stac Cie na ten trening. Zarob troche zlota<br>';
  42.  
  43. }
  44. }
  45.  
  46. if ($_GET['pts']==3 ){
  47. $wynik=mysql_query("UPDATE statystyki SET szybkosc=szybkosc+1, zloto=zloto-$cena1_szybkosc
  48. WHERE zloto>=$cena1_szybkosc AND id=$_SESSION[id] LIMIT 1");
  49. if (mysql_affected_rows()===1){
  50.  
  51. echo'Gratuluje! Zyskales 1 punkt szybkosci!<br>';
  52. }
  53. else{
  54. echo'Nie stac Cie na ten trening. Zarob troche zlota<br>';
  55.  
  56. }
  57. }
  58. if ($_GET['pts']==4 ){
  59. $wynik=mysql_query("UPDATE statystyki SET szybkosc=szybkosc+5, zloto=zloto-$cena5_szybkosc
  60. WHERE zloto>=$cena5_szybkosc AND id=$_SESSION[id] LIMIT 1");
  61. if (mysql_affected_rows()===1){
  62.  
  63. echo'Gratuluje! Zyskales 5 punktów szybkosci!<br>';
  64. }
  65. else{
  66. echo'Nie stac Cie na ten trening. Zarob troche zlota<br>';
  67.  
  68. }
  69. }
  70. if ($_GET['pts']==5 ){
  71. $wynik=mysql_query("UPDATE statystyki SET inteligencja=inteligencja+1, zloto=zloto-$cena1_inteligencja
  72. WHERE zloto>=$cena1_inteligencja AND id=$_SESSION[id] LIMIT 1");
  73. if (mysql_affected_rows()===1){
  74.  
  75. echo'Gratuluje! Zyskales 1 punkt inteligencji!<br>';
  76. }
  77. else{
  78. echo'Nie stac Cie na ten trening. Zarob troche zlota<br>';
  79.  
  80. }
  81. }
  82. if ($_GET['pts']==6 ){
  83. $wynik=mysql_query("UPDATE statystyki SET inteligencja=inteligencja+5, zloto=zloto-$cena5_inteligencja
  84. WHERE zloto>=$cena5_inteligencja AND id=$_SESSION[id] LIMIT 1");
  85. if (mysql_affected_rows()===1){
  86.  
  87. echo'Gratuluje! Zyskales 5 punktów inteligencji!<br>';
  88. }
  89. else{
  90. echo'Nie stac Cie na ten trening. Zarob troche zlota<br>';
  91.  
  92. }
  93. }
  94.  
  95. die();
  96. }
  97.  
  98.  
  99.  
  100. ?>
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. <br>
  109. witaj! którą umiejętność chcesz wyćwiczyć? pamiętaj, że im wyższy poziom tym droższy trening.<br><br>
  110.  
  111.  
  112. <button type="button" id="button-submit">Trenuj</button>1 pkt sily za <?=$cena1_sila;?> szt zlota <br>
  113.  
  114. <a href="index.php?action=trening&pts=2">Trenuj</a> 5 pkt sily za <?=$cena5_sila;?> szt zlota <br><hr>
  115. <a href="index.php?action=trening&pts=3" >Trenuj</a> 1 pkt szybkosci za <?=$cena1_szybkosc;?> szt zlota <br>
  116. <a href="index.php?action=trening&pts=4">Trenuj</a> 5 pkt szybkosci za <?=$cena5_szybkosc;?> szt zlota <br><hr>
  117. <a href="index.php?action=trening&pts=5">Trenuj</a> 1 pkt inteligencji za <?=$cena1_inteligencja;?> szt zlota <br>
  118. <a href="index.php?action=trening&pts=6">Trenuj</a> 5 pkt inteligencji za <?=$cena5_inteligencja;?> szt zlota <br><hr>
  119.  
  120.  
  121. <!-- dodanie jQuery do dokumentu -->
  122. <script type="text/javascript" src="jQuery.js"></script>
  123. <!-- Nasz kod java script: -->
  124. <script type="text/javascript">
  125. jQuery(document).ready(function() {
  126. $('#button-submit').click(function (e) {
  127. alert('Zaraz wykonam zapytanie AJAX');
  128. $.ajax({
  129. type: 'GET',
  130. url: 'trening.php',
  131. data: "pts=1",
  132. success: function(data){
  133. if (data != 'error')
  134. {
  135. alert('Wszystko ok.')
  136. }
  137. else
  138. {
  139. alert('Wystąpił błąd w zapisie. Skontaktuj się z administratorem.');
  140. }
  141. }
  142. });
  143. });
  144. </script>
  145.  
  146.  


Zobacz teraz dla 1 pkt siły i odpowiedz na pytania:

1. Czy w bazie się zupdatowało?
2. Czy wyskoczył alert "Zaraz wykonam zapytanie AJAX"?
3. Czy po nim wyskoczył alert "Wszystko ok"?
P4nch0
Wyskoczył błąd w linii 23.

  1. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  2. WHERE zloto>=$cena1_sila AND id=$_SESSION['id'] LIMIT 1");


Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /virtual/lifetime.cba.pl/trening.php on line 23


Podejrzewam, że chodzi o (id=$_SESSION['id']), gdy usunąłem apostrof i dałem samo id, strona sie otworzyła, ale kliknięcie buttonu nic nie wywołało, nie wykonał sie tez wpis do bazy.
Damonsson
Ok, to powiedz teraz, skąd wziąłeś to:

[JAVASCRIPT] pobierz, plaintext
  1. jQuery(document).ready(function() {
[JAVASCRIPT] pobierz, plaintext


?

Tak ma wyglądać JS, wklejałem Ci to X postów temu.

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. $('#button-submit').click(function (e) {
  3. alert('Zaraz wykonam zapytanie AJAX');
  4. $.ajax({
  5. type: 'GET',
  6. url: 'trening.php',
  7. data: "pts=1",
  8. success: function(data){
  9. if (data != 'error')
  10. {
  11. alert('Wszystko ok.')
  12. }
  13. else
  14. {
  15. alert('Wystąpił błąd w zapisie. Skontaktuj się z administratorem.');
  16. }
  17. }
  18. });
  19. });
  20. </script>
[JAVASCRIPT] pobierz, plaintext



A co do błędu w lini 23 to tak ma wyglądać zapytanie i linijka przed nim:
  1. $id = $_SESSION['id'];
  2. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  3. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1");
P4nch0
No ok, JS działa, wyswietla sie "zaraz wykonam AJAx.." a pozniej "wystapil blad w zapisie.." no i tak jak wygląda, wpis do bazy sie nie wykonał.

Kurcze, bardzo chciałbym to ogarnąć, dowiedzieć się jak poprawić ten kod php by był jak najbardziej optymalny i nauczyc się interakcji między php i JS.. To by mi bardzo pomogło później.. Dzięki za Twoją cierpliwość.
Damonsson
Ok, jedno mamy za sobą komunikacja JS<-> PHP działa.

To teraz popracujmy nad PHP, odpal ręcznie w przeglądarce link: trening.php?pts=1

i jaki otrzymujesz wynik?
P4nch0
Rozumiem chodziło o coś takiego?
"http://www.lifetime.cba.pl/trening.php?pts=1" ?

W tym przypadku wyskakuje "error"

gdy wkleję
"trening.php?pts=1"

Brak strony.
Damonsson
Tę część kodu zmień:

  1. if ($_GET['pts']==1 ){
  2. $id = $_SESSION['id'];
  3. var_dump("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  4. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1");
  5. echo '<br />'; echo '<br />'; echo '<br />';
  6. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  7. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1") or die(mysql_error());
  8.  
  9. echo'Gratuluje! Zyskales 1 punkt sily!<br>';
  10. }
  11. else{
  12. echo 'error';
  13. }
  14. }


Tak dokładnie http://www.lifetime.cba.pl/trening.php?pts=1

Co teraz pokazuje, po tej zmianie?
P4nch0
  1. string(87) "UPDATE statystyki SET sila=sila+1, zloto=zloto--20 WHERE zloto>=-20 AND id= LIMIT 1"
  2.  
  3.  
  4. No such file or directory


Takie coś dostałem. Ale niebardzo wiem co ta zmienna string 87 teraz pokazuje.
Damonsson
trening.php
  1. <?php
  2. mysql_connect('xxxxx','xxxx','xxxxx') or die ('blad polaczenia bazy danych');
  3. mysql_select_db('xxxx') or die('blad wyboru bazy danych');
  4. var_dump($_SESSION);
  5. $login = $_SESSION['login'];
  6. $gracz=mysql_query("SELECT users.*, statystyki.* FROM users, statystyki
  7. WHERE users.id=statystyki.id
  8. AND users.login='" . $login . "' LIMIT 1");
  9. $gracz=mysql_fetch_assoc($gracz);


Zmień początek pliku i pokaż co teraz się pokazuje.

87 to długość ciągu znaków. To jest zapytanie które idzie do MySQLa.
P4nch0
Taki wynik otrzymałem.

  1. array(0) { } error



I taki wpis gdy wszedłem w ogólne menu treningowe czyli
http://lifetime.cba.pl/index.php?action=trening

  1. array(2) { ["id"]=> string(1) "1" ["login"]=> string(6) "P4nch0" }
Damonsson
a po zamianie początku trening.php na:

  1. <?php
  2. var_dump($_SESSION);
  3. $login = $_SESSION['login'];
  4. $gracz=mysql_query("SELECT users.*, statystyki.* FROM users, statystyki
  5. WHERE users.id=statystyki.id
  6. AND users.login='" . $login . "' LIMIT 1");
  7. $gracz=mysql_fetch_assoc($gracz);

ale zostawiając to co ostatnio podałem
czyli to ma być:

  1. if ($_GET['pts']==1 ){
  2. $id = $_SESSION['id'];
  3. var_dump("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  4. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1");
  5. echo '<br />'; echo '<br />'; echo '<br />';
  6. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  7. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1") or die(mysql_error());
  8.  
  9. echo'Gratuluje! Zyskales 1 punkt sily!<br>';
  10. }
  11. else{
  12. echo 'error';
  13. }
  14. }


http://lifetime.cba.pl/index.php?action=trening&pts=1

i co teraz się pokazuje po wejściu na powyższy link?


EDIT:
Powinno wszystko działać, więc JavaScript teraz tylko podmieniasz na:


[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. $('#button-submit').click(function (e) {
  3. alert('Zaraz wykonam zapytanie AJAX');
  4. $.ajax({
  5. type: 'GET',
  6. url: 'trening.php',
  7. data:{action:'trening', pts: 1},
  8. success: function(data){
  9. if (data != 'error')
  10. {
  11. alert('Wszystko ok.')
  12. }
  13. else
  14. {
  15. alert('Wystąpił błąd w zapisie. Skontaktuj się z administratorem.');
  16. }
  17. }
  18. });
  19. });
  20. </script>
[JAVASCRIPT] pobierz, plaintext


i wywalasz wszystkie var_dump i echo "<br />" z tamtego pliku.
P4nch0
Jest już coraz lepiej ;p

Rozumiem tak ma to wyglądac?

  1. <?php
  2. $login = $_SESSION['login'];
  3. $gracz=mysql_query("SELECT users.*, statystyki.* FROM users, statystyki
  4. WHERE users.id=statystyki.id
  5. AND users.login='" . $login . "' LIMIT 1");
  6. $gracz=mysql_fetch_assoc($gracz);
  7.  
  8. $cena1_sila=($gracz['sila']-4)*5;
  9. $cena5_sila=($cena1_sila+10)*5;
  10.  
  11. $cena1_inteligencja=($gracz['inteligencja']-4)*5;
  12. $cena5_inteligencja=($cena1_inteligencja+10)*5;
  13.  
  14.  
  15. $cena1_szybkosc=($gracz['szybkosc']-4)*5;
  16. $cena5_szybkosc=($cena1_szybkosc+10)*5 ;
  17.  
  18.  
  19. if ($_GET['pts'] !=''){
  20. if ($_GET['pts']==1 ){
  21. $id = $_SESSION['id'];
  22. ("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  23. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1");
  24. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  25. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1") or die(mysql_error());
  26. if (mysql_affected_rows()===1){
  27.  
  28. echo'Gratuluje! Zyskales 1 punkt sily!<br>';
  29. }
  30. else{
  31. echo 'error';
  32. }
  33. }



Jeśli tak to teraz wyskakuje allert"ze zaraz wykona Java script" a pozniej wykonuje się skrypt php i wpis do bazy danych smile.gif nie ma jeszcze allertu o poprawnosci.
Damonsson
Tak powinno być:
  1. <?php
  2. $login = $_SESSION['login'];
  3. $gracz=mysql_query("SELECT users.*, statystyki.* FROM users, statystyki
  4. WHERE users.id=statystyki.id
  5. AND users.login='" . $login . "' LIMIT 1");
  6. $gracz=mysql_fetch_assoc($gracz);
  7.  
  8. $cena1_sila=($gracz['sila']-4)*5;
  9. $cena5_sila=($cena1_sila+10)*5;
  10.  
  11. $cena1_inteligencja=($gracz['inteligencja']-4)*5;
  12. $cena5_inteligencja=($cena1_inteligencja+10)*5;
  13.  
  14.  
  15. $cena1_szybkosc=($gracz['szybkosc']-4)*5;
  16. $cena5_szybkosc=($cena1_szybkosc+10)*5 ;
  17.  
  18.  
  19. if ($_GET['pts'] !=''){
  20. if ($_GET['pts']==1 ){
  21. $id = $_SESSION['id'];
  22. mysql_query("UPDATE statystyki SET sila=sila+1, zloto=zloto-$cena1_sila
  23. WHERE zloto>=$cena1_sila AND id=$id LIMIT 1") or die(mysql_error());
  24. if (mysql_affected_rows()===1){
  25.  
  26. echo'Gratuluje! Zyskales 1 punkt sily!<br>';
  27. }
  28. else{
  29. echo 'error';
  30. }
  31. }


A w JavaScript tak, pomyliłem się ja w poprzednim poście:

[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. $('#button-submit').click(function (e) {
  3. alert('Zaraz wykonam zapytanie AJAX');
  4. $.ajax({
  5. type: 'GET',
  6. url: 'index.php',
  7. data:{action:'trening', pts: 1},
  8. success: function(data){
  9. if (data != 'error')
  10. {
  11. alert('Wszystko ok.')
  12. }
  13. else
  14. {
  15. alert('Wystąpił błąd w zapisie. Skontaktuj się z administratorem.');
  16. }
  17. }
  18. });
  19. });
  20. </script>
[JAVASCRIPT] pobierz, plaintext
P4nch0
No nareszcie wszystko chodzi! Dzięki wielkie kolego za tyle poświęconego czasu! Naprawdę nie spotkałem jeszcze takiej życzliwości jak na tym forum.

A czy mógłbyś mi przybliżyć jakie błędy są popełnione w tak napisanym kodzie? Podczas kursu autor zakładał, że nie będzie to optymalny kod dlatego chciałbym się dowiedzieć czegoś więcej, gdzie były błędy, jak pisac/nie pisać żeby było dobrze, no i jak mogę zedytować kolejne pliki by współpracowały z JS i nie było takich błędów jak tutaj, to będą cenne wskazówki.

Jeśli masz woną chwilę, mogę wstawić inny plik np odpowiedzialny za atakowanie graczy i jakbyś zerknął może by CI się rzuciły w oczy jakies rażące błędy wg których nie powinno się pisać. Póki co bardzo dzięuję i daję kolejne "Wieeelkiee pomógł"!
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.