首页 > 解决方案 > PHP 忽略一些标签返回不正确的 HTML 代码

问题描述

我有以下代码来显示数据库中的内容。while 循环应该在表格行中显示数据。输出不同:来自数据库的数据显示在表格之前。while 似乎运行并忽略 html 标签,然后再次运行并忽略变量。

PHP代码:

// Instantiate database
$database = new Database();
$db = $database->getConnection();

// List transactions without bundles
$query = "SELECT * FROM stock_trx WHERE bundleId IS NULL";
$statement =  $db->prepare($query);
$statement->execute();
$n = $statement->rowCount();

if($n > 0){

    echo "<table>
        <thead>
            <tr>
                <th>Select</th>
                <th>Date</th>
                <th>Type</th>
                <th>Quantity</th>
                <th>Ticker</th>
                <th>Amount</th>
                <th>Currency</th>
            </tr>    
        </thead>
        <tbody>";

    // Retrieve table content
    while($row = $statement->fetch(PDO::FETCH_ASSOC)){
        // Extract row
        extract($row);

        echo "<tr>".$id."</tr>";
        echo "<tr>".$date."</tr>";
        echo "<tr>".$type."</tr>";
        echo "<tr>".$qty."</tr>";
        echo "<tr>".$ticker."</tr>";
        echo "<tr>".$amount."</tr>";
        echo "<tr>".$currency."</tr>";

    }

    echo "</tbody></table>";
} else {
    echo "No transaction";
}

HTML 输出:

<html>
<body>

12020-05-13 00:00:00BUYTEST1000022020-05-19 00:00:00SELTEST1200032020-05-24 00:00:00DIVTEST250<table>
        <thead>
            <tr>
                <th>Select</th>
                <th>Date</th>
                <th>Type</th>
                <th>Quantity</th>
                <th>Ticker</th>
                <th>Amount</th>
                <th>Currency</th>
            </tr>    
        </thead>
        <tbody><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr>
        </tbody>
    </table>

</body></html>

谢谢

标签: phphtml

解决方案


您需要行内的行<tr>和单元格<td>

while($row = $statement->fetch(PDO::FETCH_ASSOC)){
    // Extract row
    extract($row);

    echo "<tr>";   // start row
    echo "<td>".$id."</td>";
    echo "<td>".$date."</td>";
    echo "<td>".$type."</td>";
    echo "<td>".$qty."</td>";
    echo "<td>".$ticker."</td>";
    echo "<td>".$amount."</td>";
    echo "<td>".$currency."</td>";
    echo "</tr>";  // end row
}
echo "</tbody></table>";

与其他答案相反,我会这样做,因为您使用的是双引号:

echo "<tr>";   // start row
echo "<td>$id</td>";
// etc...

或合并为一条,甚至一条线:

echo "
<tr>
<td>$id</td>
<td>$date</td>
<td>$type</td>
<td>$qty</td>
<td>$ticker</td>
<td>$amount</td>
<td>$currency</td>
</tr>";

推荐阅读