我非常擅长使用PHP并尝试使用MySQL数据库中的数据填充表格,但显示的结果遍布整个表格,并且不在表格顶部的相关列中。< / p>
附件是我需要数据的屏幕截图。
这是代码。
感谢任何帮助。
<?php
$server = mysql_connect("xxxx", "xxxx", "xxxxx");
$db = mysql_select_db("xxxxxx", $server);
$query = mysql_query("SELECT * FROM stores");
?>
<html>
<head>
<title>Stores Tracker Dashboard</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p align="center"><font face="Arial"><strong>Stores Tracker Dashboard</strong></font></p>
<table align="center" border="1" width="90%">
<tr>
<td align="center"><font face="Arial"><strong>Not Started</strong></font></td>
<td align="center"><font face="Arial"><strong>In Transit</strong></font></td>
<td align="center"><font face="Arial"><strong>Awaiting Build</strong></font></td>
<td align="center"><font face="Arial"><strong>Being Built</strong></font></td>
<td align="center"><font face="Arial"><strong>On Return</strong></font></td>
<td align="center"><font face="Arial"><strong>Received Back</strong></font></td>
</tr>
<?php
while ($row = mysql_fetch_array($query)) {?>
<tr>
<td align="center"><font face="Arial"><?php if ($row['status'] == "Not Started") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
<td align="center"><font face="Arial"><?php if ($row['status'] == "In Transit") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
<td align="center"><font face="Arial"><?php if ($row['status'] == "Awaiting Build") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
<td align="center"><font face="Arial"><?php if ($row['status'] == "Being Built") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
<td align="center"><font face="Arial"><?php if ($row['status'] == "On Return from CFC2") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
<td align="center"><font face="Arial"><?php if ($row['status'] == "Received") { echo $row['ticket'], ' (', $row['site'], ')'; }?></font></td>
</tr>
<?php } ?>
答案 0 :(得分:0)
mysql查询中的每一行(是的,应该替换为PDO等,但与问题没有直接关系)报告一个stores
记录的状态。该表旨在报告每行上的几个值 - 每种状态类型之一。有几种方法可以做到这一点。一种方法是为不同的状态代码填充一组数组,然后在完成后打印出数组作为HTML表。像这样:
$notstarted = array();
$intransit = array();
$awaiting = array();
$built = array();
$cfc2 = array();
$received = array();
// Get all the data into the arrays
while ($row = mysql_fetch_array($query)) {
$data = $row['ticket'] . ' (' . $row['site'] . ')';
if ($row['status'] == "Not Started") { $notstarted[] = $data; };
if ($row['status'] == "In Transit") { $intransit[] = $data; };
if ($row['status'] == "Awaiting Build") { $awaiting[] = $data; };
if ($row['status'] == "Being Built") { $built[] = $data; };
if ($row['status'] == "On Return from CFC2") { $cfc2[] = $data; };
if ($row['status'] == "Received") { echo $received[] = $data; };
};
// Loop through all the arrays at once. # of rows will be max of size of all arrays
for ($i = 0; $i < max(count($notstarted),count($intransit),count($awaiting),count($built),count($cfc2),count($received)); $i++) {
print "<tr>";
print "<td align="center"><font face="Arial">";
if (count($notstarted) > $i) { print $notstarted[$i]; };
print "</font></td>";
print "<td align="center"><font face="Arial">";
if (count($intransit) > $i) { print $intransit[$i]; };
print "</font></td>";
print "<td align="center"><font face="Arial">";
if (count($awaiting) > $i) { print $awaiting[$i]; };
print "</font></td>";
print "<td align="center"><font face="Arial">";
if (count($built) > $i) { print $built[$i]; };
print "</font></td>";
print "<td align="center"><font face="Arial">";
if (count($cfc2) > $i) { print $cfc2[$i]; };
print "</font></td>";
print "<td align="center"><font face="Arial">";
if (count($received) > $i) { print $received[$i]; };
print "</font></td>";
print "</tr>";
};
答案 1 :(得分:0)
这个使用PDO。 请花点时间了解那里发生的事情!
<?php
$host = "set_hostname_here";
$daba = "set_database_here";
$user = "set_loginname_here";
$pass = "set_password_here";
$notstarted = array();
$intransit = array();
$awaiting = array();
$built = array();
$cfc2 = array();
$received = array();
try {
//open the PDO-connection to a MySQL-host
$DBH = new PDO("mysql:host=$host;dbname=$daba", $user, $pass);
//error mode set to EXCEPTION (ERRMODE_SILENT or ERRMODE_WARNING are also possible)
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//execute the query
$STH = $DBH->query('SELECT status, ticket, site FROM stores');
//set default fetch mode to FETCH_ASSOC (if you want to try FETCH_OBJ)
$STH->setFetchMode(PDO::FETCH_ASSOC);
}
catch(PDOException $e) {
echo $e->getMessage();
}
//go through all results and assign them to the related arrays
while($row = $STH->fetch()) {
$data = $row['ticket'] . ' (' . $row['site'] . ')';
if ($row['status'] == "Not Started") { $notstarted[] = $data; }
if ($row['status'] == "In Transit") { $intransit[] = $data; }
if ($row['status'] == "Awaiting Build") { $awaiting[] = $data; }
if ($row['status'] == "Being Built") { $built[] = $data; }
if ($row['status'] == "On Return from CFC2") { $cfc2[] = $data; }
if ($row['status'] == "Received") { $received[] = $data; }
}
//close the connection
$DBH = null;
?>
<html>
<head>
<title>Stores Tracker Dashboard</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p align="center"><font face="Arial"><strong>Stores Tracker Dashboard</strong></font></p>
<table align="center" border="1" width="90%">
<tr>
<td align="center"><font face="Arial"><strong>Not Started</strong></font></td>
<td align="center"><font face="Arial"><strong>In Transit</strong></font></td>
<td align="center"><font face="Arial"><strong>Awaiting Build</strong></font></td>
<td align="center"><font face="Arial"><strong>Being Built</strong></font></td>
<td align="center"><font face="Arial"><strong>On Return</strong></font></td>
<td align="center"><font face="Arial"><strong>Received Back</strong></font></td>
</tr>
<?php
for ($i = 0; $i < max(count($notstarted),count($intransit),count($awaiting),count($built),count($cfc2),count($received)); $i++) {
echo "<tr>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($notstarted) > $i) echo $notstarted[$i];
echo "</font></td>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($intransit) > $i) echo $intransit[$i];
echo "</font></td>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($awaiting) > $i) echo $awaiting[$i];
echo "</font></td>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($built) > $i) echo $built[$i];
echo "</font></td>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($cfc2) > $i) echo $cfc2[$i];
echo "</font></td>";
echo "<td align=\"center\"><font face=\"Arial\">";
if (count($received) > $i) echo $received[$i];
echo "</font></td>";
echo "</tr>";
}
?>
</table
</body>
</html>
我使用了manassehkatz的答案的例子。 大多数与PDO连接相关的代码几乎都是从tadman给出的链接中复制/粘贴的......
祝你的项目好运。