• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pobieranie zmiennej z wiersza tabeli (SQL, PHP) do Javascriptu

Object Storage Arubacloud
+1 głos
583 wizyt
pytanie zadane 18 czerwca 2021 w JavaScript przez Grzesiek9999 Nowicjusz (130 p.)

Witam, mam mały kłopot z pobraniem przez skrypt zmiennej zawartej w pętli WHILE (dane z bazy SQL). Wiem jak zawrzeć zmienną z PHP w skrypcie - jednak jest to zmienna stała, a ja chciałbym by była to zmienna, która wynika z obliczeń z danego wiersza w tabeli SQL. Celem jest zliczanie w czasie rzeczywistym dodanych w inputach wartości z wartościami zawartymi w zmiennych z pojedynczych wierszy.Poniżej przedstawiam przykład:

// pętla 
while($r = mysql_fetch_object($wynik)) {

// sumowanie i zlicznie wartości zawartych w tabeli SQL
$godziny_pracy = mysql_result(mysql_query("SELECT SUM(hours) FROM a_karta WHERE type='P' AND user LIKE '$user'"),0);
$nadgodziny = mysql_result(mysql_query("SELECT SUM(uphours) FROM a_karta WHERE type='P' AND user LIKE '$user'"),0);
$l4 = mysql_result(mysql_query("SELECT SUM(khours) FROM a_karta WHERE kind='L4' AND user LIKE '$user'"),0) / 10000;
$urlop = mysql_result(mysql_query("SELECT SUM(khours) FROM a_karta WHERE kind LIKE '%U%' AND user LIKE '$user'"),0) / 10000;
$dpopoludniowy = mysql_result(mysql_query("SELECT SUM(dnight) FROM a_karta WHERE user LIKE '$user'"),0);
$dweekendowy = mysql_result(mysql_query("SELECT SUM(dweek) FROM a_karta WHERE user LIKE '$user'"),0) / 2;
$sum_inne = mysql_result(mysql_query("SELECT COUNT(kind) FROM a_karta WHERE kind ='IN' AND MONTH(date) = '$date_month' AND YEAR(date) = '$date_year' AND user LIKE '$user'"),0);
$sum_duty = mysql_result(mysql_query("SELECT COUNT(duty) FROM a_karta WHERE duty ='TAK' AND MONTH(date) = '$date_month' AND YEAR(date) = '$date_year' AND user LIKE '$user'"),0);
$sum_dnight = mysql_result(mysql_query("SELECT COUNT(dnight) FROM a_karta WHERE dnight ='1' AND MONTH(date) = '$date_month' AND YEAR(date) = '$date_year' AND user LIKE '$user'"),0);
$sum_dweek = mysql_result(mysql_query("SELECT COUNT(dweek) FROM a_karta WHERE dweek ='1' AND MONTH(date) = '$date_month' AND YEAR(date) = '$date_year' AND user LIKE '$user'"),0);

// obliczenia z danych pobranych i wyliczonych z tabeli SQL 
$obliczenia_godziny = $godziny_pracy*$stawka;
$obliczenia_nadgodziny = $nadgodziny*1.5*$stawka;
$obliczenia_urlopy = $urlop*$stawka;
$obliczenia_l4 = $l4*0.8*$stawka;
$premia = 0;
$obliczenia_premia = ($premia/100)*($obliczenia_godziny+$obliczenia_nadgodziny);
$obliczenia_dpopołudniowy = $dpopoludniowy*50;
$obliczenia_dweekendowy = $dweekendowy*200;
$obliczenia_razem = $obliczenia_godziny + $obliczenia_nadgodziny + $obliczenia_urlopy + $obliczenia_l4 + $obliczenia_premia + $obliczenia_dpopołudniowy + $obliczenia_dweekendowy;

//Wyniki
	echo '<tr class="second">';
			echo '<td></td>'; 
			echo '<td></td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_godziny).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_nadgodziny).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_urlopy).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_l4).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_premia).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_dpopołudniowy).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_dweekendowy).' zł</td>'; 
			echo '<td><input type="number" min="0.00" max="1000000.00" step="0.01" id="uznaniowa'.$r->id.'" name="uznaniowa"/> zł</td>'; 
			echo '<td><input id="results'.$r->id.'" value="" name="razem"/></td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_nakonto).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_ubezpieczenie).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_inne).' zł</td>'; 
			echo '<td>'.money_format('%.2n', $obliczenia_doreki).' zł</td>'; 
	echo '</tr>'; 
	echo '<tr  class="last">';
	echo '</tr>'; 
	echo '</main>'; 
		} 

Do tego mam skrypt, którego zadaniem jest wyliczanie w czasie rzeczywistym sumy: $obliczenia_razem oraz wartości pobranej z inputa o id="uznaniowa". Przykład kodu:

