dziwny wyniki prośba o pomoc w rozwiązaniu problemu

0

Dysponuję takim oto kawałkiem kodu:

 if (isset($_POST['pokaz-godziny']) && ($_POST['opcja'] != "wybierz pracownika")) {
					require_once ('config.php');
					$opcja = $_POST['opcja'];
					$miesiac = date("m");
					$rok = date("Y");
					$zaps = mysql_query("SELECT * FROM `".$opcja."` WHERE (MONTH(`data_wejscia`) = ".$miesiac." AND YEAR(`data_wejscia`) = ".$rok.") OR (MONTH(`data_wyjscia`) = ".$miesiac." AND YEAR(`data_wyjscia`) = ".$rok.")");
					if ($zaps) {
						echo '<br/><br/><strong>';
						echo '<table width="100%">';
						echo '<tr><td class="list">ID</td> <td colspan="2" class="list">Wejście</td> <td colspan="2" class="list">Wyjście</td><td class="list">Czas Pracy</td> <td class="list">Bunty</td></tr>';

						$sumdiff=new DateTime('0:0');$st=new DateTime('0:0');

						while ($wiersz = mysql_fetch_array($zaps)) {
							echo '<tr>';
							echo '<td class="list">';
							echo ++$j . ". ";
							echo '</td>';
							echo '<td class="list">';
							echo $wiersz[1];
							echo '</td>';
							echo '<td class="list"> ';
							echo $wiersz[2];
							echo '</td>';
							echo '<td class="list">';
							echo $wiersz[3];
							echo '</td>';
							echo '<td class="list">';
							echo $wiersz[4];
							echo '</td>';
							echo '<td class="list">';

							#zapis wartości pobranych z bazy do zmiennej.
							$din = $wiersz[1];
							$dout = $wiersz[3];
							$in = $wiersz[2];
							$out = $wiersz[4];

							#zapisanie wartości 2 komórek (daty i czasu) jako 1 ciąg znaków oddzielony spacją
							$dtst_str = $din." ".$in;
							$dtnd_str =	$dout." ".$out;

							#funkcja przeliczania czasu pracy:
							$dteStart = new DateTime($dtst_str);
							$dteEnd = new DateTime($dtnd_str);
							$dteDiff = $dteStart -> diff($dteEnd);
							$sumdiff->add($dteDiff);
							if ($out == "00:00:00") {
								echo "08:00";
							} else {
								echo $dteDiff->format('%H:%I');
							}
							echo '</td>';
							echo '<td class="list">';
							echo $wiersz[5];
							echo '</td>';
							echo '</tr>';
						}

						echo '<tr><td class="list">---</td><td class="list">---</td><td class="list">---</td><td class="list">---</td><td class="list">Suma:</td><td class="list">';
						$diff=$sumdiff->diff($st);
						echo ($diff->days*24)+$diff->h	.'h';
						$godziny_wypl = ($diff->days*24)+$diff->h;
						echo '</td>';
						echo '<td class="list">';
						$suma = mysql_query("SELECT SUM(`bunty`) FROM `".$opcja."` WHERE (MONTH(`data_wejscia`) = ".$miesiac." AND YEAR(`data_wejscia`) = ".$rok.")");
						$poka = mysql_result ($suma, $row);
						echo $poka;
						echo '</td>';
						echo '</tr>';
						echo '<tr>';
						echo '<td class="list">---</td>';
						echo '<td class="list">---</td>';
						echo '<td class="list">---</td>';

						echo '<td class="list" colspan="2">Do zapłaty:</td>';
						echo '<td class="list" colspan="2">'.(($poka * 12)+($godziny_wypl * 24)).'</td>';
						echo '</tr>';
						echo '</table>';
						echo '</br></br>';
						}
					}
--EDIT: --
SS: <img src="http://screenshot.sh/n9IKacfkfofrO"/>

Kod sam w sobie bez udziwnień działa ok, ale ...
chcę rozpatrzeć sytuacje w której w bazie w polu czas_wyjscia (w w.w. kodzie wartość $wiersz[4], czy jak ktoś woli $out - bo to jest w zasadzie 1 i to samo tylko inaczej zapisane na potrzeby skryptu :P ) nie została uzupełniona czyli jej wartość wynosi 0000, teraz jeżeli wartość danej komórki wynosi 0 to chciałbym aby suma czasu pracy wynosiła 8h po czym wartość została dodana prawidłowo do pozostałych wartości sumie kolumny. czy jest to w ogóle możliwe ? Poniżej zamieszczam screen wyniku który otrzymuję.

