2016-08-12 4 views
1

Ich versuche derzeit, ein Anwesenheitssystem zu machen, um Benutzer aus meiner Gaming-Community zu verfolgen. Von jetzt an möchte ich anhand der in der Datenbank angegebenen Daten zeigen, was aktuell in diesem Monat ist (Datum 1-11). Wenn die Tage während des Monats fortschreiten, würde die Anwendung dasselbe tun.Parse Daten pro Datum von Mysql

Vielen Dank im Voraus, habe versucht, dies für ein paar Tage jetzt herauszufinden. Hier

ist, was ich zur Zeit enter image description here

Mein aktueller Code

include('../../config/protection.php'); 
include('../../config/db.php'); 
date_default_timezone_set("America/Los_Angeles"); 
//Date formating 
$dateFormat = "Y-m-d H:i:s"; 

$begin = new DateTime('first day of this month'); 
$end = new DateTime('last day of this month'); 
$end = $end->modify('+1 day'); 
$interval = new DateInterval('P1D'); 
$daterange = new DatePeriod($begin, $interval ,$end); 
$daterange2 = new DatePeriod($begin, $interval ,$end); 


$date = new DateTime(); 
$date1 = new DateTime(); 
$dateString = $date1->format($dateFormat); 
$timestamp2 = strtotime($dateString); 
$month2 = date('j', $timestamp2); 
//generating days of the month 
$month = date('m', $timestamp2); 
$year = date('Y', $timestamp2); 

//select username ane id 
$sql = "SELECT * from rosters,ranks 
inner join user_ranks on user_ranks.rank_id=ranks.id 
where rosters.ruser_id = user_ranks.user_id 
GROUP BY rosters.rname 
ORDER BY ranks.id"; 

$results = mysqli_query($con, $sql); 
if(!$results and $mysqliDebug) { 
    echo "<p>There was an error in query: $results</p>"; 
    echo $con->error; 
} 
?> 
<table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example"> 
    <thead> 
     <tr> 
      <th class="center">Rank/Name</th> 
      <th class="center">Promotion Date</th> 
      <?php 
      foreach($daterange as $date) 
      { 
      echo '<th class="center">'.$date->format("d") . "</th>"; 
      } 
      ?> 
     </tr> 
    </thead> 
<tbody> 

<?php 
// $rows = array(); 
while($row = mysqli_fetch_assoc($results)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['rname'] . "</td>"; 
    echo "<td>N/A</td>"; 

    $userid1 = $row['ruser_id']; 
    // $rows[] = $row; 
    $attendsql = "SELECT * from attendances where user_id=$userid1"; 
    $attendresults = mysqli_query($con, $attendsql); 
    $arows = array(); 

    while($arow = mysqli_fetch_array($attendresults)) 
    { 
     $arows[] = $arow; 
    } 

    foreach($daterange as $date1) 
    { 
     foreach ($arows as $arow) 
     { 
      $date1String = $date1->format('Y-m-d'); 
      $createdOnDate = $arow['created_on']; 
      $createdDate = new DateTime($createdOnDate); 
      $attendanceDateString = $createdDate->format('Y-m-d'); 

      if ($attendanceDateString == $date1String) 
      { 
       echo '<td>True</td>'; 
      } 
      else 
      { 
       echo '<td>False</td>'; 
      } 
     } 
    } 

    echo "</tr>"; 
} 





?> 
    </tbody> 
</table> 
+0

Und was ist das Problem, Sie werden immer lösen? –

+0

@CoderDudeTwodee Es wird im Wesentlichen nicht an den Daten zurückgegeben, die in der Datenbank vorhanden sind. Es wird auf der ersten wahr, dann auf die andere falsch. – Ryahn

Antwort

3

Versuchen Sie, Ihre Schleife diese zu ändern bin immer:

