bugfix> php > 投稿

MySqlデータに基づいてHTMLテーブルを動的に生成したいのですが、ユーザーは(JQueryとAjaxを介して)ページ上でテーブルを直接更新できます。 週の行は、テーブル schedule に一年中一度に挿入されます 。 毎週割り当てられるユーザーは2人までです。 ユーザーはいつでも削除して、別のユーザーに置き換えることができます。 各行の最初のテーブル列にはすべてのユーザーが含まれており、各列は1年全体の火曜日から火曜日までの週を表します。期待される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 |
+-------------+------------+------------+------------+------------+

ユーザーは徐々に割り当てられています。ザ・ user1  および user2  列は null を許可します  後で誰かが特定の週のユーザーを入力できます。

1人または2人のユーザーが既に割り当てられている場合、PHPで確認する必要があります。誰かがユーザーIDまたはnull(ユーザーの削除)で行を更新できます。 この目的のために、変数 $set1 を使用します  および $set2  および data-attributes  (後でjQueryで使用するため) user1 でユーザーがいる週を教えてください  または user2

テーブル <th> をエコーできます  必要なすべてのデータ。 今、私の質問は、テーブル <td> をエコーする方法です 。 <tr> を生成する方法を見つける必要がある  各ユーザーと <td> に対して  各 <th> に対して  ユーザーID値を一致させます。

したがって、週が <th> に挿入された場合  ユーザー2が割り当てられている場合、 <td> に「X」を追加します  その下の <th>  ユーザー2の行(上記の期待される結果を参照)。

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;
    }

回答 1 件
  • ある意味では私のタスクに似ていますが、そこで使用したコードを取得できるので、そのような短い通知の下で自分の脳から得られるものを単に投稿することにしました。

    // 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;
    
    

あなたの答え