2017-05-16 2 views
1

Ich versuche, ein monatliches Anwesenheitssystem zu schaffen, das zeigt, wie viele Stunden ein Mitarbeiter jeden Tag des month.The Tisches wie this- monthly attendance sample picphp monatliche Anwesenheits Tabelle

sieht gearbeitet hat

Das PHP-Code -

$s = $_GET['s']; 
$y = date('Y'); 

$fdt = date('Y-m-d',strtotime($y.'-'.$s.'-'.'01')); 
$ldt = date('Y-m-t',strtotime($y.'-'.$s.'-'.'01')); 
$nd = date('t',strtotime($y.'-'.$s.'-'.'01')); 
$stmt = $pdo->prepare("SELECT emp_id_fk, Resource_Name , ROUND(SUM(TIME_TO_SEC(TIMEDIFF(COALESCE(`end_time`,NOW()),`start_time`)))/3600,1) as Hrs, CAST(`start_time` AS DATE) as cd FROM `attendance` LEFT JOIN resource ON attendance.`emp_id_fk` = resource.`Resource_ID` WHERE CAST(`start_time` AS DATE) BETWEEN :s AND :e GROUP BY emp_id_fk, Resource_Name, CAST(`start_time` AS DATE)"); 

$stmt->bindParam(':s', $fdt); 
$stmt->bindParam(':e', $ldt); 

$stmt->execute(); 
$data = $stmt->fetchAll(); 
print_r($data); 
$ret = ""; 
$id = array_column($data,'emp_id_fk'); 
$name = array_column($data,'Resource_Name'); 
$id = array_unique($id); 
$name = array_unique($name); 

for($i=0;$i<sizeof($id); $i++){ 
    $ret.='<tr> 
      <td>'.$name[$i].'</td>'; 

     for($j=0; $j<sizeof($nd); $j++){ 
      $cd = date('Y-m-d',strtotime($y.'-'.$s.'-'.($j+1))); 
      $d = date('l',strtotime($y.'-'.$s.'-'.($j+1))); 

      if($d != 'Sunday' && $d != 'Saturday'){ 

       for($k=0; $k<sizeof($data); $k++){ 

        if($id[$i] == $data[$k]['emp_id_fk']){ 

         if($cd == $data[$k]['cd']){ 
          $ret.='<td>'.($data[$k]['Hrs']).'</td>'; 
         }else{ 
          $ret.='<td>0</td>'; 
         } 
        } 
       } 
      } 

     } 
    $ret.='</tr>'; 
} 

echo $ret; 

Wie im Bild zu sehen ist, iteriert der zweite Forloop ($ j-Schleife) nur einmal, wie es 28,30 oder 31 Mal basierend auf dem Monat durchlaufen sollte. Was meine erwartete Ausgabe ist, dass für jeden Angestellten ein Wert für jeden Tag der Woche sein sollte und wenn es keinen Datensatz für ein bestimmtes Datum gibt, sollte es 0 anzeigen.

Vielen Dank im Voraus.

+1

Von dem, was ich sehen kann, $ j

+0

Ich hoffe, dass Sie eine 64-Bit-Version von PHP ausführen. Wenn nicht, sollten Sie sich das DateTime-Objekt genauer ansehen: http://php.net/manual/en/class.datetime.php. Jahr 2038 Problem: https://en.wikipedia.org/wiki/Year_2038_problem – ctwheels

Antwort

2

Die PHP-Funktion sizeof() ist ein Alias ​​für count(). Die Funktion count() zählt alle Elemente in einem Array oder etwas in einem Objekt.

Wechsel:

for($j=0; $j<sizeof($nd); $j++){ 

An:

for($j=1; $j<=$nd; $j++) { 
+0

danke! Anfängerfehler .. –

+0

Gern geschehen! Ich stehe auch bei solchen Dingen ratlos, wenn ich an dem Tag zu viel in dem Code war. Manchmal ist es einfach gut, noch einmal Augen zu haben. :-) – Cagey215

Verwandte Themen