You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现MSSQL数据表格对齐:ORDER NUMBER与状态匹配问题

解决MSSQL数据表格对齐问题

我从MSSQL数据库获取数据,想要在表格中展示订单号、支付状态、订单状态三类信息,但当前PHP代码生成的表格里,订单号无法和对应的支付状态、订单状态对齐,没法形成规整表格。以下是我的代码和运行效果:

<!DOCTYPE html>
 <html>
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <link rel="stylesheet" type="text/css" href="css/clientsS.css">
     <title></title>
 </head>
 <body>
    <div class="BLOC1">
    <div class="NUMBER">
        <center><table>
            <tr>
                <th>NUMERO COMMANDE</th>
                <th>STATUT PAIEMENT</th>
                <th>STATUT COMMANDE</th>
            </tr>

            <tr>
                <td><?php
            //CONNEXION ODBC SERVER//
            $dsn="";
            $user="";
            $password="";
            $conn=odbc_connect($dsn
                ,$user, $password);

            //REQUETES
            $sql = <<<EOF
                    SELECT top 10 [enc_cmd_num]
                    FROM [encaissement]
                    WHERE enc_date= '20221220'
                    EOF;

            $results = odbc_exec($conn,$sql);
            

            while($resultrow = odbc_fetch_array($results)){ 
                echo $resultrow["enc_cmd_num"]."<br/>" ; }
                ?>

            </td>
        </div>

        <div class="TITRE">

            <td><?php
            //CONNEXION ODBC SERVER//
            $dsn="";
            $user="";
            $password="";
            $conn=odbc_connect($dsn,$user, $password);

            //REQUETES
            $sql = <<<EOF
                    SELECT top 10 [enc_paye]
                    FROM [encaissement]
                    WHERE enc_date= '20221220'
                    EOF;

            $results = odbc_exec($conn,$sql);

            //CONDITION
                while($resultrow = odbc_fetch_array($results)) {
                    switch($resultrow['enc_paye']){
                    case 0:
                        echo "<p>En attente paiement</p> \r\n";
                        break;
                    case 1:
                        echo "<p class='green'>Commande payée<p/>\r\n";
                        break;
                }

            }
?>
</td>
                <td><?php
            //CONNEXION ODBC SERVER//
            $dsn="";
            $user="";
            $password="";
            $conn=odbc_connect($dsn,$user, $password);

            //REQUETES
            $sql = <<<EOF
                    SELECT top 10 [enc_prepared]
                    FROM [encaissement]
                    WHERE enc_date= '20221220'
                    EOF;

            $results = odbc_exec($conn,$sql);

            //CONDITION

                while($resultrow = odbc_fetch_array($results)) {
                    switch($resultrow['enc_prepared']){
                    case 0:
                        echo "<p>Commande en attente</p> \r\n";
                        break;
                    case 1:
                        echo "<p class='yellow'>Commande en cours de préparation<p/>\r\n";
                        break;

                }

            }



?>

</td>
</tr>
</table>

</div>

表格对齐错误效果


问题原因

你现在的写法犯了两个关键错误:

  1. 把所有订单号、支付状态、订单状态分别塞进同一个<td>单元格,相当于三个单元格各装了10条数据,自然没法逐行对应对齐。
  2. 重复三次连接数据库,既浪费服务器资源,也可能因为三次查询的结果顺序不一致(虽然这里用了top10,但如果没有排序的话有风险),导致数据对应不上。

修正方案

只需要一次数据库连接,一次查询获取三个字段,然后循环每条数据生成一行表格即可:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="css/clientsS.css">
    <title></title>
    <style>
        .green { color: green; }
        .yellow { color: orange; }
        table { border-collapse: collapse; margin: 0 auto; }
        th, td { border: 1px solid #ccc; padding: 8px 12px; text-align: left; }
    </style>
</head>
<body>
    <div class="BLOC1">
        <div class="NUMBER">
            <table>
                <tr>
                    <th>NUMERO COMMANDE</th>
                    <th>STATUT PAIEMENT</th>
                    <th>STATUT COMMANDE</th>
                </tr>
                <?php
                // 只连接一次数据库
                $dsn = "";
                $user = "";
                $password = "";
                $conn = odbc_connect($dsn, $user, $password);

                // 一次查询获取需要的三个字段,建议加上排序保证顺序稳定
                $sql = <<<EOF
                        SELECT top 10 [enc_cmd_num], [enc_paye], [enc_prepared]
                        FROM [encaissement]
                        WHERE enc_date= '20221220'
                        ORDER BY enc_cmd_num
                        EOF;

                $results = odbc_exec($conn, $sql);

                // 循环每条数据,生成一行表格
                while($resultrow = odbc_fetch_array($results)){ 
                    echo "<tr>";
                    // 订单号
                    echo "<td>" . $resultrow["enc_cmd_num"] . "</td>";
                    
                    // 支付状态处理
                    echo "<td>";
                    switch($resultrow['enc_paye']){
                        case 0:
                            echo "<p>En attente paiement</p>";
                            break;
                        case 1:
                            echo "<p class='green'>Commande payée</p>";
                            break;
                    }
                    echo "</td>";

                    // 订单状态处理
                    echo "<td>";
                    switch($resultrow['enc_prepared']){
                        case 0:
                            echo "<p>Commande en attente</p>";
                            break;
                        case 1:
                            echo "<p class='yellow'>Commande en cours de préparation</p>";
                            break;
                    }
                    echo "</td>";
                    
                    echo "</tr>";
                }

                // 关闭数据库连接
                odbc_close($conn);
                ?>
            </table>
        </div>
    </div>
</body>
</html>

关键改进点

  • 单次数据库连接+单次查询,减少资源消耗,保证数据顺序一致
  • 每条数据对应一个<tr>,三个字段分别对应<td>,实现逐行对齐
  • 增加了基础的表格样式(可选,你可以保留自己的css文件)
  • 加上了ORDER BY保证查询结果顺序稳定,避免top10返回随机顺序的问题

内容的提问来源于stack exchange,提问作者SHEYPT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:25:35