Ik heb iemand een urenregistratie script laten maken dat na een aantal bugs opzicht redelijk goed werkt. Er zit alleen nog één klein foutje in mijn systeem die ik niet eruit krijg. Om de situatie even beter te schetsen zal ik het systeem uitleggen.
Aan het einde van iedere werkdag vult de bedrijfsleider de uren in van alle medewerkers die de desbetreffende dag hebben gewerkt. De bedrijfsleider vult de begintijd en de eindtijd in waarna het script het aantal uren berekend en deze online in MySQL wegschrijft.
Ter controle kan de directie met een aparte login de ingevulde uren inzien en deze eventueel bewerken. Niets meer, niets minder zou je zeggen. Enkel als iemand tot 00:30 uur heeft gewerkt geeft het script aan dat deze persoon tot 00:00 heeft gewerkt. Er zit dus een marge in van 30 minuten. De totaal aantal gewerkte dagen is wel correct omdat hij dit vooraf berekend en dus ook zo meegeeft naar het database. Bij alle andere gewerkte uren is er geen probleem en zijn de begintijd en eindtijd correct.
Zoals ik al eerder aangaf besteed ik het scripten tegenwoordig liever uit aan mensen die er meer tijd en verstand van hebben. Enkel heeft de programmeur me met dit script laten zitten en reageerd hij niet meer op mijn vraag om deze bug eruit te halen. Ik heb zelf al gegeken naar hoe het script in elkaar steekt en ben tot de conclusie gekomen dat ik te weinig php kennis beschik om dit op te lossen haha.
Connectie met het database
<?php
include 'db_conn.php';
$lengte = 0;
function str_rsplit($str, $sz)
{
// splits a string "starting" at the end, so any left over (small chunk) is at the beginning of the array.
if ( !$sz ) { return false; }
if ( $sz > 0 ) { return str_split($str,$sz); } // normal split
$l = strlen($str);
$sz = min(-$sz,$l);
$mod = $l % $sz;
if ( !$mod ) { return str_split($str,$sz); } // even/max-length split
// split
return array_merge(array(substr($str,0,$mod)), str_split(substr($str,$mod),$sz));
}
if (isset($_POST['submit']))
{
$items = $_POST['items'];
for ($i = 1; $i <= $items; $i++)
{
$begintijd = mysql_real_escape_string($_POST['begintijd' . $i]);
$eindtijd = mysql_real_escape_string($_POST['eindtijd' . $i]);
$gewerkteUren = mysql_real_escape_string($_POST['uren'.$i.'berekend' ])*10;
$registratieID = mysql_real_escape_string($_POST['registratieID' . $i]);
echo $registratieID;
$query = "UPDATE registratie SET begintijd=$begintijd, eindtijd=$eindtijd, gewerkteUren=$gewerkteUren WHERE registratie.registratieID=$registratieID";
echo "<br /><br />";
echo $query;
mysql_query($query) or die(mysql_error());
}
header("Location: succesvolbewerkt.php");
}
if (isset($_POST['datum']))
{
if ($_POST['datepicker'] == "")
{
header("Location: geendatumgeselecteerd.php");
}
else
{
$datum = explode("-", $_POST['datepicker']);
$dag = $datum[0];
$maand = $datum[1];
$jaar = $datum[2];
$result = mysql_query("SELECT * FROM registratie, medewerker WHERE registratie.gebruikerID = medewerkerID AND dag=$dag AND registratie.maand=$maand AND registratie.jaar=$jaar GROUP BY registratieID");
while ($row = mysql_fetch_assoc($result))
{
$data[] = $row;
}
$lengte = count($data);
}
}
?>Controleren van gewerkte uren
<script type='text/javascript'>
function controleerUren()
{
for (var i = 1; i <= <?php echo $lengte; ?>; i++)
{
var begintijd = $('#begintijd' + i).val();
var eindtijd = $('#eindtijd' + i).val();
if ($("#datepicker").val() == "")
{
alert("Geen datum gekozen!");
die;
}
else
{
var startUren = Math.floor(begintijd / 100);
var startMinuten = begintijd % 100;
var eindUren = Math.floor(eindtijd / 100);
var eindMinuten = eindtijd % 100;
var gewerkteHalveUren = eindMinuten + startMinuten;
var gewerkteUren = eindUren - startUren;
if (gewerkteUren < 0)
{
gewerkteUren += 24;
}
if (gewerkteHalveUren === 30)
{
if (startMinuten === 30 && eindMinuten === 0)
{
gewerkteUren -= 0.5;
}
else
{
gewerkteUren += 0.5;
}
}
$('#submit').removeAttr("disabled");
$('#uren' + i + 'berekend').val(gewerkteUren);
}
}
}
function check()
{
var currentItem = <?php echo $lengte; ?>;
for(var i=1; i <= currentItem; i++)
{
$('#begintijd' + i).change(function(){
controleerUren();
});
$('#eindtijd' + i).change(function(){
controleerUren();
});
}
}
//<![CDATA[
$(document).ready(function() {
setInterval(check, 1000);
$("#datepicker").datepicker({dateFormat: 'dd-mm-yy'});
});
//]]>
</script>Weergeven van de uren (waar dus de fout in zit volgens mij)
<?php
if (isset($_POST['datum']))
{
if ($_POST['datepicker'] != "")
{
for ($i = 0; $i < $lengte; $i++)
{
$temp = $i + 1;
$bTijd = str_rsplit($data[$i]["begintijd"], -2);
$eTijd = str_rsplit($data[$i]["eindtijd"], -2);
if($eTijd[0] == "30")
{
$eTijd[0] = "0";
$eTijd[1] = "30";
}
if($eTijd[0] == "0")
{
$eTijd[0] = "0";
$eTijd[1] = "00";
}
echo '<tr class="noBorder" id="werknemer' . $temp . '">
<td width="200">
' . $data[$i]["voornaam"] . ' ' . $data[$i]["achternaam"] . '
<input type="hidden" id="registratieID' . $temp . '" name="registratieID' . $temp . '" value="' . $data[$i]["registratieID"] . '" />
</select>
</td>
<td width="100">
<select id="begintijd' . $temp . '" name="begintijd' . $temp . '">
<option value='.$data[$i]["begintijd"].' selected>'.$bTijd[0].':'.$bTijd[1].'</option>
<option value="800">8:00</option>
<option value="830">8:30</option>
<option value="900">9:00</option>
<option value="930">9:30</option>
<option value="1000">10:00</option>
<option value="1030">10:30</option>
<option value="1100">11:00</option>
<option value="1130">11:30</option>
<option value="1200">12:00</option>
<option value="1230">12:30</option>
<option value="1300">13:00</option>
<option value="1330">13:30</option>
<option value="1400">14:00</option>
<option value="1430">14:30</option>
<option value="1500">15:00</option>
<option value="1530">15:30</option>
<option value="1600">16:00</option>
<option value="1630">16:30</option>
<option value="1700">17:00</option>
<option value="1730">17:30</option>
<option value="1800">18:00</option>
<option value="1830">18:30</option>
<option value="1900">19:00</option>
<option value="1930">19:30</option>
<option value="2000">20:00</option>
</select>
</td>
<td width="100">
<select id="eindtijd' . $temp . '" name="eindtijd' . $temp . '">
<option value='.$data[$i]["eindtijd"].' selected>'.$eTijd[0].':'.$eTijd[1].'</option>
<option value="1000">10:00</option>
<option value="1030">10:30</option>
<option value="1100">11:00</option>
<option value="1130">11:30</option>
<option value="1200">12:00</option>
<option value="1230">12:30</option>
<option value="1300">13:00</option>
<option value="1330">13:30</option>
<option value="1400">14:00</option>
<option value="1430">14:30</option>
<option value="1500">15:00</option>
<option value="1530">15:30</option>
<option value="1600">16:00</option>
<option value="1630">16:30</option>
<option value="1700">17:00</option>
<option value="1730">17:30</option>
<option value="1800">18:00</option>
<option value="1830">18:30</option>
<option value="1900">19:00</option>
<option value="1930">19:30</option>
<option value="2000">20:00</option>
<option value="2030">20:30</option>
<option value="2100">21:00</option>
<option value="2130">21:30</option>
<option value="2200">22:00</option>
<option value="2230">22:30</option>
<option value="2300">23:00</option>
<option value="2330">23:30</option>
<option value="000">0:00</option>
<option value="030">0:30</option>
<option value="100">1:00</option>
<option value="130">1:30</option>
<option value="200">2:00</option>
<option value="230">2:30</option>
<option value="300">3:00</option>
<option value="330">3:30</option>
<option value="400">4:00</option>
</select>
</td>
<td width="100" id="uren' . $temp . '"><input class="gewerkteuren" type="text" value="'.($data[$i]["gewerkteUren"]/10).'" name="uren' . $temp . 'berekend" id="uren' . $temp . 'berekend" readonly></td>
<td width="150" id="delete"><a href="getInfo.php?type=delete&id='.$data[$i]["registratieID"]. '"><button type="button" class="btn btn-red btn-icon">Werknemer verwijderen<i class="entypo-cancel"></i></button></a></td>
</tr>';
}
echo '<input type="hidden" id="items" name="items" value="' . $lengte . '" />';
}
}
?>