w momencie kiedy wyliczę z użytej funkcji różnicę czasu bez wykorzystania pola daty, wyświetla mi sumę godzin prawie dobrze tylko że zamiast dodać 8h do wyświetlonego czasu który wynosi 6h po zsumowaniu 3 pierwszych wierszy wynik wyświetlony to 8h ... a do tego wystąpi problem jeżeli będzie różnica dat - chyba że się mylę, to proszę mnie poprawić bo nie weryfikowałem tego jeszcze.

0

Powiem Ci coś w sekrecie: nikomu nie będzie się chciało analizować tego kodu i zastanawiać co przedstawia $wiersz[3] albo jakże wiele mówiąca nazwa zmiennej $poka.

Ponadto:

  1. Wszystkie funkcje mysql_zdeprecjonowane i zostały usunięte z PHP, wykorzystaj PDO.
  2. W Twoim kodzie dzieje się za dużo - mieszasz model (pobieranie oraz przetwarzanie danych), widok (wyświetlanie) i kontroler (generalna obsługa wejścia) w jednym miejscu (!). Zapoznaj się z wzorcem MVC.
  3. Masz kompletnie zepsute nazewnictwo zmiennych. Co w ogóle ma reprezentować nazwa poka albo zaps? W nazywaniu zmiennych chodzi o to, aby nie trzeba było patrzeć do kodu, by zrozumieć, do czego ta zmienna jest wykorzystywana.
  4. Co za szatan szepnął Ci, że $wiersz[3] jest lepsze od np. $wiersz['czas_pracy'], które otrzymałbyś za pomocą mysql_fetch_assoc? Tak czy siak, przenieś się na PDO... a najlepiej jakiś framework typu Zend Framework, ale to powoli :P
0

takie ogólnie podpowiedzi co do kodu dostawałem na innych forach jeżeli chodzi o rozwiązywanie problemów, jeżeli chodzi o PHP to jestem początkującym i dopiero się uczę :D także pomoc w rozwiązaniu tego problemu byłaby mile widziana jeżeli jednak znajdzie się ktoś kto chciałby zerknąć na kod :) a co do pytania do zmiennych $poka i $zaps, gdybyś właśnie zerknął w kod uważnie zauważyłbyś że $zaps jest to zapytanie typu SELECT do bazy (znajduje się praktycznie na samym początku kodu) a $poka zmienna zdefiniowana do wyświetlenia wyniku funkcji mysql_result(); może zdefiniowana nie potrzebnie bo wystarczyło użyć echo ub printa przed jednak jest, jak już mówiłem dopiero się uczę ;)

jeszcze co do $wiersz[x] - gdyby wczytało zamieszczonego SSa prawidłowo, wiadomo było by co jest czym bo kolejne numery w [] to numer kolumny wyświetlonego wyniku. :)

0

gdyby wczytało zamieszczonego SSa prawidłowo, wiadomo było by co jest czym bo kolejne numery w [] to numer kolumny wyświetlonego wyniku
A gdybyś po ludzku wykorzystał mysql_fetch_assoc to szłoby się domyśleć bez patrzenia na screenshoty :P

0

gdybym był bardziej obeznany z funkcjami mysql'a i php'a może i bym jej użył ale skoro jestem początkujący i się dopiero uczę użyłem jedynie tego co sam wiedziałem a jest tego niewiele + to co zostało mi podpowiedziane gdzieś na forach. Może zakończmy niepotrzebne nabijanie postów do niczego nie prowadzące. :)

0

zapytam więc inaczej, w jaki sposób string 0800 bądź też 8 godzin / 8 hours, zapisać poprawnie żeby interpretowane zostało jako czas?
ponieważ funkcja strtotime('0800') / 3600 % 24 podaje mi jakieś kosiczne wyniki :) chyba że ja to błędnie zapisuje :)

0

temat można zamknąć, jakimś cudem, sobie poradziłem i o dziwo działa jak powinno :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1