while循环和html表

时间:2015-10-06 15:41:07

标签: php html mysql

让这段代码从db生成多个表。问题是,一个不知道如何关闭表,因为我有一些规则在我的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并且它是最后一个,所以你也可以放</tbody></table>

2 个答案:

答案 0 :(得分: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时关闭当前表,之后会启动一个新表(不会像在示例中那样关闭它)。然后,在循环finsihed后,你必须关闭当前表。

答案 1 :(得分:0)

我建议您使用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;
}