Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Opóźniona zmiana danych?
Vasquez21
post
Post #1





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 2.11.2004
Skąd: Jaworzno

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


Witam wszystkich czytających.

Tytułem wstępu... od mniej więcej 4 lat używałem bez problemu pewnego skryptu w swoim sklepiku do zwiększania i zmniejszania liczby produktów.
Ostatnio okazało się, że skrypt zachowuje się "dziwnie" na nowym laptopie.

O samym skrypcie należy chyba tylko powiedzieć, że nowy produkt dodaje się na zasadzie formularza, po zaakceptowaniu produkt pojawia się w bazie i liczbę produktów można zmieniać poprzez dwa przyciski (+ i -), które analogicznie zwiększają i zmniejszają liczbę produktów w bazie dzięki wykorzystaniu technologii ajax (po kliknięciu liczba zmniejsza/zwiększa się o 1).
W pewnym momencie jak dodane było już 5 nowych produktów i w sumie przez przypadek sprawdziliśmy liczbę produktów jednego z nowo wprowadzonych wyświetliło jakąś dziwną liczbę, jeśli dobrze pamiętam 4 (zamiast wprowadzonych 2). Co jednak dziwniejsza sprawdzając pozostałe wpisy okazało się, że pozostałe wpisy również mają dziwne wartości jak np. 3, -1, -2 itp. Dodatkowo jedna zmiana np. dodanie poprzez przycisk produktu powodowało, że w innych produktach również zachodziły zmiany, lecz zawsze działo się to po jakimś czasie (z reguły po kilkudziesięciu sekundach). Wszystko obserwowałem z drugiego komputera z poziomy mysqladmina, żeby przypadkiem nie generować żadnego ruchu na stronie, chciałem się upewnić, że nie jest to spowodowane przejściami/odświeżeniem strony czy czymś takim.

Zrobiliśmy pseudo eksperyment. Wyzerowaliśmy jeden z produktów bezpośrednio w bazie. Po czym dodaliśmy 1 produkt, a następnie po kilkunastu sekundach o kolejne 5. W sumie do 6. Następnie obserwowałem tylko zachowanie bazy na drugim komputerze odświeżając zawartość tego produktu. Przez jakiś czas się nic nie działo, po czym produkt wskoczył na 7... a następnie po kilkunastu sekundach na 12. Wygląda to tak jakby poza tym zwiększeniem które miało miejsce bezpośrednio po kliknięciu było wysyłane jakieś drugie opóźnione żądanie... które odpala się po jakimś czasie.

Przez jakiś czas myślałem, że coś się dzieje z bazą, ale przetestowałem to na swoim drugim komputerku i wszystko działa sprawnie, tak samo zmiany bezpośrednio z poziomy mysqladmina nie powodują, żadnych dziwnych zachowań.

Na nowym laptopie zainstalowany jest Windows 7.
Sprawdzaliśmy zachowanie na przeglądarkach IE, Firefox i Chrome. Na wszystkich to samo.

Będę bardzo wdzięczny za wszystkie uwagi, sugestie i podpowiedzi... Bo naprawdę nie bardzo wiem jak sobie poradzić z tym problemem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
szczeku
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 29.08.2010

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


z twojego opisu wynika, że to coś z Ajax'em.

ważne pytanie to czy za każdym razem tak się dzieje?

bez kodu ciężko coś stwierdzić, umieść może przynajmniej sam kod ajax odpowiedzialny za łączenie się z PHP( chyba zę jakoś inaczej to robisz ), no i moze troche php który zwiększa/zmiejsza ilość produktów w bazie.
Go to the top of the page
+Quote Post
Vasquez21
post
Post #3





Grupa: Zarejestrowani
Postów: 213
Pomógł: 0
Dołączył: 2.11.2004
Skąd: Jaworzno

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


dzięki za zainteresowanie.

