Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] Jak bez przeładowania obliczyć działanie i wyświetlić wynik?
Forum PHP.pl > Forum > Przedszkole
in5ane
Cześć. Mam pytanko. Otóż chciałbym się dowiedzieć, jak bez przeładowania obliczyć działanie i wyświetlić wynik. Mianowicie mam jedno pole z ilością (np. ktoś zaznaczy wpisze 2) oraz drugie pole z ceną za towar (np. ktoś wpisze 100 zł) to chciałbym, aby automatycznie w 3 polu obok wyświetliła się cena łączna (czyli np. 2 * 100 zł = 200 zł). Proszę o jakieś pomoce oraz podpowiedzi. Z góry dziękuje.
thek
Może proste obliczenie przy użyciu JS winksmiley.jpg Chyba najlepiej obsługując zdarzenie onchange lub onblur owych interesujących Cię pól.
in5ane
Masz w sumie rację, tak też zrobiłem i działa.

Mam jeszcze jeden z tym problem.

Oto mój kod:
  1. <script type="text/javascript">
  2. function licz(aform) {
  3. aform.cena_l.value = parseInt(aform.ilosc.value) * parseInt(aform.cena.value);
  4. }
  5. </script>
  6. <?php
  7. $query = mysql_query("SELECT * FROM magazyn ORDER BY tytul ASC");
  8. $i = 1;
  9. while ($row = mysql_fetch_array($query)) {
  10. echo '
  11. <tr>
  12. <td style="width: 5%; padding: 2px;">
  13. '.$i.'.
  14. </td>
  15. <td style="width: 50%; padding: 2px;">
  16. '.$row['tytul'].'
  17. </td>
  18. <td style="width: 20%; padding: 2px;">
  19. <form method="post" action="#" name="obl'.$i.'">
  20. <input type="hidden" name="sprzedano" value="ok" />
  21. <input type="hidden" name="id" value="'.$row['id'].'" />
  22. <input type="text" name="ilosc" size="3" onChange="licz(obl'.$i.');" /> SZTUK
  23. </td>
  24. <td style="padding: 2px;">
  25. <input type="text" name="cena" size="3" onChange="licz(obl'.$i.');" /> ZŁ.
  26. </td>
  27. <td style="padding: 2px;">
  28. <input type="text" name="cena_l" disabled="disabled" size="3" /> ZŁ.
  29. </form>
  30. </td>
  31. </tr>
  32. ';
  33. $i++;
  34. }
  35. echo '
  36. <table style="width: 100%; font-size: 16px;">
  37. <tr>
  38. <td style="width: 53%; padding: 2px;"></td>
  39. <td style="padding: 2px;">
  40. Cena końcowa
  41. </td>
  42. <td style="padding: 2px;">
  43. <form method="post" action="index.php">
  44. <input type="text" name="cena_k" /> ZŁ.
  45. </td>
  46. </tr>
  47. <tr>
  48. <td style="width: 53%; padding: 2px;"></td>
  49. <td style="padding: 2px;"></td>
  50. <td style="padding: 2px;">
  51. <input type="submit" value="ZATWIERDŹ" />
  52. </form>
  53. </td>
  54. </tr>
  55. </table>
  56. ';
  57. ?>


Wszystko wygląda tak:

Zliczanie sztuki * cena wychodzi ładnie cena łączna, ale mam problem z ceną końcową. Po prostu kombinuję i nie wiem jak zrobić, żeby zliczało ceny łączne. Problem jest też taki, że tych produktów może być nawet 10. Proszę o pomoc smile.gif


Poradziłem sobie ze wszystkim, ale przepisałem JavaScript na nowo i całkowicie inaczej mam.
mortus
Witam. Przemyślałbym raczej coś w tym stylu:
  1. <html>
  2. <head>
  3. <meta name="content-type" content="text/html; charset=UTF-8" />
  4. <script type="text/javascript">
  5. function aktualizujCeneCalkowita() {
  6. var ceny_towarow = document.getElementsByClassName('ct');
  7. var cena_calkowita = 0;
  8. for(i = 0; i < ceny_towarow.length; i++) {
  9. cena_calkowita += parseInt(ceny_towarow[i].value);
  10. }
  11. document.getElementById('cc').value = cena_calkowita;
  12. }
  13. function aktualizujCeneTowaru(id_towaru) {
  14. var liczba_sztuk = parseInt(document.getElementById('ls_'+id_towaru).value);
  15. var cena_za_sztuke = parseInt(document.getElementById('czs_'+id_towaru).value);
  16. var cena_towaru = liczba_sztuk * cena_za_sztuke;
  17. document.getElementById('ct_'+id_towaru).value = cena_towaru;
  18. aktualizujCeneCalkowita();
  19. }
  20. </script>
  21. </head>
  22. <body>
  23. <form name="magazyn" action="#" method="post">
  24. <input type="hidden" name="sprzedano" value="ok" /><br/>
  25. <?php
  26. // nawiązanie połączenia za bazą danych
  27. $zapytanie = "SELECT * FROM magazyn ORDER BY tytul ASC;";
  28. $wyniki = mysql_query($zapytanie);
  29. while ($towar = mysql_fetch_array($wyniki, MYSQL_ASSOC)) {
  30. ?>
  31. <div class="towar">
  32. <input type="hidden" name="id_towaru" value="<?php echo $towar['id']; ?>" /><br/>
  33. <!-- ls_$id - liczba sztuk towaru o danym $id -->
  34. <input type="text" name="ls_<?php echo $towar['id']; ?>" id="ls_<?php echo $towar['id']; ?>" value="0" onchange="aktualizujCeneTowaru(<?php echo $towar['id']; ?>);"/><br/>
  35. <!-- czs_$id - cena za sztukę towaru o danym $id -->
  36. <input type="text" name="czs_<?php echo $towar['id']; ?>" id="czs_<?php echo $towar['id']; ?>" value="0" onchange="aktualizujCeneTowaru(<?php echo $towar['id']; ?>);"/><br/>
  37. <!-- ct_$id - cena wszystkich sztuk towaru o danym $id -->
  38. <input type="text" name="ct_<?php echo $towar['id']; ?>" id="ct_<?php echo $towar['id']; ?>" class="ct" value="0" /><br />
  39. </div>
  40. <?php
  41. }
  42. ?>
  43. <!-- cc - cena całkowita, czyli cena wszystkich towarów w danej ilości -->
  44. <input type="text" name="cc" id="cc" value="" /><br />
  45. <input type="submit" name="potwierdzenie" value="ZATWIERDŹ" />
  46. </form>
  47. </body>
  48. </html>
Cechą charakterystyczną jest jeden formularz. Wartości pól zmieniane są na podstawie identyfikatora towaru dodanego do identyfikatora (id) każdego pola. Pisałem szybko i bez zbędnego formatowania, bez pobierania danych domyślnych itp., ale myślę, że to już nie problem. Zastanowiłbym się nad użyciem jakiegoś frameworka JavaScript (np. jQuery), bo to zdecydowanie ułatwi pracę z JS (można wtedy zmodyfikować i formularz, i sam skrypt JS - będzie mniej kodu). Oczywiście można samemu ze skryptem kombinować, ale skoro ktoś już coś takiego wymyślił, to po co się męczyć...
Pozdrawiam
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.