我如何在PHP加载一个表,并有一些行的背景颜色突出显示

How can I load a table in PHP and have the background color of some rows highlighted?

本文关键字:背景 显示 颜色 PHP 加载 一个      更新时间:2023-09-26

我不是在寻找交替行…相反,我有两个表A和B,并且Field1都存在。我想要呈现TableA所有与TableB中的field1匹配的地方,我想突出显示行。我该怎么做呢?

我知道如何在SQL中做到这一点,但问题是如何在浏览器中呈现。我想我必须使用javascript。任何建议吗?

下面是生成表a的PHP脚本。我想更改此输出中aif_id也存在于表B

中的行背景。
<?php
require_once "config.php";
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$result = $dbh->query("SELECT aif_id, fee_source_id, company_name_per_sedar, document_filing_date FROM a_aif ORDER BY aif_id DESC");
$result->setFetchMode(PDO::FETCH_ASSOC);
echo "<table id='"all_aifs'">";
echo "<tr>";
echo "<th><b>Document ID</b></th>";
echo "<th><b>Pubco Name</b></th>";
echo "<th><b>Filing Date</b></th>";
echo "<th><b>PDF</b></th>";
echo "</tr>";
foreach($result as $index => $row) {
echo "<tr>";
echo "<td>$row[fee_source_id]</td>";
echo "<td>$row[company_name_per_sedar]</td>";
echo "<td>$row[document_filing_date]</td>";
echo "<td>Placeholder</td>";
echo "</tr>";
}
echo "</table>";
echo "<br>";
$dbh = NULL;
?>
PHP Script for TableB
<?php
require_once "config.php";
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$result = $dbh->query("SELECT aif_id, fee_source_id, company_name_per_sedar, document_filing_date FROM a_aif_remaining LIMIT 0,50");
$result->setFetchMode(PDO::FETCH_ASSOC);
echo "<table>";
echo "<tr>";
echo "<th><b>Document ID</b></th>";
echo "<th><b>Pubco Name</b></th>";
echo "<th><b>Filing Date</b></th>";
echo "<th><b>PDF</b></th>";
echo "</tr>";
foreach($result as $index => $row) {
    echo "<tr>";
    echo "<td>$row[fee_source_id]</td>";
    echo "<td>$row[company_name_per_sedar]</td>";
    echo "<td>$row[document_filing_date]</td>";
    echo "<td>Placeholder</td>";
    echo "</tr>";
}
echo "</table>";
echo "<br>";
$dbh = NULL;
?>

更新代码
<?php
require_once 'config.php';
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$result = $dbh->query("SELECT aif_id, fee_source_id, company_name_per_sedar, document_filing_date FROM a_aif_remaining");
$result->setFetchMode(PDO::FETCH_ASSOC);
$match = $dbh->query("SELECT a_aif.aif_id FROM a_aif INNER JOIN a_aif_remaining WHERE a_aif_remaining.aif_id = a_aif.aif_id");?>
<?php if ( !empty($result) ) : ?>
<table id="all_aifs">
<tr>
<th><b>Document ID</b></th>
<th><b>Pubco Name</b></th>
<th><b>Filing Date</b></th>
<th><b>PDF</b></th>
</tr>
<?php foreach($result as $index => $row) : ?>
<tr>
<?= $row['aif_id'] == true ? ' class="match"' : '' ?>
<td><?php echo $row[fee_source_id]; ?></td>
<td><?php echo $row[company_name_per_sedar]; ?></td>
<td><?php echo $row[document_filing_date]; ?></td>
<td>Placeholder</td>
</tr>
<?php endforeach; ?>
</table>
<br>
<?php endif;
$dbh = NULL;
?>

在SQL中执行检查(因为您知道如何执行)。

在PHP中,使用检查的结果为需要突出显示的HTML元素添加(额外的)类属性(就像'交替行'一样):

<?php
$query = ... // perform your SQL query
// TODO Open HTML table
// TODO Loop though results:
  $row = ... // fetch you row here
?>
<tr <?= $row['my_check'] == true ? ' class="match"' : '' ?>>
  <td><?= $row['field'] ?></td>
</tr>
<?php
// TODO close HTML table

这个(不完整的)示例使用SQL检查(名为my_check),并在需要时添加match类。在CSS中,你可以使用match类来应用高亮:

.match {
  background-color: red;
}

首先,如果你想保持代码的可维护性和整洁性,那么你应该避免打印HTML标签。

不该走的路:

echo "<table>";
echo "<tr>";
echo "<th><b>Document ID</b></th>";
echo "<th><b>Pubco Name</b></th>";
echo "<th><b>Filing Date</b></th>";
echo "<th><b>PDF</b></th>";

该走的路:

<?php
require_once 'config.php';
$dbh = new PDO($dsn, $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$result = $dbh->query("SELECT aif_id, fee_source_id, company_name_per_sedar, document_filing_date FROM a_aif_remaining LIMIT 0,50");
$result->setFetchMode(PDO::FETCH_ASSOC);
?>
<?php if ( !empty($result) ) : ?>
<table>
 <tr>
  <th><b>Document ID</b></th>
  <th><b>Pubco Name</b></th>
  <th><b>Filing Date</b></th>
  <th><b>PDF</b></th>
 </tr>
<?php foreach($result as $index => $row) : ?>
    <tr>
    <td><?php echo $row[fee_source_id]; ?></td>
    <td><?php echo $row[company_name_per_sedar]; ?></td>
    <td><?php echo $row[document_filing_date]; ?></td>
    <td>Placeholder</td>
    </tr>
<?php endforeach; ?>
</table>
<br />

<?php endif; ?>

结论:

1)代码现在看起来更可读和干净,以及
2)你把PHP和HTML分开了
3)一旦出现问题,您可以很容易地确定(如parse error at .., unexcepted ';' ...

)

回到你的问题

那么如何突出显示需要的行呢?这很简单,只要在foreach循环中使用if/else,比如

<?php foreach($result as $k => $v): ?>

 <?php if ( $k == 'some_value_you_expect_to_be_highlighted' ) : ?>
    <tr>... should be highlighted  ...</tr>
 <?php else : ?>
    <tr>.... a regular row</tr>
 <?php endif; ?>
<?php endforeach; ?>

您只需在数据匹配的行中添加一个类,并在相关的CSS中设置背景色。

<table> <tr class="matching"> ... </tr>

如何编写合适的CSS超出了这个答案的范围。: -)

这个类是由web服务器的PHP代码添加的,还是由客户端的JavaScript添加的,取决于web应用程序的设计。

不,你不需要使用JavaScript。你可以使用PHP

在生成行时,检查是否满足条件并将'高亮显示'类放入行定义中。

伪代码:

<?php
    if(Condition) echo "<tr class='highlighted'>";
    else echo "<tr>";
    echo "<td>CellStuff</td>";
    echo "</tr>";
?>

我不确定我是否能理解你的问题正确,但我不认为你需要JS。您可以计算一个单元格/行是否应该在PHP中突出显示,并设置一个css类,也在PHP中。