繁体   English   中英

在 PHP 中使用 MySql 数据行值作为 html 表头和分区

[英]Using MySql data row value as html table headers and divisions in PHP

我想根据 MySql 数据动态生成一个 HTML 表,用户将能够直接在页面上更新该表(通过 JQuery 和 Ajax)。 将在表schedule中一次性插入整年的周行。 每周分配给的用户不超过 2 个。 可以随时删除用户并替换为另一个用户。 每行的第一个表格列包含所有用户,然后每一列代表全年从星期二到星期二的一周。 预期的 HTML 结果:

+-------+--------------------------+--------------------------+--------------------------+
| Users | 2019-03-19 to 2019-03-26 | 2019-03-26 to 2019-04-02 | 2019-04-02 to 2019-04-09 |
+-------+--------------------------+--------------------------+--------------------------+
| 1     |                          |                          |                          |
+-------+--------------------------+--------------------------+--------------------------+
| 2     |             X            |             X            |                          |
+-------+--------------------------+--------------------------+--------------------------+
| 3     |             X            |                          |                          |
+-------+--------------------------+--------------------------+--------------------------+
| 4     |                          |                          |                          |
+-------+--------------------------+--------------------------+--------------------------+
| 5     |                          |             X            |                          |
+-------+--------------------------+--------------------------+--------------------------+

架构:表schedule

+-------------+------------+------------+------------+------------+
| schedule_id | user1      | user2      | dateStart  | dateEnd    |
| PK AUTO_INC | FK int(11) | FK int(11) | date       | date       |
+-------------+------------+------------+------------+------------+
| 1           | 3          | 2          | 2019-03-19 | 2019-03-26 |
+-------------+------------+------------+------------+------------+
| 2           | 5          | 2          | 2019-03-26 | 2019-04-02 |
+-------------+------------+------------+------------+------------+
| 3           | null       | null       | 2019-04-02 | 2019-04-09 |
+-------------+------------+------------+------------+------------+

用户正在逐步分配。 user1user2列允许为null ,稍后有人可以输入特定周的用户。

我需要检查 PHP 是否已经分配了一个或两个用户,然后有人可以使用用户 ID 或 null(删除用户)更新一行。 为此,我使用变量$set1$set2以及data-attributes (稍后与 jQuery 一起使用)告诉我哪一周有用户在user1user2

我可以用所有必要的数据回显表<th> 现在我的问题是如何回显表<td> 我需要找到一种方法来为每个用户生成<tr>和为每个<th> <td> ,同时匹配用户 ID 值。

因此,如果在<th>插入的周分配了用户 2,我将在用户 2 行上的<th>下方的<td>中添加一个“X”(参见上面的预期结果)。

我在想 myabe 我可以运行另一个 MySql 查询和 while 循环来按用户回显并按日期排序吗?

到目前为止我的代码:

// Connect to database decyb
include 'dbconnect.php';

// MySQL query
$getUpdateDispoEnq = "
SELECT dispo_enq.*,
u1.firstName as enq1First, 
u1.lastName as enq1Last, 
u2.firstName as enq2First, 
u2.lastName as enq2Last
FROM dispo_enq
JOIN users u1 ON dispo_enq.userEnq1 = u1.user_id
JOIN users u2 ON dispo_enq.userEnq2 = u2.user_id;"; 

    // Prepared statements
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $getUpdateDispoEnq)){
        echo '<div class="red-text" style="margin-top: 1em">SQL error!</div>';
        exit;
    } else {

        mysqli_stmt_execute($stmt);

        $results = mysqli_stmt_get_result($stmt);
        $resultCheck = mysqli_num_rows($results);

        $week = 0;

        echo '<table class="dispo-enq">';
        echo '<tr>';
        echo '<th class="regular"><div><span>Enquêteurs</span></div></th>';
        echo '<th class="regular"><div><span>Cellulaire</span></div></th>';

        if ($resultCheck > 0) {

            while ($row = mysqli_fetch_assoc($results)) {
            $enq1 = $row['userEnq1'];
            $enq2 = $row['userEnq2'];
            $dateStart = $row['dateStart'];
            $dateEnd = $row['dateEnd'];
            $week++;

                // Check if users are set
                if ($enq1 > 0){
                    $set1 = 1;
                } else {
                    $set1 = 0;
                }

                if ($enq2 > 0){
                    $set2 = 1;
                } else {
                    $set2 = 0;
                }

                // Display table headers
                echo '<th class="rotate" data-week="'.$week.'" data-enq1="'.$set1.'" data-enq2="'.$set2.'"><div><span>'.$dateStart.' to '.$dateEnd.'</span></div></th>';
            }

        }

        echo '</tr>';
        echo '</table>';
        exit;
    }

你的任务在某种程度上与我的相似,但由于我可以得到我在那里使用的代码,所以我决定在这么短的时间内简单地发布我能从大脑中得到的东西。

// MySQL query
$getUpdateDispoEnq = "
SELECT dispo_enq.*, u1.firstName as enq1First, u1.lastName as enq1Last, u2.firstName as enq2First, u2.lastName as enq2Last
FROM dispo_enq
JOIN users u1 ON dispo_enq.userEnq1 = u1.user_id
JOIN users u2 ON dispo_enq.userEnq2 = u2.user_id;"; 

$html = '';
// Prepared statements
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $getUpdateDispoEnq)){
    $html .= '<div class="red-text" style="margin-top: 1em">SQL error!</div>';
    exit;
} else {
    mysqli_stmt_execute($stmt);

    $results = mysqli_stmt_get_result($stmt);
    $resultCheck = mysqli_num_rows($results);

    $week = $set1 = $set2 = 0;
    $dateStart = $dateEnd = '';
    $html .= '<table class="dispo-enq"><tr>';
    $html .= '<th class="regular"><div><span>Enquêteurs</span></div></th>';
    $html .= '<th class="regular"><div><span>Cellulaire</span></div></th>';

    if ($resultCheck > 0) {
        while ($row = mysqli_fetch_assoc($results)) {
            $enq1 = $row['userEnq1'];
            $enq2 = $row['userEnq2'];
            $dateStart = $row['dateStart'];
            $dateEnd = $row['dateEnd'];
            $week++;

            // Check if users are set
            if ($enq1 > 0) $set1 = 1;               
            if ($enq2 > 0) $set2 = 1;

            // Display table headers
            $html .= '<th class="rotate" data-week="'.$week.'" data-enq1="'.$set1.'" data-enq2="'.$set2.'">';
            $html .= '<div><span>'.$dateStart.' to '.$dateEnd.'</span></div></th>';
        }

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

    $result = mysql_query("SELECT firstName, lastName FROM users");
    while ($rows = mysql_fetch_assoc($result)) {
        $html .= '<tr>';
        $html = '<td>'.$week.'</td>';
        foreach ($rows as $row) $html .= '<td>'.$row.'</td>';
        $html = '<td>'.$dateStart.'</td>';
        $html = '<td>'.$dateEnd.'</td>';
        $html .= '</tr>';
    }

    $html .= '</table>';
    exit;
}

return $html; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM