Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Checkbox i suma wartości checkboxa, php + mysql
hunter777
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


mam problem ze rozwiązaniem zagadnienia z wartością checkboxow, bez problemu mam działający skrypt usuwający dane za pomocą chceckboxów ale potrzebuję także zrobić sumę wartości checboxów, może ktoś ma pomysł jak tu zrobić sumę wartości tego pola z mysql np po tabeli wartość
np
Numer Produkt Wartość Usuń[Checkbox]
1 Jabłka 2 []
2 Gruszki 3 []

i po zaznaczeniu dwóch checkboxów okno Zaraz usuniesz 5 produktów, Potwierdź

  1. <script>
  2. $(document).ready(function(){
  3.  
  4. $('#btn_delete').click(function(){
  5.  
  6. if(confirm("Are you sure you want to delete this?"))
  7. {
  8. var id = [];
  9.  
  10. $(':checkbox:checked').each(function(i){
  11. id[i] = $(this).val();
  12. });
  13.  
  14. if(id.length === 0) //tell you if the array is empty
  15. {
  16. alert("Please Select atleast one checkbox");
  17. }
  18. else
  19. {
  20. $.ajax({
  21. url:'delete.php',
  22. method:'POST',
  23. data:{id:id},
  24. success:function()
  25. {
  26. for(var i=0; i<id.length; i++)
  27. {
  28. $('tr#'+id[i]+'').css('background-color', '#ccc');
  29. $('tr#'+id[i]+'').fadeOut('slow');
  30. }
  31. }
  32.  
  33. });
  34. }
  35.  
  36. }
  37. else
  38. {
  39. return false;
  40. }
  41. });
  42.  
  43. });
  44. </script>
  45.  


Ten post edytował hunter777 18.09.2017, 12:48:05
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Skoro w pętli zapisujesz wartości zaznaczonych checkboxów, to możesz je od razu sumować.
Albo w ten sposób: https://developer.mozilla.org/pl/docs/Web/J...ty/Array/Reduce
Go to the top of the page
+Quote Post
hunter777
post
Post #3





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


niestety też miejsce w skrypcie gdzie pobrać wartość z tablicy i jak jest dla mnie problemem, ponieważ mam moment gdy pyta mnie czy potwierdzam usunięcie i tutaj jak mamy potwierdzenie już nie ma znaczenia sumowanie tylko usuwa dane, chciałbym by to było wcześniej gdy mam potwierdź usunięcie tych wartości.
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


To przenieś te obliczenia przed ifa
Go to the top of the page
+Quote Post
hunter777
post
Post #5





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


na razie odpuściłem usuwanie - spróbuję to później połączyć - zająłem się sumą i udało mi się zrobić sumowanie danych wpisanych ręcznie pod parametr val

  1. <td><?php echo $row["wartosc"]; ?> <input type="checkbox" class="check_list" val="wartosc_recznie"/></td>


ale nie potrafię pobrać wartości z pola z bazy - po prostu nie sumuje mi warosci z mysql a próbuję to robić po prostu tak:

  1. <td><?php echo $row["kwota_netto"]; ?> <input type="checkbox" class="check_list" val="$row["kwota_netto"]"/></td>


a oto skrypt sumujący:

  1. <script>
  2. $(document).ready(function(){
  3. update();
  4. });
  5. $('input[type=checkbox]').click(function(){
  6. update();
  7. })
  8. function update(){
  9. var sum = 0;
  10. $('.check_list').each(function () {
  11. if (this.checked) {
  12. sum += Number($(this).attr("val"));
  13. }
  14. });
  15. $("#sum").html(sum);
  16. var checkCount = $(".check_list:checked").length;
  17. $("#avg").html(parseFloat(sum/checkCount).toFixed(2));
  18. }
  19. </script>


Ten post edytował hunter777 20.09.2017, 09:03:47
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie dostrzegasz nic nieprawidłowego w Twoim drugim podanym fragmencie?
Go to the top of the page
+Quote Post
hunter777
post
Post #7





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


