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

在PHP中使用MySql数据行值作为html表头和分区,php,mysql,Php,Mysql,我想基于MySql数据动态生成一个HTML表,用户可以直接在页面上更新该表(通过JQuery和Ajax)。 将在表计划中一次性插入全年的周行。 每周分配给的用户不超过2个。 用户可以随时删除并替换为其他用户。 每行的第一列表格包含所有用户,然后每列代表一年中从星期二到星期二的一周。预期的HTML结果: +-------+--------------------------+--------------------------+--------------------------+ | Users

我想基于MySql数据动态生成一个HTML表,用户可以直接在页面上更新该表(通过JQuery和Ajax)。 将在表
计划中一次性插入全年的周行。
每周分配给的用户不超过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_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 |
+-------------+------------+------------+------------+------------+
用户正逐渐被分配。
user1
user2
列允许
null
,稍后有人可以输入特定一周的用户

我需要用PHP检查是否已经分配了一个或两个用户,然后有人可以用用户id或null(删除用户)更新一行。 为此,我使用变量
$set1
$set2
以及
数据属性
(稍后与jQuery一起使用)告诉我哪个星期有用户在
user1
user2

我可以用所有必要的数据回显表
。 现在我的问题是如何回显表
我需要找到一种方法,在匹配用户id值时,为每个用户和每个
查找generete

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

我在想myabe我可以运行另一个MySql查询,然后按用户和按日期排序循环回显

到目前为止,我的代码是:

// 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;
    }
//连接到数据库decyb
包括“dbconnect.php”;
//MySQL查询
$getUpdateDispoEnq=”
选择dispo_enq.*,
u1.firstName作为enq1First,
u1.lastName作为enq1Last,
u2.firstName作为enq2First,
u2.lastName作为enq2Last
来自dispo_enq
在dispo_enq.userEnq1=u1.user_id上加入用户u1
在dispo_enq.userEnq2=u2.user_id;”上加入用户u2;
//准备好的发言
$stmt=mysqli\u stmt\u init($conn);
如果(!mysqli_stmt_prepare($stmt,$getUpdateDispoEnq)){
回显“SQL错误!”;
出口
}否则{
mysqli_stmt_execute($stmt);
$results=mysqli\u stmt\u get\u result($stmt);
$resultCheck=mysqli_num_行($results);
$week=0;
回声';
回声';
回音“Enquêteurs”;
回声“赛璐珞”;
如果($resultCheck>0){
while($row=mysqli\u fetch\u assoc($results)){
$enq1=$row['userEnq1'];
$enq2=$row['userEnq2'];
$dateStart=$row['dateStart'];
$DATEND=$row['DATEND'];
$week++;
//检查是否设置了用户
如果($enq1>0){
$set1=1;
}否则{
$set1=0;
}
如果($enq2>0){
$set2=1;
}否则{
$set2=0;
}
//显示表格标题
回显“.$dateStart.”到“.$DATEND.”;
}
}
回声';
回声';
出口
}

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

//MySQL查询
$getUpdateDispoEnq=”
选择dispo_enq.*,u1.firstName作为enq1First,u1.lastName作为enq1Last,u2.firstName作为enq2First,u2.lastName作为enq2Last
来自dispo_enq
在dispo_enq.userEnq1=u1.user_id上加入用户u1
在dispo_enq.userEnq2=u2.user_id;”上加入用户u2;
$html='';
//准备好的发言
$stmt=mysqli\u stmt\u init($conn);
如果(!mysqli_stmt_prepare($stmt,$getUpdateDispoEnq)){
$html.='SQL错误!';
出口
}否则{
mysqli_stmt_execute($stmt);
$results=mysqli\u stmt\u get\u result($stmt);
$resultCheck=mysqli_num_行($results);
$week=$set1=$set2=0;
$dateStart=$dateEnd='';
$html.='';
$html.='Enquêteurs';
$html.=‘赛璐珞’;
如果($resultCheck>0){
while($row=mysqli\u fetch\u assoc($results)){
$enq1=$row['userEnq1'];
$enq2=$row['userEnq2'];
$dateStart=$row['dateStart'];
$DATEND=$row['DATEND'];
$week++;
//检查是否设置了用户
如果($enq1>0)$set1=1;
如果($enq2>0)$set2=1;
//显示表格标题
$html.='';
$html.=''.$dateStart.'至'$DATEND';
}
}
$html.='';
$result=mysql_query(“从用户中选择firstName、lastName”);
while($rows=mysql\u fetch\u assoc($result)){
$html.='';
$html='.$week';
foreach($row作为$row的行)$html.=''.$row';
$html='.$dateStart'.';
$html='.$dateEnd';
$html.='';
}
$html.='';
出口
}
返回$html;

谢谢您的回复。我认为第二个查询和foreach循环的方向是相同的。我将不得不修改您的答案,因为您没有按我的预期方式显示行。标题后面的每一行应类似于
用户名(重复$week)
。我会尝试类似的方法。因为我没有清楚地了解用户的表格。修改您的问题以包含mysql表,我将修改答案以满足您的需要。与此同时,要有礼貌地向上投票。我的问题不清楚。看到这个了吗
// 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;