Как отделить одну html-таблицу, сгенерированную данными базы данных, от самой себя, если столбцы выходят за пределы страницы? - PullRequest
0 голосов
/ 03 июля 2019

Ниже приведена таблица HTML, которая систематически генерировалась из базы данных MySQL и создавалась с использованием TCPDF. Каждый столбец генерируется на основе количества анализов, которые были введены пользователем. Как показано на рисунке, систематическое создание таблицы становится проблемой, когда столбцов становится больше, чем умещается на странице.

Что я хочу сделать, так это разрешить создание только 4 столбцов, а затем добавить соответствующие результаты, как показано, а затем под первой таблицей сгенерировать секунду со следующими 4 столбцами и так далее.

Кто-нибудь знает простой способ, которым это можно сделать?

Если не существует простого способа, то манипулирование кодом PHP является единственной возможностью. Мне не разрешено показывать весь код (требования клиента), однако я могу показать раздел, который генерирует столбцы.

$micro_analysis - это числа, разделенные запятыми, такие как: 1,2,3,4, которые соответствуют первичному ключу, то есть имени анализа, из таблицы microbiology_analysis_database, просто для большей ясности.

Любая помощь будет оценена.

    $sqla = "SELECT * FROM samples_database WHERE order_id=$order_id AND sample_group='$group' AND $analysis!='';";
    $resulta = mysqli_query($conn, $sqla);

    $sqlb = "SELECT * FROM samples_database WHERE order_id=$order_id AND sample_group='$group' AND $analysis!='';";
    $resultb = mysqli_query($conn, $sqlb);


    $micro_analysis = '';
    while($input = mysqli_fetch_array($resultb)) {
        $micro_analysis .= $input[$analysis] . ',';
    }

    $micro_analysis_arr = array_filter(array_unique(explode(',', $micro_analysis)));

    $array_size = count($micro_analysis_arr);

    if (mysqli_num_rows($resulta) > 0) {

        $html .= '
        <table border="1" cellspacing="0" cellpadding="3">      
        <thead>
        <tr>';
        //<th><strong>Lab ID</strong></th>
        $html .= '<th width="200px"><strong>Client ID</strong></th>';

        foreach ($micro_analysis_arr as $row1) {
            $query = "SELECT * FROM microbiology_analysis_database WHERE id=$row1 AND analysis_type='$analysis_type';"; 
            $resultc = mysqli_query($conn, $query);
            $inputc = mysqli_fetch_array($resultc);


            if (empty($inputc['analysis_sample_type'])) {
                $html .= '<th style="text-align:center;"><strong>'.$inputc['analysis_name'].'<br /> ('.$inputc['analysis_unit'].')</strong></th>';
            } else {
                $html .= '<th style="text-align:center;"><strong>'.$inputc['analysis_name'].'<br /> ('.$inputc['analysis_unit'].')</strong></th>';
            }
        }

        $html .= '
        </tr>                           
        </thead>
        <tbody>';

while ($row = mysqli_fetch_assoc($resulta)) {

                    $sam_id = $row['sample_id'];

                    $sql3 = "SELECT * FROM samples_database WHERE order_id=$order_id AND $analysis!='' AND sample_group='$group' AND sample_id=$sam_id;";
                    $result3 = mysqli_query($conn, $sql3);

                    $micro_analysis2 = '';

                    while($input = mysqli_fetch_array($result3)) {
                        $micro_analysis2 .= $input[$analysis] . ',';
                    }
                    $micro_analysis_arr_2 = array_filter(array_unique(explode(',', $micro_analysis2)));


                    $html .= '
                    <tr>'; 
                //<td>'.$row['env_sam_id'].'</td>
                    $html .= '<td>'.$row['c_sam_id'].'</td>';

                    foreach ($table as $row2) {

                //if statement to select sample with corresponding analysis

                        if (!in_array($row2, $micro_analysis_arr_2)) {

                            $html .= '<td></td>';

                        } else {

                            $query5 = "SELECT * FROM results_database WHERE order_id=$order_id AND sample_id=$sam_id AND m_analysis_id=$row2"; 
                            $result5 = mysqli_query($conn, $query5);
                            $input5 = mysqli_fetch_array($result5);
                            $result_id = $input5['id']; 

                            $query6 = "SELECT * FROM analysis_database WHERE order_id=$order_id AND m_analysis_id=$row2"; 
                            $result6 = mysqli_query($conn, $query6);
                            $input6 = mysqli_fetch_array($result6);
                            $step_10_progress = $input6['step_10_progress'];

                            if (empty($input5['result'])) {

                                $html .= '<td style="text-align:center;"><em>Analysis Pending</em></td>'; 

                            } else {

                                $html .= '<td style="text-align:center;">'.htmlspecialchars($input5['result']).'</td>';

                            }                   
                        }
                    }

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

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

Table

1 Ответ

0 голосов
/ 03 июля 2019

Звучит так, как будто вы хотите использовать функцию array_chunk , а затем перебрать получившиеся массивы, например, так:

    $sqla = "SELECT * FROM samples_database WHERE order_id=$order_id AND sample_group='$group' AND $analysis!='';";
    $resulta = mysqli_query($conn, $sqla);

    $sqlb = "SELECT * FROM samples_database WHERE order_id=$order_id AND sample_group='$group' AND $analysis!='';";
    $resultb = mysqli_query($conn, $sqlb);


    $micro_analysis = '';
    while($input = mysqli_fetch_array($resultb)) {
        $micro_analysis .= $input[$analysis] . ',';
    }

    $micro_analysis_arr = array_filter(array_unique(explode(',', $micro_analysis)));

    $array_size = count($micro_analysis_arr);

    // Chunk the array into smaller parts
    $tables = array_chunk($micro_analysis_arr, 4);

    if (mysqli_num_rows($resulta) > 0) {

        // Loop through 4-part arrays as unique tables
        foreach($tables as $table) {

        $html .= '
        <table border="1" cellspacing="0" cellpadding="3">      
        <thead>
        <tr>';
        //<th><strong>Lab ID</strong></th>
        $html .= '<th width="200px"><strong>Client ID</strong></th>';

        foreach ($table as $row1) {
            $query = "SELECT * FROM microbiology_analysis_database WHERE id=$row1 AND analysis_type='$analysis_type';"; 
            $resultc = mysqli_query($conn, $query);
            $inputc = mysqli_fetch_array($resultc);


            if (empty($inputc['analysis_sample_type'])) {
                $html .= '<th style="text-align:center;"><strong>'.$inputc['analysis_name'].'<br /> ('.$inputc['analysis_unit'].')</strong></th>';
            } else {
                $html .= '<th style="text-align:center;"><strong>'.$inputc['analysis_name'].'<br /> ('.$inputc['analysis_unit'].')</strong></th>';
            }
        }

        $html .= '
        </tr>                           
        </thead>
        <tbody>';

while ($row = mysqli_fetch_assoc($resulta)) {

                    $sam_id = $row['sample_id'];

                    $sql3 = "SELECT * FROM samples_database WHERE order_id=$order_id AND $analysis!='' AND sample_group='$group' AND sample_id=$sam_id;";
                    $result3 = mysqli_query($conn, $sql3);

                    $micro_analysis2 = '';

                    while($input = mysqli_fetch_array($result3)) {
                        $micro_analysis2 .= $input[$analysis] . ',';
                    }
                    $micro_analysis_arr_2 = array_filter(array_unique(explode(',', $micro_analysis2)));


                    $html .= '
                    <tr>'; 
                //<td>'.$row['env_sam_id'].'</td>
                    $html .= '<td>'.$row['c_sam_id'].'</td>';

                    foreach ($table as $row2) {

                //if statement to select sample with corresponding analysis

                        if (!in_array($row2, $micro_analysis_arr_2)) {

                            $html .= '<td></td>';

                        } else {

                            $query5 = "SELECT * FROM results_database WHERE order_id=$order_id AND sample_id=$sam_id AND m_analysis_id=$row2"; 
                            $result5 = mysqli_query($conn, $query5);
                            $input5 = mysqli_fetch_array($result5);
                            $result_id = $input5['id']; 

                            $query6 = "SELECT * FROM analysis_database WHERE order_id=$order_id AND m_analysis_id=$row2"; 
                            $result6 = mysqli_query($conn, $query6);
                            $input6 = mysqli_fetch_array($result6);
                            $step_10_progress = $input6['step_10_progress'];

                            if (empty($input5['result'])) {

                                $html .= '<td style="text-align:center;"><em>Analysis Pending</em></td>'; 

                            } else {

                                $html .= '<td style="text-align:center;">'.htmlspecialchars($input5['result']).'</td>';

                            }                   
                        }
                    }

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

                $html .= '</tbody></table>';

                }
            }
        }
    }
...