2016-12-22 87 views
0

我有一個從數據庫中獲取數據的html表。將數據添加到html表

這裏是我的sql查詢:

// 1.Get data 
// data for final table 
// format is [username][projectNo] => [process1, process2, ..., processN] 
$result = []; 
// map project no to its title 
$projectNoToTitle = []; 
$sql = ' 
    SELECT uid, username, staff_id, longname 
    FROM `user` 
    ORDER BY username 
'; 
$query = mysqli_query($conn, $sql); 
// for each user 
while ($data = mysqli_fetch_assoc($query)) { 

    $sql2 = ' 
     SELECT a.* FROM 
     (
      (
       -- select pairs project - leader 
       SELECT p.projectNo, p.title, CONCAT(upr.process, (upr.role)) AS process 
       FROM project p 
       LEFT JOIN user_project upr ON p.projectNo = upr.projectNo 
        AND upr.username = "' . mysqli_real_escape_string($conn, $data['username']) . '" 
      ) 
     ) AS a 
     ORDER BY a.projectNo 
    '; 
    $query2 = mysqli_query($conn, $sql2); 
    // for each project => process pair of user 
    while ($data2 = mysqli_fetch_assoc($query2)) { 
     $staff_id = $data['staff_id']; 
     $longname = $data['longname'];  
     $username = $data['username']; 
     $projectNo = $data2['projectNo']; 
     $projectTitle = $data2['title']; 
     $process = $data2['process']; 

     $projectNoToTitle[$projectNo] = $projectTitle; 

     if (!isset($result[$username])) { 
      $result[$username] = []; 

     } 
     if (!isset($result[$username][$projectNo])) { 
      $result[$username][$projectNo] = []; 
     } 
     if ($process) { 
      $result[$username][$projectNo][] = $process; 
     } 
    } 
} 

然後我想在表中水平和垂直打印數據:

 <table style="background-color:rgb(238, 238, 238)" id="dataTable4" class="tablesorter" class="tblD" border="0" cellpadding="0" cellspacing="1"> 
     <?php 

// 2. Output table 
// create table header 
// it's columns should contain all projects 
if ($result) { 
    $header ='<th>Staff ID</th> 
       <th>Full Name</th> 
       <th>Username</th>' . 
    array_reduce(array_values($projectNoToTitle), function ($p, $n) { 
     return $p . '<th>Project ' . htmlspecialchars($n) . '</th>'; 
       }); 

    // output body 
    $body = ''; 
    foreach ($result as $username => $usernameData) { 
     $row = '<td>' . htmlspecialchars($longname) . '</td>' . '<td>' . htmlspecialchars($staff_id) . '</td>' . '<td>' . htmlspecialchars($username) . '</td>'; 
     foreach ($projectNoToTitle as $projectNo => $projectTitle) { 
      $r = isset($usernameData[$projectNo]) 
      ? implode(', ', $usernameData[$projectNo]) 
       : 'N/A'; 
       $row .= '<td>' . htmlspecialchars($r) . '</td>'; 
     } 
      $body .= "<tr>$row</tr>"; 
    } 
    echo "<thead>$header</thead><tbody>$body</tbody>"; 
}// \2. Output table 
?> 

我能夠打印的用戶名,但與staff_idlongname有問題。這是我現在的輸出結果。

output

系統從表中的用戶名取姓並打印在清單

+0

只有通過內'而打印的用戶信息的第一時間'循環。將這些列留在其他行上留空。 – Barmar

+0

那麼你的問題是什麼? – PavKR

+0

@PavKR如何正確打印staff_id和longname –

回答

1

中所有用戶的問題是,你不把$longname$staff_id$results陣列。打印表格時,只需使用那些包含數據庫中最後一個用戶的值的變量。

更改處理該數據庫的結果到環路:

while ($data2 = mysqli_fetch_assoc($query2)) { 
    $staff_id = $data['staff_id']; 
    $longname = $data['longname'];  
    $username = $data['username']; 
    $projectNo = $data2['projectNo']; 
    $projectTitle = $data2['title']; 
    $process = $data2['process']; 

    $projectNoToTitle[$projectNo] = $projectTitle; 

    if (!isset($result[$username])) { 
     $result[$username] = [ 'longname' => $longname, 'staff_id' => $staff_id, 'projects' => []]; 
    } 
    if (!isset($result[$username]['projects'][$projectNo])) { 
     $result[$username]['projects'][$projectNo] = []; 
    } 
    if ($process) { 
     $result[$username]['projects'][$projectNo][] = $process; 
    } 
} 

然後該構建代碼表應該是:

foreach ($result as $username => $usernameData) { 
    $row = '<td>' . htmlspecialchars($usernameData['longname']) . '</td>' . '<td>' . htmlspecialchars($usernameData['staff_id']) . '</td>' . '<td>' . htmlspecialchars($username) . '</td>'; 
    foreach ($projectNoToTitle as $projectNo => $projectTitle) { 
     $r = isset($usernameData['projects'][$projectNo]) 
      ? implode(', ', $usernameData['projects'][$projectNo]) 
      : 'N/A'; 
     $row .= '<td>' . htmlspecialchars($r) . '</td>'; 
    } 
    $body .= "<tr>$row</tr>"; 
}