【问题标题】:Displaying database table records in a predefined html table cells在预定义的 html 表格单元格中显示数据库表格记录
【发布时间】:2016-02-29 15:13:26
【问题描述】:

我有一个名为 Table_I 的表,有 31 行。我想将每一行显示到一个包含 31 个单元格的预定义(现有)表中。也就是说,将每个表格行放入每个单独的表格单元格中。

 Table_I

      ID | Name  | Rowcol |
      .....................
       1 | ABC   |  3-1   | 
       2 | PQR   |  3-2   |      
       3 | XYZ   |  3-3   | 
       4 | MNO   |  3-4   | 
       5 | DEF   |  4-1   | 
       6 | QRS   |  4-2   |      
       7 | UVW   |  4-3   | 
       8 | IJK   |  4-4   | 

输出:

Predefined table

    | Cell 1 | Cell 2 | Cell 3 | Cell 4 |
    .....................................
    |  ABC   |   PQR  |   XYZ  |  MNO   |
    .....................................
    |  DEF   |   QRS  |   UVW  |  IJK   |

代码:

<?php

...Connection to DB...

$query="SELECT name, rowcol
        FROM  Teble_I
       ";

$params = array($_REQUEST['query']);

$results = sqlsrv_query($conn, $query, array(), array( "Scrollable" => 'static' ));

if($results===false)
 { die( FormatErrors( sqlsrv_errors() ) ); }

if($results===false)
 { die( FormatErrors( sqlsrv_errors() ) ); }

$r=3; 
$c=1;

while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 
    { 

?>

<body>
<table width="200" border="1">
<tr>
<?php   
    if($row['rowcol']==$r ."-". $c) 
        {
            echo "<td>".$row['name']."<td>"; 
            echo "<td>".$row['name']."<td>";
            echo "<td>".$row['name']."<td>";
            echo "<td>".$row['name']."<td>";  
        }

    $c++;

    if ($r==3 && $c==5 || $r==4 && $c==5) 
        {
            $r++; 
            $c=1; 
        }

?>

 </tr> 
<tr>
<?php
    if($row['rowcol']==$r ."-". $c) 
        {
            echo "<td>".$row['name']."<td>"; 
            echo "<td>".$row['name']."<td>";
            echo "<td>".$row['name']."<td>";
            echo "<td>".$row['name']."<td>";  
        }

    $c++;

    if ($r==3 && $c==5 || $r==4 && $c==5) 
        {
            $r++; 
            $c=1; 
        }
    }
?>

 </tr>

</table>

预期输出:

    | Cell 1 | Cell 2 | Cell 3 | Cell 4 |
    .....................................
    |  ABC   |   PQR  |   XYZ  |  MNO   |
    .....................................
    |  DEF   |   QRS  |   UVW  |  IJK   |

我们确实需要帮助并感谢他们。

提前致谢。

【问题讨论】:

  • 连接到数据库,查询数据库,遍历结果并准备输出。我没有包含代码,因为我不想让阅读本文的人感到困惑。
  • 哈哈@Typoheads...不过感谢您的回复。我已经完成了连接、数据库查询和循环,但无济于事。我将修改原始问题并包含我现在的代码。

标签: php html sql sql-server


【解决方案1】:

使用动态 sql 查询。

查询

declare @sql as varchar(max);

select @sql = 'select ' + stuff(
    (
        select distinct ',max(case ID when ' + cast(ID as varchar(2)) + ' 
               then Name end) as [Cell ' + cast(ID as varchar(2)) + ']'
        from Table_I
        for xml path('')
    ),
    1, 1, ''
);
select @sql += ' from Table_I;'
execute(@sql);

【讨论】:

  • 谢谢乌拉斯。老实说,我感谢您的回复,但我对您的解决方案更加困惑。我还是 PHP 新手,但我尽一切努力学习更快。
【解决方案2】:

