【问题标题】:while loop and html tablewhile 循环和 html 表
【发布时间】:2023-04-01 09:00:01
【问题描述】:

使用此代码从数据库生成多个表。问题是不知道如何关闭表格,因为我的 php 中有一些使用 if 和 else 的规则

<?php
mysql_connect("localhost","root","");
 mysql_select_db('test');


$barcode_cliente='1111111111111';

$sql="SELECT ora, prezzo, data, prodotto, SUM(quantita) as QtyTotal, SUM(totale_parziale) as Sumtotale_parziale
FROM barcode_consumazioni
GROUP BY 
ora, data, prodotto";
$result=mysql_query($sql);
$dates_precedente = NULL;
while($row=mysql_fetch_array($result)){
$dates="Ordine del ".$row["data"]." delle ore ".$row["ora"];
if ($dates === $dates_precedente) {
echo '<tr>
        <td>'.$row["prodotto"].'</td>
        <td> x'.$row["QtyTotal"].'</td>
        <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td>
        <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td>
    </tr>';
}
else
{
echo '<table style="text-align:center; margin-top:20px;" align="center" cellpadding="5">
<caption><u><b>'.$dates.'<b/></u><br /></caption>
<thead style="background-color:#EBE9E9">
    <tr >
        <th scope="col">Prodotto</th>
        <th scope="col">Quantit&agrave;</th>
        <th scope="col">Prezzo</th>
        <th scope="col">Totale parziale</th>
    </tr>
</thead>
<tbody style="background-color:F5FFFF">
    <tr>
        <td>'.$row["prodotto"].'</td>
        <td> x'.$row["QtyTotal"].'</td>
        <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td>
        <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td>
    </tr>
</tbody></table>';
 }

$dates_precedente = $dates;

}

?>

现在的问题是,如果日期是唯一的,我可以关闭表,但如果 $dates 不是唯一的,它会生成其他行。我试图找到一个规则,当 $dates===$dates_precedente 并且它是最后一个时,你也可以输入&lt;/tbody&gt;&lt;/table&gt;

【问题讨论】:

  • 但它必须生成一些表而不是一个
  • 不清楚你要什么,能吐出你要的结果吗?

标签: php html mysql


【解决方案1】:

试试这个:

    $dates_precedente = NULL;
    echo "<table>";
    while($row=mysql_fetch_array($result)){
        $dates="Ordine del ".$row["data"]." delle ore ".$row["ora"];
        if ($dates === $dates_precedente) {
             echo '<tr>....</tr>';
        }
        else
        {
             echo '</table><table><tr>...</tr>';
        }
    }
    echo "</table>";

这只会在$dates != $dates_precedente 时关闭当前表,然后它会启动一个新表(而不像您在示例中所做的那样关闭它)。然后,在循环结束后,您必须关闭当前表。

【讨论】:

    【解决方案2】:

    我建议你使用 mysqli_* 函数或 PDO,因为 mysql_* 函数已被弃用 (Why shouldn't I use mysql_* functions in PHP?)。另外,请查看有关 MySQL 和 GROUP BY 的关于选择未在 GROUP BY 中命名的非非聚合列 (https://dev.mysql.com/doc/refman/5.1/en/group-by-handling.html)。

    结合@Tomas Ceruti 已经提供的解决方案,您可以使用以下内容:

    $connection = mysqli_connect('localhost', 'root', 'your_password', 'your_database');
    mysqli_set_charset($connection, 'utf8');
    if (!$connection) {
        die("Database connection failed: " . mysqli_error());
    }
    
    $barcode_cliente = '1111111111111';
    
    $sql = "
        SELECT ora, prezzo, data, prodotto, SUM(quantita) as QtyTotal, SUM(totale_parziale) as Sumtotale_parziale
        FROM barcode_consumazioni
        GROUP BY 
        ora, data, prodotto";
    $result = mysqli_query($connection, $sql);
    if(!$result) {
        die("SQL Error: " . mysqli_error($connection);
    }
    
    $dates_precedente = NULL;
    while ($row = mysqli_fetch_array($result)) {
        $dates = "Ordine del ".$row["data"]." delle ore ".$row["ora"];
        if ($dates === $dates_precedente) {
            echo '
            <tr>
                <td>'.$row["prodotto"].'</td>
                <td> x'.$row["QtyTotal"].'</td>
                <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td>
                <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td>
            </tr>';
        } else {
            echo '
                </tbody>
            </table>
            <table style="text-align:center; margin-top:20px;" align="center" cellpadding="5">
                <caption><u><b>'.$dates.'<b/></u><br /></caption>
                <thead style="background-color:#EBE9E9">
                    <tr >
                        <th scope="col">Prodotto</th>
                        <th scope="col">Quantit&agrave;</th>
                        <th scope="col">Prezzo</th>
                        <th scope="col">Totale parziale</th>
                    </tr>
                </thead>
                <tbody style="background-color:F5FFFF">
                    <tr>
                        <td>'.$row["prodotto"].'</td>
                        <td> x'.$row["QtyTotal"].'</td>
                        <td>'.number_format($row["prezzo"],2,",",".").' &euro;</td>
                        <td>'.number_format($row["Sumtotale_parziale"],2,",",".").' &euro;</td>
                    </tr>';
        }
        $dates_precedente = $dates;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多