【问题标题】:Table prints multiple column headers while filtering results表格在过滤结果时打印多个列标题
【发布时间】:2015-03-21 00:59:27
【问题描述】:

过滤结果后如何阻止表格打印多个列标题?示例如下所示

我的代码

function fillQueryData() {
                $dbName = $_REQUEST ['db'];
                $link = mysqli_connect ( '192.168.2.113', 'root', '', $dbName );
                if (! $link) {
                        die ( "Connection failed" . mysqli_errno ( $link ) );
                }
                if (isset ( $_POST ['name'] )) {
                        $name = trim ( $_POST ['name'] );
                        $tblName = $_REQUEST ['tbl'];
                        $colqry = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$dbName' AND TABLE_NAME = '$tblName'";
                        $col_names = mysqli_query ( $link, $colqry );
                        while ( $col = mysqli_fetch_array ( $col_names, MYSQLI_ASSOC ) ) {
                                $colName = $col ['COLUMN_NAME'];
                                $tblQry = "SELECT * FROM $tblName WHERE $colName='$name' LIMIT 15";
                                $query2 = mysqli_query ( $link, $tblQry );

                        echo "<table><tr>";
                        $i = 0;
                        while ( $i < mysqli_num_fields ( $query2 ) ) {
                                $meta = mysqli_fetch_field_direct ( $query2, $i );
                                echo "<th>" . $meta->name . "</th>";
                                $i = $i + 1;
                        }
                        echo "</tr>";

                        $i = 0;
                        while ( $row = mysqli_fetch_row ( $query2 ) ) {
                                echo "<tr>";
                                $count = count ( $row );
                                $y = 0;
                                while ( $y < $count ) {
                                        $c_row = current ( $row );
                                        echo "<td>" . $c_row . "</td>";
                                        next ( $row );
                                        $y = $y + 1;
                                }
                                echo "</tr>";
                                $i = $i + 1;
                        }
                        echo "</table>";
        }       }
        }

我不想将表数据 while 循环放在我的列名 while 循环中,但如果我不这样做,我不会在行中得到任何结果。如何解决此问题,以便仅显示过滤后的结果??

【问题讨论】:

    标签: php html mysql html-table


    【解决方案1】:

    列标题循环应该在数据获取循环之外

    代码应该是这样的。

    function filterTblData() {
        $dbName = $_REQUEST ['db'];
        $link = mysqli_connect ( '192.168.2.113', 'root', '', $dbName );
        if (! $link) {
            die ( "Connection failed" . mysqli_errno ( $link ) );
        }
        if (isset ( $_POST ['name'] )) {
            $name = trim ( $_POST ['name'] );
            $tblName = $_REQUEST ['tbl'];
            // Dynamically select the column names of the chosen table.
            $colqry = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$dbName' AND TABLE_NAME = '$tblName'";
            $col_names = mysqli_query ( $link, $colqry );
            $col = mysqli_fetch_array ( $col_names, MYSQLI_ASSOC );
            $colName = $col ['COLUMN_NAME'];
            // Selecting and filtering results based on matching search terms.
            $tblQry = "SELECT * FROM $tblName WHERE $colName='$name' LIMIT 15";
            $query2 = mysqli_query ( $link, $tblQry );
    
            echo "<table><tr>";
            // Loop for fetching table column headers and riprinting them.
            $i = 0;
            while ( $i < mysqli_num_fields ( $query2 ) ) {
                $meta = mysqli_fetch_field_direct ( $query2, $i );
                echo "<th>" . $meta->name . "</th>";
                $i = $i + 1;
            }
            echo "</tr>";
            // Fetch row data and populate
            while ( $col = mysqli_fetch_array ( $col_names, MYSQLI_ASSOC ) ) {
                $colName = $col ['COLUMN_NAME'];
                // Selecting and filtering results based on matching search terms.
                $tblQry = "SELECT * FROM $tblName WHERE $colName='$name' LIMIT 15";
                $query2 = mysqli_query ( $link, $tblQry );
                $i = 0;
                while ( $row = mysqli_fetch_row ( $query2 ) ) {
                    echo "<tr>";
                    $count = count ( $row );
                    $y = 0;
                    while ( $y < $count ) {
                        $c_row = current ( $row );
                        echo "<td>" . $c_row . "</td>";
                        next ( $row );
                        $y = $y + 1;
                    }
                    echo "</tr>";
                    $i = $i + 1;
                }
            }
            echo "</table>";
        }
    }
    filterTblData();
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多