0

我不是在寻找交替的行......相反,我有两个表 A 和 B 并且 Field1 都存在于两者中。我想展示 TableA 以及 field1 与 TableB 中的 field1 匹配的任何地方,我想突出显示该行。我怎样才能做到这一点?

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

这是生成表 A 的 PHP 脚本。我想更改此输出中行的背景,其中表 B 中也存在 aif_id

<?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;
?>

TableB 的 PHP 脚本

<?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;
?>
4

5 回答 5

3

在 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;
}
于 2013-01-01T21:22:03.033 回答
2

您应该简单地向数据匹配的行添加一个类,并在关联的 CSS 中设置背景颜色。

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

如何编写适当的 CSS 超出了此答案的范围。;-)

该类是由您的 Web 服务器的 PHP 代码添加,还是由客户端中的某些 JavaScript 添加,取决于您的 Web 应用程序的设计。

于 2013-01-01T21:19:32.477 回答
2

不,您不必“必须”使用 JavaScript。您可以使用 PHP。

生成行时,检查是否满足条件并将“突出显示”类放入行定义中。

伪代码:

<?php
    if(Condition) echo "<tr class='highlighted'>";
    else echo "<tr>";
    echo "<td>CellStuff</td>";
    echo "</tr>";
?>
于 2013-01-01T21:20:07.153 回答
2

首先,如果您要保持代码的可维护性和清洁性,那么您应该避免打印 HTML TAGS。

不走的路:

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; ?>
于 2013-01-01T21:41:30.593 回答
0

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

于 2013-01-01T21:18:48.197 回答