一个非常基本的示例,可能适合您的需求。 $data 仅用于演示目的,应该是您的 SQL 数据。

$data = [
    ['ID' => 1, 'Name' => 'ABC', 'Rowcol' => '3-1'],    
    ['ID' => 2, 'Name' => 'PQR', 'Rowcol' => '3-2'],
    ['ID' => 3, 'Name' => 'XYZ', 'Rowcol' => '3-3'],
    ['ID' => 4, 'Name' => 'MNO', 'Rowcol' => '3-4'],
    ['ID' => 5, 'Name' => 'ABC', 'Rowcol' => '4-1'],    
    ['ID' => 6, 'Name' => 'PQR', 'Rowcol' => '4-2'],
    ['ID' => 7, 'Name' => 'XYZ', 'Rowcol' => '4-3'],
    ['ID' => 8, 'Name' => 'MNO', 'Rowcol' => '4-4']
];

$finalData = [];
foreach($data as $row) {
    $position = explode('-', $row['Rowcol']);

    $finalData[$position[0]][$position[1]] = $row['Name'];
}
print_r($finalData);
$output = "<table>";
$output .= "<tr>";
for($i=1;$i<=count(reset($finalData));$i++) {
    $output .= "<th>Cell " . $i . "</th>";
}
$output .= "</tr>";
foreach($finalData as $row) {
    $output .= "<tr>";
    foreach($row as $column) {
        $output .= "<td>" . $column . "</td>";
    }
    $output .= "</tr>";
}
$output .= "</table>";

print $output;

$finalData 将是一个映射数组,每行和每列都有一个条目:

Array
(
    [3] => Array
        (
            [1] => ABC
            [2] => PQR
            [3] => XYZ
            [4] => MNO
        )

    [4] => Array
        (
            [1] => ABC
            [2] => PQR
            [3] => XYZ
            [4] => MNO
        )

)

【讨论】:

  • 再次感谢@Typoheads。我修改了我的问题。我希望这是有道理的,你能再次帮助我。
  • 你太棒了@Typoheads !!!我试过了,它可以工作,但问题是表中的值 ($data) 是用户从表单输入的值。它们不是预定义的。我使用:$row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC) 来获取表记录。
  • 用户是在Rowcol中也输入信息还是在Name中输入数据?
  • 没有。用户只输入Name
  • 那么问题出在哪里?而不是foreach($data ...)在while循环中使用sqlsrv_fetch_array()
【解决方案3】:

修改你的代码:

<body>
<table width="200" border="1">
<tr>
<?php   
$i=0
while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 
    { 
            $i++;
            echo "<td>".$row['name']."</td>";
            if ($i%4 == 0)
              echo "</tr><tr>";
 
    }

?>

 </tr> 
</table>

【讨论】:

  • 感谢@Rkand,但表格是预定义的。我之前尝试过与您的代码类似的东西,它为我绘制了一个新表格,而不是填充已创建的 html 表格中的单元格。
【解决方案4】:

谢谢各位!我用数组弄明白了。以下是我的做法:

    <?php

    ...Connection to DB...

    $query="SELECT name, rowcol
            FROM  Teble_I
           ";

    $params = array($_REQUEST['query']);

    $results = sqlsrv_query($conn, $query, array(), array( "Scrollable" => 'static' ));

    if($results===false)
     { die( FormatErrors( sqlsrv_errors() ) ); }

    if($results===false)
     { die( FormatErrors( sqlsrv_errors() ) ); }

// set array
$array = array();

//select and display record from database
while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 

    {
        // add each row returned into an array
          $array[] = $row;

    }

    ?>

    <body>
    <table width="200" border="1">
    <tr>
    <td><?php echo $array[0]['name']; ?></td>
    <td><?php echo $array[1]['name']; ?></td>
    <td><?php echo $array[2]['name']; ?></td>
    <td><?php echo $array[3]['name']; ?></td>
    </tr> 
    </table>

我好激动!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 2021-11-27
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多