fragment kodu w php odpowiedzialny za dodawanie i usuwanie:
  1. <div class="incDec">
  2. <div class="leftHint"><a href="#" onclick="addProduct(<?= $produkt['ID_produktu']; ?>); return false" ><img src="images/add.png" border="0" /></a></div>
  3. <div class="txtHint" id="txtHint<?= $produkt['ID_produktu']; ?>"><?= $produkt['Liczba_sztuk'];?></div>
  4. <div class="rightHint"><a href="#" onclick="rmvProduct(<?= $produkt['ID_produktu']; ?>); return false" ><img src="images/delete.png" border="0" /></a></div>
  5. </div>

fragmenty pliczku ajax...
  1. var xmlHttp
  2. var idWybranego
  3. function addProduct(idproduktu)
  4. {
  5. xmlHttp=GetXmlHttpObject()
  6. if (xmlHttp==null)
  7. {
  8. alert ("Browser does not support HTTP Request")
  9. return
  10. }
  11. idWybranego="txtHint"+idproduktu
  12. var url="ajax/ajaxAddProduct.php"
  13. url=url+"?id_p="+idproduktu
  14. url=url+"&sid="+Math.random()
  15. xmlHttp.onreadystatechange=stateChanged
  16. xmlHttp.open("GET",url,true)
  17. xmlHttp.send(null)
  18. }
  19.  
  20. function rmvProduct(idproduktu)
  21. {
  22. xmlHttp=GetXmlHttpObject()
  23. if (xmlHttp==null)
  24. {
  25. alert ("Browser does not support HTTP Request")
  26. return
  27. }
  28. idWybranego="txtHint"+idproduktu
  29. var url="ajax/ajaxRmvProduct.php"
  30. url=url+"?id_p="+idproduktu
  31. url=url+"&sid="+Math.random()
  32. xmlHttp.onreadystatechange=stateChanged
  33. xmlHttp.open("GET",url,true)
  34. xmlHttp.send(null)
  35. }
  36.  
  37. function stateChanged()
  38. {
  39. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  40. {
  41. document.getElementById(idWybranego).innerHTML=xmlHttp.responseText
  42. }
  43. }
  44.  
  45. function GetXmlHttpObject()
  46. {
  47. var xmlHttp=null;
  48. try
  49. {
  50. // Firefox, Opera 8.0+, Safari
  51. xmlHttp=new XMLHttpRequest();
  52. }
  53. catch (e)
  54. {
  55. //Internet Explorer
  56. try
  57. {
  58. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  59. }
  60. catch (e)
  61. {
  62. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  63. }
  64. }
  65. return xmlHttp;
  66. }


i na koniec pliczek ajaxAddProduct.php wywoływany z ajaxa:
  1. <?php include "../../sprses.php"; ?>
  2. <?php include "../../naglowek.php"; ?>
  3. <?php include "../../connect.php"; ?>
  4.  
  5. <?php
  6. if (isset($_GET["id_p"]))
  7. {
  8. $produkt = mysql_fetch_array(mysql_query("SELECT Liczba_sztuk FROM Produkty WHERE ID_produktu = '".$_GET["id_p"]."' ")) or die("Blad");
  9. $nowaLiczba = $produkt['Liczba_sztuk'] + 1;
  10. mysql_query("UPDATE Produkty SET Liczba_sztuk = '".$nowaLiczba."' WHERE ID_produktu = '".$_GET["id_p"]."' ") or die("Blad2");
  11. echo $nowaLiczba;
  12. }
  13. ?>


pliczek do usuwania jest analogiczny
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Pozostaje jeszcze jedno rozwiązanie... Monitorujesz ruch między przeglądarką, a serwerami. Przykładowe możliwości:

a) TamperData w Fx,
(IMG:style_emoticons/default/cool.gif) serwer proxy monitorujący żądania między maszynami ( WebScarab, Burp Suite ) - przydaje się także do testów (IMG:style_emoticons/default/wink.gif)

Zwłaszcza to drugie rozwiązanie jest ciekawe. Dowiesz się ciekawych rzeczy o aplikacji i ewentualnych furtkach bezpieczeństwa.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 12:31