Po raz kolejny witam mistrzów webmasteringu!
Tworzę baze urlopów i natknąłem się na pewne problemy:
- w formularzu wprowadzania wpisuję datę rozpoczęcia i zakończenia urlopu. Nie bardzo wiem jak zrobić żeby pojawiało się kolejne pole z obliczoną liczbą urlopu za pomocą dołączonej funkcji workDays. Wszystkie dane muszą zostać zapisane do bazy. Na razie wszystko mi działa, zapisuje do bazy, ale bez ilości obliczonych dni.
Mam 5 tabel:
ewidencja: idewidencji, idpracownika, idstopnia, idurlopu, idwydzialu, od, do, iloscdni
pracownicy: idpracownika, imie, nazwisko
urlopy: idurlopu, nazwa
stopnie: idstopnia, nazwa
wydzialy: idwydzialu, nazwa
plik funkcje.php
<?
function lacz_bd(){
$baza = @mysql_pconnect("localhost", "root", "");
if (!$baza){
echo "Połączenie z bazą się nie powiodło.";
return false;
}
if (!@mysql_select_db("urlopy")){
echo "Wybranie bazy danych nie powiodło się.";
return false;
}
return $wynik;
}
function wyswietl_urlopy($zapytanie){
lacz_bd();
$wynik=mysql_query($zapytanie);
if (!$wynik){
echo "Błąd. Połączenie nie powiodło się!";
exit;
}
$znalezionych=mysql_num_rows($wynik);
echo "<CENTER><table border=1><tr bgcolor=lightgreen></CENTER>
";
echo "<th>nazwisko</th>";
echo "<th>stopien</td>
";
echo "<th>wydzial</th>";
echo "<th>urlop</th>";
echo "<th>od</th>";
echo "<th>do</th>";
;
for ($i=0; $i<$znalezionych; $i++){
$wiersz= mysql_fetch_array($wynik);
echo "<tr>";
echo "<td><center>".pobierz_nazwisko($wiersz["idpracownika"])."</td></center>";
echo "<td><center>".pobierz_stopien($wiersz["idstopnia"])."</td></center>";
echo "<td><center>".pobierz_wydzial($wiersz["idwydzialu"])."</td></center>";
echo "<td><center>".pobierz_urlop($wiersz["idurlopu"])."</td></center>";
echo "<td><center>".$wiersz["od"]."</td></center>";
echo "<td><center>".$wiersz["do"]."</td></center>";
echo "</tr>";
}
echo "</table>";
}
function pobierz_stopien($idstopnia){
$zapytanie="select nazwa from stopnie where idstopnia='$idstopnia'";
$wynik=mysql_query($zapytanie);
if(!$wynik) return "brak stopnia";
if(mysql_num_rows($wynik)==0) return false;
$wynik=mysql_result($wynik, 0, "nazwa");
return $wynik;
}
function pobierz_wydzial($idwydzialu){
$zapytanie="select nazwa from wydzialy where idwydzialu='$idwydzialu'";
$wynik=mysql_query($zapytanie);
if(!$wynik) return "brak wydzialu";
if(mysql_num_rows($wynik)==0) return false;
$wynik=mysql_result($wynik, 0, "nazwa");
return $wynik;
}
function pobierz_urlop($idurlopu){
$zapytanie="select nazwa from urlopy where idurlopu='$idurlopu'";
$wynik=mysql_query($zapytanie);
if(!$wynik) return "brak urlopu";
if(mysql_num_rows($wynik)==0) return false;
$wynik=mysql_result($wynik, 0, "nazwa");
return $wynik;
}
function pobierz_nazwisko($idpracownika){
$zapytanie="select nazwisko from pracownicy where idpracownika='$idpracownika'";
$wynik=mysql_query($zapytanie);
if(!$wynik) return "brak nazwiska";
if(mysql_num_rows($wynik)==0) return false;
$wynik=mysql_result($wynik, 0, "nazwisko");
return $wynik;
}
?>
plik nowy_prac.php
<html>
<head>
<title>"baza urlopów"</title>
</head>
<body>
<BODY BGCOLOR="blanchedalmond">
<h1>BAZA urlopów</h1>
<form action="index.php?page=wstaw_elew" method="post">
<table border="0">
<td>pracownik</td>
<td>
<br>
<SELECT NAME=pracownik>
<option class=form>-- wybierz --</option>
<OPTION class=form VALUE=1>Kowalski</OPTION>
<OPTION class=form VALUE=2>Nowak</OPTION>
</SELECT>
</tr></td>
<tr>
<td>Wydział</td>
<td>
<br>
<SELECT NAME=wydzial>
<option class=form>-- wybierz --</option>
<OPTION class=form VALUE=1>a</OPTION>
<OPTION class=form VALUE=2>b</OPTION>
</SELECT>
</tr></td>
<tr>
<td>Stopień</td>
<td>
<br>
<SELECT NAME=stopien>
<option class=form>-- wybierz --</option>
<OPTION class=form VALUE=1>mgr</OPTION>
<OPTION class=form VALUE=2>inż.</OPTION>
</SELECT>
</tr></td>
<tr>
<td>urlop</td>
<td>
<br>
<SELECT NAME=urlop>
<option class=form>-- wybierz --</option>
<OPTION class=form VALUE=1>okolicznościowy</OPTION>
<OPTION class=form VALUE=2>wypoczynkowy</OPTION>
</SELECT>
</tr></td>
<tr><td>od</td><td><input type="text" name="od" maxlength="10" size="10"><br /></td></tr>
<tr><td>do</td><td><input type="text" name="do" maxlength="10" size="10"><br /></td></tr>
<tr><td colspan="2"><input type="submit" value="Zapisz"></td></tr>
</table>
</form>
</body>
</html>
plik wstaw_prac.php
<html>
<head>
<title>"baza"</title>
</head>
<body>
<h1>baza </h1>
<?php
// utworzenie krótkich nazw zmiennych
$idpracownika=$HTTP_POST_VARS['pracownik'];
$idwydzialu=$HTTP_POST_VARS['wydzial'];
$idstopnia=$HTTP_POST_VARS['stopien'];
$idurlopu=$HTTP_POST_VARS['urlop'];
$od=$HTTP_POST_VARS['od'];
$do=$HTTP_POST_VARS['do'];
if ( !$idpracownika || !$idwydzialu || !$idstopnia || !$urlop || !$od || !$do)
{
echo 'Nie podano wszystkich potrzebnych danych.<br />'
.'Wróć do poprzedniej strony i spróbuj ponownie.';
exit;
}
$idpracownika = addslashes($idpracownika);
$idstopnia = addslashes($idstopnia);
$idwydzialu = addslashes($idwydzialu);
$idurlopu = addslashes($idurlopu);
$od = addslashes($od);
$do = addslashes($do);
@ $db = mysql_pconnect('localhost', 'root', '');
if (!$db)
{
echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
exit;
}
mysql_select_db('urlopy');
$zapytanie = "insert into ewidencja values ('".$idewidencji."', '".$idpracownika."', '".$idstopnia."', '".$idurlopu."','".$idwydzialu."', '".$od."', '".$do."')";
$wynik = mysql_query($zapytanie);
if ($wynik)
echo mysql_affected_rows().' zapisano do bazy.';
?>
<a href="index.php?page=nowy_prac">Dodaj następny</a>
<a href="wyswietl_prac.php">Pokaż</a>
</body>
</html>
plik z funkcją workDays.php
<?php
function workDays($date1, $date2, $withStartDay = false) {
$date1=strtotime($date1);
$date2=strtotime($date2);
if ($date2===$date1 && !$withStartDay) return 0;
$char=1;
if ($date1>$date2)
{$datePom=$date1;$date1=$date2;$date2=$datePom;$char=-1;}
$count=0;
if (!$withStartDay)
$date1=strtotime('+1 day',$date1);
$date2=strtotime('+1 day',$date2);
$lastYear = null;
$hol=array('01-01','05-01','05-03','08-15','11-01','11-11','12-25','12-26');
while ($date1<$date2) {
$year = date('Y', $date1);
if ($year !== $lastYear){
$lastYear = $year;
$easter = date('m-d', easter_date($year));
$date = strtotime($year . '-' . $easter);
$easterSec = date('m-d', strtotime('+1 day', $date));
$cc = date('m-d', strtotime('+60 days', $date));
$hol[8] = $easter;
$hol[9] = $easterSec;
$hol[10] = $cc;
}
$weekDay=date('w',$date1);
if (!($weekDay==0 || $weekDay==6 || in_array(date('m-d',$date1),$hol)))
$count++;
$date1=strtotime('+1 day',$date1);
}
$count*=$char;
return $count;
}
?>
<?php
#echo workDays('2008-08-14','2008-08-14'); //wyświetli 2, gdyż dwa ostanie dni to weekend
echo workDays('2008-11-11','2008-11-26',true);//wyświetli 3, gdyż liczymy z dniem początkowym
?>
Chyba najlepiej by było gdyby po naciśnięciu przycisku zapisz można poprawić ewentualnie wprowadzone dane.
Proszę o ewentualne uwagi i pomoc w obliczeniu ilości dni wykorzystywanego urlopu.
Pozdrawiam