Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Ujmowanie i Dodawanie 2x Większej wartości niż powinno być.
Forum PHP.pl > Forum > Przedszkole
Giluś
Cześć, sam już nie wiem dlaczego tak mi się dzieje mam taki kod:

  1.  
  2. <?php
  3. if(isset($_POST['ok'])) {
  4. if ($userdata['portfel'] >= $_POST['option']) // Sprawdz czy są pkt na koncie
  5. {
  6. $czas = $_POST['option'] * 86400;
  7. $opcja = $_POST['option'];
  8. if ($userdata['vip'] > time()) {
  9. // Istnieje już VIP i przedłużenie jest
  10. mysql_query("update fusiond5dvP_users set portfel = portfel - ".$opcja.", vip = vip + ".$czas." where user_id = ".$userdata['user_id']);
  11. $txt = "Zakupiono przedłużenie konta VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  12. }
  13. else {
  14. // Pierwszy raz VIP
  15. mysql_query("update fusiond5dvP_users set portfel = portfel - ".$opcja.", vip = ".(time() + $czas)." where user_id = ".$userdata['user_id']);
  16. $txt = "Zakupione konto VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  17. }
  18. }
  19. else {$txt = "Nie posiadasz wystarczającej ilości pkt.";}
  20. }
  21. echo "<h1>".$txt."</h1>";
  22. ?>
  23. <p>Wybierz odpowiednią ofertę dla siebie: <br /><b>Posiadasz:
  24. <?php
  25. echo "".$userdata['portfel']."";
  26. ?>
  27. punktów</b></p>
  28.  
  29. <form method="post">
  30. <input type="radio" name="option" value="1"> 24h - 1pkt<br>
  31. <input type="radio" name="option" checked="" value="7"> 1 tydzień - 7 pkt<br>
  32. <input type="radio" name="option" value="14"> 2 tygodnie - 14 pkt<br>
  33. <input type="radio" name="option" value="30"> 1 Miesiąc - 30 pkt<br>
  34. <br>
  35. <input type="submit" name="ok" value="Gotowe!">
  36. </form>
  37.  
  38.  
  39. <?php
  40. if($userdata['vip'] > time()){
  41. $pozostalo = $userdata['vip'] - time();
  42. echo "<script type='text/javascript'>
  43. function liczCzas(ile) {
  44. dni = Math.floor(ile / 86400);
  45. godzin = Math.floor((ile - dni * 86400)/ 3600);
  46. minut = Math.floor((ile - dni * 86400 - godzin * 3600) / 60);
  47. sekund = ile - dni * 86400 - minut * 60 - godzin * 3600;
  48. if (godzin < 10){ godzin = '0'+ godzin; }
  49. if (minut < 10){ minut = '0' + minut; }
  50. if (sekund < 10){ sekund = '0' + sekund; }
  51. if (ile > 0) {
  52. ile--;
  53. document.getElementById('zegar').innerHTML = dni + ' dni ' +godzin + ':' + minut + ':' + sekund;
  54. setTimeout('liczCzas('+ile+')', 1000);
  55. } else {document.getElementById('zegar').innerHTML = '[koniec]';}}</script>
  56. Do końca okresu VIP pozostało: <b><span id='zegar'></span></b><script type='text/javascript'>liczCzas(".$pozostalo.")</script> ";}
  57. ?>



Powinno odejmować tyle pkt co jest input value oraz dodawać czas również tyle co jest input value, no ale problem jest taki wyświetla się że pobrało niby np.: 1 pkt i dodało 1 dzień, ale w MySQL odejmuję 2x więcej pkt oraz jeśli to 1x VIP czyli else warunku: if ($userdata['vip'] > time()) {} to normalnie wyświetla się w skrypcie do liczenia, że to jest 24h, ale gdy już przedłużam VIP czyli ten warunek if ($userdata['vip'] > time()) {} to robi 2x więcej czasu oraz tak jak wcześniej wspomniałem 2x więcej pkt pobiera..

Gdzie jest błąd bo już sam nie mam pojęcia...

Pozdrawiam i z góry bardzo dziękuje smile.gif



Edit.:
Gdy daję aby zwróciło tablicę $_POST to wyświetla tak jak powinno option, wiec coś to musi być w php.., ale ja tam nie widzę nic dziwnego aby ujmowało 2x więcej pkt.. oraz 2x więcej dodawało czasu w przedłużeniu vipa..
Sephirus
Linijka #13 - masz złą konstrukcję klamr {} - przyjrzyj się temu...
Giluś
Nie wiem co masz dokładnie na myśli, ale spróbowałem wyrzucić całkowicie klamry z else - nic nie pomogło, dodać w mysql przed końcowym nawiasem ."" - też nie pomogło..

Dzięki za odpowiedz, może o czymś innym mówiłeś ?smile.gif.


Edit:
Zrobiłem test na takim kodzie:

  1. <?php
  2. if(isset($_POST['ok'])) {
  3. if ($userdata['portfel'] >= $_POST['option']) // Sprawdz czy są pkt na koncie
  4. {
  5. $czas = $_POST['option'] * 86400;
  6. $opcja = $_POST['option'];
  7. if ($userdata['vip'] > time()) {
  8. mysql_query("update fusiond5dvP_users set portfel = portfel - ".$opcja.", vip = vip + ".$czas." where user_id = ".$userdata['user_id']."");
  9. $txt = "Zakupiono przedłużenie konta VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  10. }
  11. }
  12. else {$txt = "Nie posiadasz wystarczającej ilości pkt.";}
  13. }
  14. echo "<h1>".$txt."</h1>";
  15. ?>
  16. <p>Wybierz odpowiednią ofertę dla siebie: <br /><b>Posiadasz:
  17. <?php
  18. echo "".$userdata['portfel']."";
  19. ?>
  20. punktów</b></p>
  21.  
  22. <form method="post">
  23. <input type="radio" name="option" value="1"> 24h - 1pkt<br>
  24. <input type="radio" name="option" checked="" value="7"> 1 tydzień - 7 pkt<br>
  25. <input type="radio" name="option" value="14"> 2 tygodnie - 14 pkt<br>
  26. <input type="radio" name="option" value="30"> 1 Miesiąc - 30 pkt<br>
  27. <br>
  28. <input type="submit" name="ok" value="Gotowe!">
  29. </form>
  30.  
  31.  
  32. <?php
  33. if($userdata['vip'] > time()){
  34. $pozostalo = $userdata['vip'] - time();
  35. echo "<script type='text/javascript'>
  36. function liczCzas(ile) {
  37. dni = Math.floor(ile / 86400);
  38. godzin = Math.floor((ile - dni * 86400)/ 3600);
  39. minut = Math.floor((ile - dni * 86400 - godzin * 3600) / 60);
  40. sekund = ile - dni * 86400 - minut * 60 - godzin * 3600;
  41. if (godzin < 10){ godzin = '0'+ godzin; }
  42. if (minut < 10){ minut = '0' + minut; }
  43. if (sekund < 10){ sekund = '0' + sekund; }
  44. if (ile > 0) {
  45. ile--;
  46. document.getElementById('zegar').innerHTML = dni + ' dni ' +godzin + ':' + minut + ':' + sekund;
  47. setTimeout('liczCzas('+ile+')', 1000);
  48. } else {document.getElementById('zegar').innerHTML = '[koniec]';}}</script>
  49. Do końca okresu VIP pozostało: <b><span id='zegar'></span></b><script type='text/javascript'>liczCzas(".$pozostalo.")</script> ";}
  50. ?>


Dalej to samo: 2x Więcej PKT pobiera oraz 2x Więcej czasu dodaje.
jaslanin
sprawdź w logach serwera czy Twoja przeglądarka nie przesyła dwa razy formularza albo Ty nie klikasz w formularz dwa razy

np. w access logach serwera, albo zapisuj wywołania do jakiegoś pliku z logami

dodatkowo ten kod nie jest zabezpieczony przed SQL INJECTION
Giluś
Gdybym 2x Naciskał lub moja przeglądarka 2x przesyła formularz to mając 1 pkt nie kupił bym pakietu za 1pkt bo przy 1 odświeżaniu bo kupił 24h a przy drugim już by warunek zadziałał...

Wiem, że nie jest bezpieczny bo jeszcze nie dodawałem żadnych zabezpieczeń.
peter13135
1. Napisz swoje wypowiedzi stosjując jakieś kropki i przecinki, to może lepiej Cię zrozumiemy.
2. Zrób wcięcia w swoim kodzie, to może lepiej zrozumiemy Twój kod
Giluś
Poradziłem sobie sam, nie wiem czemu tak się działo zrobiłem taki kod:

  1. if ($userdata['vip'] > time()) {
  2. $kasvip = $userdata['portfel'] - $opcja;
  3. $czasvip = $userdata['vip'] + $czas;
  4. mysql_query("update fusiond5dvP_users set portfel = ".$kasvip.", vip = ".$czasvip." where user_id = ".$userdata['user_id']."");
  5. $txt = "Zakupiono przedłużenie konta VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  6. header("location: #");
  7. }
  8. else {
  9. // Pierwszy raz VIP
  10. $kasavip = $userdata['portfel'] - $opcja;
  11. $czasvipp = time() + $czas;
  12. mysql_query("update fusiond5dvP_users set portfel = ".$kasavip.", vip = ".$czasvipp." where user_id = ".$userdata['user_id']."");
  13. $txt = "Zakupione konto VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  14. header("location: #");
  15. }


Zamiast:
  1. if ($userdata['vip'] > time()) {
  2. // Istnieje już VIP i przedłużenie jest
  3. mysql_query("update fusiond5dvP_users set portfel = portfel - ".$opcja.", vip = vip + ".$czas." where user_id = ".$userdata['user_id']);
  4. $txt = "Zakupiono przedłużenie konta VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  5. }
  6. else {
  7. // Pierwszy raz VIP
  8. mysql_query("update fusiond5dvP_users set portfel = portfel - ".$opcja.", vip = ".(time() + $czas)." where user_id = ".$userdata['user_id']);
  9. $txt = "Zakupione konto VIP na czas: ".$opcja." dni w cenie: ".$opcja." pkt.";
  10. }



I Niby 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.