poprawiłem te nawiasy jeśli chodziło o to, pisałem to na szybko, tutaj wklejam skopiowane z kodu

  1.  
  2. <td><?php echo $row["kwota_netto"]; ?> <input type="checkbox" class="check_list" val="$row["kwota_netto"]"/></td>
  3.  
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Podejrzyj w źródle strony jaki jest efekt.
Go to the top of the page
+Quote Post
hunter777
post
Post #9





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


dziekuję - działa - zabrakło echo...

Ten post edytował hunter777 20.09.2017, 09:43:44
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Tak, wiem jaki jest efekt, a Ty nadal nie widzisz błędu w tym fragmencie kodu.
Go to the top of the page
+Quote Post
hunter777
post
Post #11





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


wyedytowałem ten stary post, znalazłem błąd, dziękuję za pomoc! teraz zabieram się za próbę usunięcia zaznaczonych rekordów czyli spróbuję połączyć te dwa skrypty



niestety skrypt z pierwszego wątku nie chce teraz zmienić flagi zgodnie z plikiem delete.php, po kliknięciu ze skryptu są ostrzeżenia ale nic się nie zmienia niestety.

  1.  
  2. require('db.php');
  3. $id=$_REQUEST['id'];
  4. $query = "UPDATE `new_record` SET `rozliczenia` = '0' WHERE id=$id";
  5. $result = mysqli_query($con,$query) or die ( mysqli_error());
  6.  




mam także drugi problem, chciałbym wyświetlać tylko rekordy, które mają flagę 1 i gdy poniżej dam do "ifa" nie działa to niestety... czy to dobre miejsce na ten warunek?


  1. $query2 = "SELECT * FROM new_record WHERE rozliczenia = 0";
  2. $rozlicz = mysqli_query($con, $query2);
  3.  
  4. <body>
  5. <div class="container">
  6. <br />
  7. <h3 align="center">Lista</h3><br />
  8. <?php
  9.  
  10. if((mysqli_num_rows($result) > 0) && ($rozlicz=1))
  11.  
  12. {
  13. ?>
  14. <div class="table-responsive">
  15. <table class="table table-bordered">
  16. <tr>
  17. <th>Customer Name</th>
  18. <th>Customer Address</th>
  19. <th>Delete</th>
  20. </tr>
  21. <?php
  22. while($row = mysqli_fetch_array($result))
  23. {
  24. ?>
  25. <tr id="<?php echo $row["id"]; ?>" class="check_list" val="#">
  26.  
  27. <td><?php echo $row["nazwa"]; ?> </td>
  28. <td><?php echo $row["kwota_netto"]; ?> </td>
  29. <td><input type="checkbox" name="kwota_netto" class="check_list" val="<?php echo $row["kwota_netto"]; ?>"/></td>
  30. </tr>
  31. <?php
  32. }
  33. ?>
  34. <tr><td style="text-align: right">Suma</td><td><span id="sum"></span></td>
  35.  
  36. </table>
  37. </div>
  38. <?php
  39. }
  40. ?>
  41. <div align="center">
  42. <button type="button" name="btn_delete" id="btn_delete" class="btn btn-success">Delete</button>
  43. </div>
  44. </body>


zmieniłem to delete.php na

  1. <?php
  2.  
  3.  
  4. $connect = mysqli_connect("localhost", "root", "password", "new_record");
  5.  
  6. if(isset($_POST["id"]))
  7. {
  8. foreach($_POST["id"] as $id)
  9. {
  10. $query = "UPDATE `new_record` SET `rozliczenia` = '0' WHERE id= '".$id."'";
  11. mysqli_query($connect, $query);
  12. }
  13. }
  14.  
  15. ?>


ale także nie działa...

Ten post edytował hunter777 20.09.2017, 10:44:44
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Jeśli chcesz wyświetlać rozliczenia z flagą=1, to od razu zrób to w zapytaniu.
Nawet jeśli poprawisz w linii 10 drugiego skryptu, to zapytanie nie wybiera założonych rekordów.

Jeśli kod HTML checkboxów nadal wygląda tak jak podałeś, to w ogóle nie przesyłasz id.
Go to the top of the page
+Quote Post
hunter777
post
Post #13





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


