Tworzenie tabeli z godzinami pracy dla każdego z pracowników w PHP i MYSQL

0

Cześć wszystkim,

chciałbym stworzyć tabele z godzinami dla każdego z pracownika (możliwość wglądu jak i zapisu godzin pracy). Potrzebuję przypisać do poszczególnej daty, godziny pracy pracownika i nazwa projektu. Chciałbym, żeby pracownik miał możliwość zapisu swoich godzin pracy i odtworzenia. Utknąłem po przypisaniu mojej tabeli z sql w tablicy. Czy mógłby ktoś pomóc jak przypisać godziny pracy do danej daty np. if date = '01-05-2017' to przypisz godzinę z tabeli "hours" i wydrukuj ją w następnym wierszu .

Proszę o jakieś wskazówki jak się za to zabrać. Z góry dzięki bardzo

**Tutaj co chciałbym osiągnąć: **
title

moja tabela w mysql "Kalendarz"
id | date | project | login

a tutaj to co dotychczas udało mi się stworzyć

?php
$data=array();
$query = "SELECT * FROM kalendarz";
$result = $polaczenie->query($query);
while($row = mysqli_fetch_assoc($result))
{
    $data[] = $row;
}

// assigning variables for dates
$dzis = date('Y-m-d');
$period = new DatePeriod(
     new DateTime('2017-05-01'),
     new DateInterval('P1D'),
     new DateTime('2017-05-31')
);

foreach( $period as $date) { 
    $array[] = $date->format('d-m-Y'); 
}
$count_days = count($array);
// creating each row
echo "<table border='1'>";
echo "<tr>";
echo "<th>TEMAT</th>>";
$temat = "project_name";
for ($j = 0; $j < $count_days; $j++) {
    echo "<th>$array[$j]</th>";
}
echo "</tr>";
echo "</table>";
?>
0

Dodaj do tabeli 'Kalendarz' pole 'ilosc_godzin'. Dalej powinieneś wiedzieć, co i jak...

0
Marcin.Miga napisał(a):

Dodaj do tabeli 'Kalendarz' pole 'ilosc_godzin'. Dalej powinieneś wiedzieć, co i jak...

Dzięki Marcin, zapomniałem dodać tej kolumny. Oczywiście w tabeli mam: id | date | project | hours | login
Wiem, że muszę pogrupować query wg projektu, jak i ograniczyć do danego użytkownika. Tylko pytanie jak to wrzucić do pętli, żeby można było zapisać w mysql jaki i odtworzyć.

0

Ale na twoim skrinie nie widze nigdzie 'login'... te wartości pod "projekt name" to nazwa projkektu, a wartosci to już skumulowane na wszystkie loginy?

0

Docelowo to będzie time sheet dla każdego z pracowników do uzupełniania (tak więc inny dla każdego z loginów). Na razie chciałbym się zająć samym php, później podzielę to na różne tabele w mysql i połączę z poszczególnymi id.

Do rzeczy, udało mi się coś takiego sklecić :

// assigning variables for dates
$dzis = date('Y-m-d');
$period = new DatePeriod(
     new DateTime('2017-05-01'),
     new DateInterval('P1D'),
     new DateTime('2017-05-31')
);

foreach( $period as $date) { $array[] = $date->format('d-m-Y'); }
$liczba_dni = count($array);


echo "<table border='1'>";
echo "<tr>";
for ($j = 0; $j < $liczba_dni; $j++) 
{
    echo "<th>$array[$j]</th>";
	echo "</tr>";
	$my_date = date('Y-m-d', strtotime ($array[$j]));
	$query = "SELECT hours FROM calendar where login= '$_SESSION[user]'  and date = '$my_date' ORDER BY date";
	$result = $polaczenie->query($query);
	while ($row = mysqli_fetch_assoc($result))
	{
		$hour = $row["hours"];		
		echo "<tr><td>";
		echo $hour;
		echo "</td></tr>" ;
    }

}

Tylko że tworzy to się w jednej kolumnie, a ja chciałbym żeby to było tak jak na screenie: daty a pod spodem godziny. Masz jakiś pomysł na to?

Pozdrawiam

0

wywal ten kod caly do smieci to sie nie nadaje do niczego, co trzymasz polu login w bazie ? albo co w polu project ? tylko nie mow ze nazwy uzytkownika i nazwy projektu ?

0

Mówisz nadaję się do śmieci? Raczkuje dopiero w php, więc od czegoś trzeba zacząć. Na razie przechowuje bezpośrednio w tabeli wszystkie dane, później stworzę poszczególne tabele i asocjacje między nimi i połączę tylko numerami id. Nie chciałbym się skupiać na sql na razie, tylko na php.

0

Troche tak jakbyś chciał najpierw zbudować kwadratowy dom a jak już skonczysz dach wszystko to potem bedziesz budował pokoje. Nie nie nie fundamenty musza byc Od razu gotowe bo dzieki dobrze zorganizowanych tabelach masz praktycznie gotowe dane do pobrania do tablicy i nic nie musisz robic.

najpierw zrob tabele USERS gdzie masz pola jak ID, LOGIN , PASSWORD, STSTUS , DATETIME etc.
Pozniej zrob tabele PROJECTS gdzie masz ID, PUBLIC_NAME
Nastepnie zrob tabele MAPPER_USERS_PROJECTS gdzi emasz ID, ID_USERS, ID_PROJECTS tu sobie bedziesz podpinal jaki user ma jakie projekty
Teraz zrob tabele MAPPER_PROJECTS_HOURS gdzi emasz ID, ID_MAPPER_USERS_PROJECTS, TIMEDATE kiedy wpisal godziny , HOURS czyli ile godzin pracowal

Nastepnie robisz zapytanie SQL ktore generuje ci date START DATE 2017/01 to 2017/12 i Pobierasz z tabeli MAPPER_PROJECTS_HOURS po polu TIMEDATE jesli sa jakies wpisy to dajesz je w tabelce i masz gotowe

0

Pewnie, to co napisałeś tworzy dla mnie spójną całość, ale koniec końców wracamy do tego samego czyli jak przedstawić przepracowane godziny z podziałem na projekt w tabelce, gdzie wpisy w tabeli nie dotyczą wszystkich dat...

0

to potem robisz zapytanie cos w stylu (nie dziala bo zmyslilem)

SELECT mph.hours, u.login, p.public_name FROM MAPPER_PROJECTS_HOURS mph
JOIN MAPPER_USERS_PROJECTS mup ON mup.id = mph.ID_MAPPER_USERS_PROJECTS
JOIN users u ON u.id =  mup. ID_USERS
JOIN projects p ON p.id =  mup. ID_PROJECTS
WHERE mph.TIMEDATE BETWEEN 2017/04 AND 2017/05
GROUP by u.login,p.public_name

I wywali ci liste projektow dla danego usera z godzinami w danych datach, tylko no to tak prowizorycznie do zobrazowania bo nie dziala wiaodmo

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