• 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

VPS Starter Arubacloud
+1 głos
542 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,280 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 (251,210 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 (251,210 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 (251,210 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 409 wizyt
pytanie zadane 31 marca 2020 w PHP przez Klaudiaaa Początkujący (390 p.)
0 głosów
1 odpowiedź 459 wizyt
pytanie zadane 18 stycznia 2021 w JavaScript przez Xele Początkujący (310 p.)
0 głosów
1 odpowiedź 3,308 wizyt
pytanie zadane 11 grudnia 2015 w JavaScript przez majkkel Użytkownik (530 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...