• 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

+1 głos
47 wizyt
pytanie zadane 18 czerwca 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 przez SzkolnyAdmin Maniak (53,120 p.)
A co konkretnie nie działa? Może AJAX pomógłby aktualizować stronę w czasie rzeczywistym.
komentarz 18 czerwca przez .::VBService::. VIP (113,880 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 przez .::VBService::. VIP (113,880 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 przez Grzesiek9999 Nowicjusz (130 p.)
edycja 18 czerwca 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 przez .::VBService::. VIP (113,880 p.)
edycja 18 czerwca 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 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 155 wizyt
pytanie zadane 31 marca 2020 w PHP przez Klaudiaaa Początkujący (350 p.)
0 głosów
1 odpowiedź 36 wizyt
0 głosów
1 odpowiedź 2,662 wizyt
pytanie zadane 11 grudnia 2015 w JavaScript przez majkkel Użytkownik (530 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

84,092 zapytań

132,861 odpowiedzi

293,830 komentarzy

55,530 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...