<script>
	var razem1 = <?php echo json_encode($obliczenia_razem); ?>;
    document.getElementById('uznaniowa').addEventListener('input', e => {
    document.getElementById('results').value = e.target.value/1 + razem1/1;
});
</script>

Proszę pomóżcie :), każda odpowiedź będzie dla mnie niezmiernie cenna. Z góry dziękuję

komentarz 18 czerwca 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
A co konkretnie nie działa? Może AJAX pomógłby aktualizować stronę w czasie rzeczywistym.
komentarz 18 czerwca 2021 przez VBService Ekspert (253,120 p.)

Ten zapis powoduje nadpisanie zmiennej: $obliczenia_razem, wynikiem ostatniego obliczenia z pętli (czy o to Tobie chodzi?)

<?php
// pętla 
while($r = mysql_fetch_object($wynik)) {
  . . . 
 
  $obliczenia_razem = $obliczenia_godziny + $obliczenia_nadgodziny
                    + $obliczenia_urlopy + $obliczenia_l4 
                    + $obliczenia_premia + $obliczenia_dpopołudniowy
                    + $obliczenia_dweekendowy;
 
  . . . 
  
  echo '</main>'; 
}
?>

<script>
    var razem1 = <?php echo json_encode($obliczenia_razem); ?>;
    document.getElementById('uznaniowa').addEventListener('input', e => {
    document.getElementById('results').value = e.target.value/1 + razem1/1;
});
</script>

jak powyżej, mamy liczbę obliczoną wcześniej w $obliczenia_razem, więc wystarczy

. . .

<script>
    var razem1 = <?php echo $obliczenia_razem; ?>;
    document.getElementById('uznaniowa').addEventListener('input', e => {
    document.getElementById('results').value = e.target.value/1 + razem1/1;
});
</script>

. . .

 

komentarz 18 czerwca 2021 przez VBService Ekspert (253,120 p.)

Kolejna sprawa, do zapisu nazw zmiennych staramy się używać język angielski, ale nie jest to przymus  wink, jeżeli już używamy polskich nazw, nie używamy polskich "ogonków".

 

$obliczenia_dpopoludniowy = . . .;

 

1
komentarz 18 czerwca 2021 przez Grzesiek9999 Nowicjusz (130 p.)
edycja 18 czerwca 2021 przez Grzesiek9999
Dziękuję za zainteresowanie, wyjaśnię co chciałbym osiągnąć. Mam pracownika o id=1, którego  pensja, załóżmy w sumie wynosi: $obliczenia_razem = $obliczenia_premia + $obliczenia_nadgodziny + $_godziny = 1000. W formularzu (input id="uznaniowa") wpisuję 200. W czasie rzeczywistym skrypt dokonuje obliczenia uznaniowa +  $obliczenia_razem, co daje 1200. Nie ma z tym kłopotu jeśli zmienna $obliczenia_razem ma stałą wartość - skrypt działa bez zarzutu. Jednak nie dokonuje działania (przepisuje wartość z inputa) w przypadku gdy $obliczenia_razem za każdym razem ma inną wartość (wg mnie to efekt pętli, która pobiera dane z bazy SQL) po prostu jej nie dodaje. Chciałbym zapisać tak skrypt by każdemu użytkownikowi odpowiadała zmienna $obliczenia_razem.

P.S. Z zapisem (dopracuję) - dziękuję za uwagę
komentarz 18 czerwca 2021 przez VBService Ekspert (253,120 p.)
edycja 18 czerwca 2021 przez VBService

Pierwszy sposób jaki mi przychodzi do głowy to "zrobienie" formularza w ten sposób, że

w pole np.: id_pracownik wpisywać jego identyfikator, lub użyć pól np.: imie_pracownik, nazwisko_pracownik, ajax-em pobrać wartość $obliczenia_razem (przypisane do konkretnego pracownika) i  wtedy można w czasie rzeczywistym obliczać dane z pola (input) id="uznaniowa".

1
komentarz 18 czerwca 2021 przez Grzesiek9999 Nowicjusz (130 p.)
W ten sposób tego nie rozpatrywałem, dzisiaj posiedzę i spróbuję coś wykombinować. Dziękuję za poświęcony czas. Gdy dopracuję odpowiedni system - podzielę się z Wami swoimi "wypocinami" :).

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 412 wizyt
pytanie zadane 31 marca 2020 w PHP przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 503 wizyt
pytanie zadane 18 stycznia 2021 w JavaScript przez Xele Początkujący (310 p.)
0 głosów
1 odpowiedź 3,316 wizyt
pytanie zadane 11 grudnia 2015 w JavaScript przez majkkel Użytkownik (530 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...