[英]Create a HTML table with headings from two SQL Tables
我正在嘗試使用PHP和MySQL創建一個簡單的文件上傳系統。 我創建了一個包含兩個表的數據庫,結構如下:
文件表
+---+------------------+--------------+
| # | Name | Type |
+---+------------------+--------------+
| 1 | file_id | int |
| 2 | file_name | varchar |
| 3 | file_size | int |
| 4 | file_type | varchar |
| 5 | folder | int |Foreign Key to folders.folder_id
| 6 | user_Id | int |
| 7 | upload_time | timestamp |
| 8 | modify_time | timestamp |
+---+------------------+--------------+
文件夾表
+---+------------------+--------------+
| # | Name | Type |
+---+------------------+--------------+
| 1 | folder_id | int |
| 2 | name | varchar |
| 3 | subfolder | int |
+---+------------------+--------------+
文件查詢
SELECT *
FROM files
JOIN folders
ON folders.folder_id = files.folder
ORDER BY folders.subfolder ASC,
folders.folder_id ASC
文件夾查詢
SELECT * FROM folders
這些表都回顯到HTML表中。 為此,我有兩個單獨的查詢運行,一個回顯文件夾並將它們顯示在表格上,另一個回顯文件並將它們列在文件夾列表下方。
而不是列出所有文件夾,然后列出我希望文件列在其相關文件夾下面的所有文件。
這是我的表當前顯示的方式:
Table Heading
-------------
folder
folder2
folder3
file1
file2
file3
file4
這就是我想要的方式:
Table Heading
-------------
folder
file1
file2
folder2
file3
folder3
file4
准備好的語句被設計為在循環中多次執行,這是一個使用一個的好例子:
<?php
// prepare the statement for use later
$folderId = 0;
$stmt = $connectionUploads->prepare("SELECT * FROM files WHERE folder = ?");
$stmt->bind_param("i", $folderId);
$queryGetFolders = "SELECT * FROM folders";
$resultGetFolders = mysqli_query($connectionUploads, $queryGetFolders);
if ($resultGetFolders->num_rows != 0) {
// loop through the folder list
while ($rowFolders = $resultGetFolders->fetch_assoc()) {
$folderName = ucwords($rowFolders['name']);
echo "<h1>$folderName</h1>";
// put the new value in $folderId
$folderId = $rowFolders['folder_id'];
// execute the query
$stmt->execute();
$resultGetFiles = $stmt->get_result();
if ($resultGetFiles->num_rows == 0) {
echo "<p>No files</p>";
else {
// loop through the results as normal
while ($rowFiles = $resultGetFiles->fetch_assoc()) {
echo "<p>$rowFiles[file_name]</p>";
}
}
}
}
請注意,使用“普通”數據庫查詢沒有固有的安全問題。 當您將用戶提供的輸入添加到查詢字符串時,會出現問題。 然后准備好的陳述是必須的。 除了在循環中查詢時減少開銷(如上所述),它們還自動清理用戶輸入。
例如,您可以嘗試創建兩個php函數來調用各種數據庫表
function fetch($query){
while($row = $query->fetch_array(MYSQLI_ASSOC)){
$result[] = $row;
}
return $result;
}
function getArray($a, $b, $c, $d){
$array = mysqli_fetch_array(mysqli_query($a, "SELECT * FROM $b WHERE $c = '$d' ORDER BY $c DESC LIMIT 1"));
return $array;
}
然后使用foreach
迭代器獲取每個文件的associative array
,然后使用folder
列,您可以獲取找到文件的每個文件夾的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.