ok w sumie mogę zrobić dwa piliki, rzeczy z flagą 0 i 1 w zapytaniu i linki do nich...

co do przesyłania id to oczywiście go nie pobierałem pod checboxem, chyba powinno w checkbox pojawić się id i wpisałem je pod val3 ale i tak tego nie przesyła, gdzieś jeszcze nie widzę błędu, teraz ładnie mi sumuje(niestety nie zaokrągla jeszcze do 2 miejsc po przecinku pomimo iż mam DECIMAL(9,2)), netto i brutto ale nie pozwala zmienić flagi przyciskiem

  1. td><input type="checkbox" name="kwota_brutto" class="check_list" val="<?php echo $row["kwota_brutto"]; ?>" val2="<?php echo $row["kwota_netto"]; ?>" val3="<?php echo $row["id"]; ?>"/></td>
  2.  

Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Ach, Ty przesyłasz dane Ajaxem.
Sprawdź jakie dane przesyłasz.
Go to the top of the page
+Quote Post
hunter777
post
Post #15





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


zmieniłem w skrypcie

  1. id[i] = $(this).val3();


ale to nic nie dało...

Ajaxem przesyłam

  1. url:'delete.php',
  2. data:{id:id}


czyli id... przyznam się szczerze iż nie rozumiem jeszcze tego

  1.  
  2. $('tr#'+id[i]+'').css('background-color', '#ccc');
  3. $('tr#'+id[i]+'').fadeOut('slow');
Go to the top of the page
+Quote Post
viking
post
Post #16





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


jquery nie posiada funkcji val3().
Ostatnio zapis oznacza tr#identyfikator gdzie identyfikator pobierany jest po wartości klucza z tablicy i.
Go to the top of the page
+Quote Post
trueblue
post
Post #17





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Metoda val z jQuery nie pobiera wartości z atrybutu o nazwie val, lecz value.
Nie ma metod val2, val3. Masz pobierać wartości z atrybutów o tych nazwach.
Go to the top of the page
+Quote Post
hunter777
post
Post #18





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


czyli mój chyba przeładowany checkbox ma teraz postać

  1. <td><input type="checkbox" name="btn_rozlicz" class="check_list" val="<?php echo $row["kwota_brutto"]; ?>" val2="<?php echo $row["kwota_netto"]; ?>" value="<?php echo $row["id"]; ?>"/></td>


w skrypcie wróciłem do

  1.  
  2. id[i] = $(this).val();
  3.  


ale niestety button nie zmienia flagi na 0...


może to jeszcze kwestia plku php w którym mam

  1. <?php
  2.  
  3.  
  4. $connect = mysqli_connect("localhost", "root", "password", "new_record");
  5.  
  6. if(isset($_POST["id"]))
  7. {
  8. foreach($_POST["id"] as $id)
  9. {
  10. $query = "UPDATE `new_record` SET `rozliczenia` = '0' WHERE id = '".$id."'";
  11. mysqli_query($connect, $query);
  12. }
  13. }
  14.  
  15. ?>


Ten post edytował hunter777 20.09.2017, 11:58:34
Go to the top of the page
+Quote Post
viking
post
Post #19





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Sam input htmlowy ma atrybut value i do niego odnosi się $('input').val(); Jeśli chcesz coś więcej tam dopisać to wstaw to przez data-brutto, data-netto i albo $.data() albo $.attr().
Go to the top of the page
+Quote Post
hunter777
post
Post #20





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.02.2017

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


ok, rozumiem to tak, że ten checkbox powinien mieć postać

  1. <td><input type="checkbox" name="btn_rozlicz" class="check_list" value="<?php echo $row["id"]; ?>"/></td>


ponieważ on cały przekazuje jedną wartość value=...

niemniej jednak gdy ma postać jak powyżej to funkcja rozlicz.php, którą pokazałem powyżej i tak nie zmienia flagi na 0...

Ten post edytował hunter777 20.09.2017, 12:23:34
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 22.08.2025 - 21:48