bugfix> php > 投稿

適切な出力を得るのに問題があります。このようなテーブルがあります:

次のPHPコードを使用してテーブルを作成しています。

<?php 
include_once("includes/dbh.inc.php");
if(isset($_POST["r_id"])){
    $output = '';
    $query = "SELECT * FROM relatorioc WHERE datas = '".$_POST["r_id"]."'";
    $res = mysqli_query($conn, $query);
    $output .='
    <div class="table-responsive">
        <table class="table table-bordered">';
        while($row = mysqli_fetch_array($res)){                
            $output .= '
                `<tr>
                    <td>'.$row['linha'].'</td>
                    <td>'.$row['user'].'</td>
                    <td>'.$row['prob'].'</td>
                    <td>'.$row['res'].'</td>
                    <td>'.$row['timep'].'</td>
                    <td>'.$row['timei'].'</td>
                </tr>';
        }
        $output .= "</table></div>";
        echo $output;    
}

回答 3 件
  • 質問に答える前に、SQLインジェクションであるコードの明らかなセキュリティホールに注意することが重要です。SQLクエリに入る前に入力をエスケープしないでください。 ( $_POST["r_id"]

    今、あなたの質問のために、私がしたことは配列を作成することであり、whileループでは「linha」でグループ化された行を入力し、2つの foreach を使用して出力します 。また、SQLクエリで入力をエスケープしました。 ( mysqli_real_escape_string )     

    if (isset($_POST["r_id"])) {
        $output = '';
        $query = "SELECT * FROM relatorioc WHERE datas = '" . mysqli_real_escape_string($conn, $_POST["r_id"]) . "'";
        $res = mysqli_query($conn, $query);
        $data = [];
        while ($row = mysqli_fetch_array($res)) {
            $data[$row['linha']][] = $row;
        }
        $output .= '';
        foreach ($data as $linha => $items) {
            $output .= '<p>' . $linha . '</p>';
            $output .= '
            <div class="table-responsive">
                <table class="table table-bordered">';
            foreach ($items as $row) {
                $output .= '
                <tr>
                    <td>' . $row['linha'] . '</td>
                    <td>' . $row['user'] . '</td>
                    <td>' . $row['prob'] . '</td>
                    <td>' . $row['res'] . '</td>
                    <td>' . $row['timep'] . '</td>
                    <td>' . $row['timei'] . '</td>
                </tr>';
            }
            $output .= '</table></div>';
        }
        echo $output;
    }
    
    

  • 最初に「グループ化」クエリを作成し、colグループ化して他のクエリを作成する必要があります。Mysqlの経験が豊富でない場合は、他のより複雑なクエリも可能です。

    (最初のクエリで 'linha'でグループ化し、他の場所の前でwhere(first resul are = 'linha' value)

    select * from relatorioc datas = '"。$_ POST [" r_id "]。"' ";group by 'linha' 前 :  $query = "SELECT * FROM relatorioc WHERE datas = '"。$_ POST ["r_id"]。 "'"およびlinha = 'previous result';

    これはあなたにとって簡単な解決策です。

  • まず、必要に応じて結果をグループ化するクエリを作成します->:

    select * from relatorioc datas = '". $ _ POST [" r_id "]."' "; group by 'linha' with it will provide the necessary data to the following query ->: $ query = "SELECT * FROM relatoryc WHERE datas = '". $ _ POST ["r_id"]. "'" and linha = 'previous result';
    
    

あなたの答え