0

交互の行を探していません...むしろ、2つのテーブルAとBがあり、Field1が両方に存在します。TableAを提示したいのですが、field1が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;
?>

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チェック(named )を使用し、必要に応じてクラスmy_checkを追加します。matchCSSでは、この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タグの印刷を避ける必要があります。

行かない方法:

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 ';' ...

質問に戻る

では、必要な行をどのように強調表示できますか?それは簡単です。if/elseをforeachループで使用するだけです。

<?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で強調表示する必要があるかどうかを計算し、同じくPHPでcssクラスを設定できます。

于 2013-01-01T21:18:48.197 に答える