foreach($daterange as $date1) 
{ 
    $attended = FALSE; 

    foreach ($arows as $arow) 
    { 
     $date1String   = $date1->format('Y-m-d'); 
     $createdOnDate  = $arow['created_on']; 
     $createdDate   = new DateTime($createdOnDate); 
     $attendanceDateString = $createdDate->format('Y-m-d'); 

     if ($attendanceDateString == $date1String) 
     { 
      $attended = TRUE; 
     } 
    } 

    if ($attended) 
    { 
     echo '<td>True</td>'; 
    } 
    else 
    { 
     echo '<td>False</td>'; 
    } 
} 

Im Grunde sieht es aus wie Sie mit dem Drucken sind eine Antwort für jede Zeile in der Datenbank für jedes Datum und nicht nur einen Wert pro Datum aus.

+0

Wenn ich dir ein Bier und Kuchen schicken könnte, würde ich es sofort tun. Das hat mich für ein paar Tage geplagt. Wenn ich mir ansehe, wie einfach das ist, will ich mich selbst in den Hintern treten. ICH DANKE DIR SEHR!!!!!! <3 – Ryahn

+0

Ihre Begrüßung. Froh, dass ich helfen konnte. :) – SilicaGel

2

Sie sollten dies schreiben. Dies wird dein Problem lösen.

include('../../config/protection.php'); 
    include('../../config/db.php'); 
    date_default_timezone_set("America/Los_Angeles"); 
    //Date formating 
    $dateFormat = "Y-m-d H:i:s"; 

    $begin = new DateTime('first day of this month'); 
    $end = new DateTime('last day of this month'); 
    $end = $end->modify('+1 day'); 
    $interval = new DateInterval('P1D'); 
    $daterange = new DatePeriod($begin, $interval ,$end); 
    $daterange2 = new DatePeriod($begin, $interval ,$end); 


    $date = new DateTime(); 
    $date1 = new DateTime(); 
    $dateString = $date1->format($dateFormat); 
    $timestamp2 = strtotime($dateString); 
    $month2 = date('j', $timestamp2); 
    //generating days of the month 
    $month = date('m', $timestamp2); 
    $year = date('Y', $timestamp2); 

    //select username ane id 
    $sql = "SELECT * from rosters,ranks 
    inner join user_ranks on user_ranks.rank_id=ranks.id 
    where rosters.ruser_id = user_ranks.user_id 
    GROUP BY rosters.rname 
    ORDER BY ranks.id"; 

    $results = mysqli_query($con, $sql); 
    if(!$results and $mysqliDebug) { 
     echo "<p>There was an error in query: $results</p>"; 
     echo $con->error; 
    } 
    ?> 
    <table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example"> 
     <thead> 
      <tr> 
       <th class="center">Rank/Name</th> 
       <th class="center">Promotion Date</th> 
       <?php 
       foreach($daterange as $date) 
       { 
       echo '<th class="center">'.$date->format("d") . "</th>"; 
       } 
       ?> 
      </tr> 
     </thead> 
    <tbody> 

    <?php 
    // $rows = array(); 
    while($row = mysqli_fetch_assoc($results)) 
    { 
     echo "<tr>"; 
     echo "<td>" . $row['rname'] . "</td>"; 
     echo "<td>N/A</td>"; 

     $userid1 = $row['ruser_id']; 
     // $rows[] = $row; 
     $attendsql = "SELECT * from attendances where user_id=$userid1"; 
     $attendresults = mysqli_query($con, $attendsql); 
     $arows = array(); 

     while($arow = mysqli_fetch_array($attendresults)) 
     { 
      $arows[] = $arow; 
     } 

     foreach($daterange as $date1) 
{ 
     $attended = FALSE; 
    foreach ($arows as $arow) 
    { 
     $date1String = $date1->format('Y-m-d'); 
     $createdOnDate = $arow['created_on']; 
     $createdDate = new DateTime($createdOnDate); 
     $attendanceDateString = $createdDate->format('Y-m-d'); 

     if ($attendanceDateString == $date1String) 
     { 
      $attended = TRUE; 
        } 
    } 
    if ($attended) 
    { 
        echo '<td>True</td>'; 
      } 
      else 
      { 
        echo '<td>False</td>'; 
      } 

} 

     echo "</tr>"; 
    } 


    ?> 
     </tbody> 
    </table> 

Dies wird Ihr Problem