从数据库输入后使用 PHP 对 HTML 表进行排序
Posted
技术标签:
【中文标题】从数据库输入后使用 PHP 对 HTML 表进行排序【英文标题】:Sorting a HTML table with PHP after input from database 【发布时间】:2012-01-22 02:14:17 【问题描述】:我正在创建一个 html 表,其中包含来自 mysql 数据库的数据行和一些计算值,如下所示:
<?php
$connection = mysql_connect('localhost','root','') or die('Connection failed!');
mysql_select_db('MyDB', $connection);
$result = mysql_query('SELECT * FROM DB_TABLE');
?>
<table>
<tr>
<th scope="col">Heading 1</th>
<th scope="col">Tariefplan</th>
<th scope="col">Abonnementskost</th>
<th scope="col">Maandelijkse korting</th>
<th scope="col">Contractduur</th>
<th scope="col">Inbegrepen in bundel</th>
<th scope="col">Tarieven buiten bundel</th>
<th scope="col"></th>
<th scope="col">Bereken minuten</th>
<th scope="col">Bereken SMS'en</th>
<th scope="col">Bereken MB's</th>
<th scope="col"></th>
<th scope="col">Totale prijs normaal</th>
<th scope="col">Totale prijs promotie</th>
<th scope="col">Totale prijs contract</th>
</tr>
<?php
while ($data = mysql_fetch_assoc($result))
?>
<tr>
<th scope="row"><?php echo $data['provider']; ?></th>
<td><?php echo $data['planname']; ?></td>
<td>€ <?php echo $data['price_normal']; ?> per maand<br />
<sub>gedurende <?php echo ($data['contract_duration']-$data['promo_duration']); ?> maanden</sub></td>
<td>- € <?php echo $data['promo_discount']; ?> per maand<br />
<sub>gedurende <?php echo $data['promo_duration']; ?> maanden</sub><br />
<sub>promotie geldig tot <?php echo $data['promo_valid']; ?></sub></td>
<td><?php echo $data['contract_duration']; ?> maanden</td>
<td>
<ul>
<li><?php echo $data['included_min']; ?> minuten</li>
<li><?php echo $data['included_sms']; ?> SMS'en</li>
<li><?php echo $data['included_mb']; ?> MB's</li>
<li>€ <?php echo $data['included_value']; ?> belwaarde</li>
</ul>
</td>
<td>
<ul>
<li>€ <?php echo $data['price_min']; ?> per minuut</li>
<li>€ <?php echo $data['price_sms']; ?> per SMS</li>
<li>€ <?php echo $data['price_mb']; ?> per MB</li>
</ul>
</td>
<td></td>
<td>
<?php
if ($_POST['used_min'] <= $data['included_min'])
$calc_min = 0;
else
$calc_min = ($_POST['used_min'] - $data['included_min']) * $data['price_min'];
echo '€ ' . $calc_min;
?>
</td>
<td>
<?php
if ($_POST['used_sms'] <= $data['included_sms'])
$calc_sms = 0;
else
$calc_sms = ($_POST['used_sms'] - $data['included_sms']) * $data['price_sms'];
echo '€ ' . $calc_sms;
?>
</td>
<td>
<?php
if ($_POST['used_mb'] <= $data['included_mb'])
$calc_mb = 0;
else
$calc_mb = ($_POST['used_mb'] - $data['included_mb']) * $data['price_mb'];
echo '€ ' . $calc_mb;
?>
</td>
<td></td>
<td>
<?php
$used_total = ($calc_min + $calc_sms + $calc_mb);
if ($data['included_value'] > $used_total)
$total_price_normal = $data['price_normal'];
else
$total_price_normal = ($data['price_normal'] + $used_total);
echo '€ ' . $total_price_normal . ' per maand';
?>
</td>
<td>
<?php
$total_price_discount = ($total_price_normal - $data['promo_discount']);
echo '€ ' . $total_price_discount . ' per maand';
?>
</td>
<td>
<?php
$total_price_contract = ($total_price_normal * ($data['contract_duration']-$data['promo_duration'])) + ($total_price_discount * $data['promo_duration']);
echo '€ ' . $total_price_contract . ' per maand ' . $data['contract_duration'] . ' na maanden';
?>
</td>
</tr>
<?php ?>
</table>
表中的最后一列是一个变量值,用于计算总金额。这未在数据库中列出。 我想将此表输出到浏览器页面,然后对最后一列进行排序。
使用 PHP 的 sort()
或 asort()
函数无法正常工作。
有人有解决办法吗?
【问题讨论】:
【参考方案1】:在SQL查询中进行计算,让数据库处理排序
【讨论】:
我该怎么做。 (对不起,我是 PHP 新手) 跟PHP没多大关系,都是跟MySQL有关【参考方案2】:您已先计算值,然后创建表。或者使用一些javascript。因此,您必须通过 $result 并将计算的值放入数组中,然后您可以使用值排序并打印到表中,并按最后一个值排序。
【讨论】:
这似乎很有趣,也是最简单的。但是如何将计算值放入数组中? 首先你得到你的结果到 $result,然后使用 foreach 来迭代结果数组(例如 foreach $result as $key => $row)。在 foreach 你这样做: $result[$key]['table']['someColumn'] = computedValue;然后你可以使用php函数对数组进行排序。【参考方案3】:我认为最好先遍历结果,进行计算并将所有内容放入数组中。然后,您可以使用任何 PHP 函数对数组进行排序并输出。这种方法最好的一点是,您将获得更清晰的表格输出,因为所有计算和内容都远离 HTML 输出;)
另一个想法是,你像上面那样做,然后在 Javascript/jQuery 中使用表格排序器来对你的行进行排序。
【讨论】:
【参考方案4】:这是可能的,但使用 PHP 执行此操作可能会很棘手。为了快速修复,您可以尝试这个 jquery 解决方案,它可以满足您的需求并让您快速启动并运行。
http://tablesorter.com/docs/#Demo
【讨论】:
【参考方案5】:使用 PHP 的 sort() 或 asort() 函数无法正常工作。
如果你的意思是这样排序1, 10, 12, 2
,你可以使用natsort();。
【讨论】:
以上是关于从数据库输入后使用 PHP 对 HTML 表进行排序的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用注册表单中的 PHP/Html 将数据输入 SQL 表