0
たとえば、SELECT
文のMySQLデータベースのデータでいっぱいになる動的に作成されたテーブルがあるとします。セッション値を使用したペイントテーブル
ここでは、テーブルの内側のif
句の内側で定義された変数に外部からアクセスする必要があります。これを行うために、私はいくつかの$_SESSION
値を使用していますが、この色付けを行全体に適用しようとすると、セッション値が格納されている単一の行ではなく、すべての表が色付けされます。私は$RowCt
の値を保存する必要があると推測していますが、どのようにダンノー。
私はかなり長い間この問題を抱えていましたが、私はこのコードを続けて見て少し盲目的だったようです。どんな助けもありがとうございます。
コード:今
<?php include("../includes/header.php")?>
<div class="content" align="center">
<?php
function SQLResultTable($Query)
{
$link = mysql_connect("localhost", "...", "...") or die('Could not connect: ' . mysql_error());
mysql_select_db("...") or die('Could not select database');
$Table = "";
$Table.= "<table border='0' align='center'>";
$Result = mysql_query($Query); //Execute the query
if(mysql_error())
{
$Table.= "<tr><td>MySQL ERROR: " . mysql_error() . "</td></tr>";
}
else
{
//Header Row with Field Names
$NumFields = mysql_num_fields($Result);
$Table.= "<tr style=\"background-color: #D00000; float:center; font-size:14px; color: #FFFFFF;\" align='center'>";
for ($i=0; $i < $NumFields; $i++)
{
if ((mysql_field_name($Result, $i))=="a1") { $Table.= "<th>a1</th>";
} else if ((mysql_field_name($Result, $i))=="a2") { $Table.= "<th>a2</th>";
} else if ((mysql_field_name($Result, $i))=="a3") { $Table.= "<th>a3</th>";
} else if ((mysql_field_name($Result, $i))=="a4") { $Table.= "<th>a4</th>";
} else if ((mysql_field_name($Result, $i))=="a5") { $Table.= "<th>a5</th>";
} else if ((mysql_field_name($Result, $i))=="a6") { $Table.= "<th>a6</th>";
} else if ((mysql_field_name($Result, $i))=="a7") { $Table.= "<th>a7</th>";
} else if ((mysql_field_name($Result, $i))=="a8") { $Table.= "<th>a8</th>";
} else if ((mysql_field_name($Result, $i))=="a9") { $Table.= "<th>a9</th>";
} else if ((mysql_field_name($Result, $i))=="a10") { $Table.= "<th>a10</th>";
} else if ((mysql_field_name($Result, $i))=="a11") { $Table.= "<th>a11</th>";
} else if ((mysql_field_name($Result, $i))=="a12") { $Table.= "<th>a12</th>";
} else { $Table.= "<th>" . mysql_field_name($Result, $i) . "</th>"; }
}
$Table.= "</tr>";
$RowCt = 0;
while($Row = mysql_fetch_assoc($Result))
{
$timezone = new DateTimeZone("Europe/London");
$date = new DateTime();
$date->setTimezone($timezone);
$now = $date->format('H:i');
if (!isset($_SESSION['b2'])) {
$Table.="<tr style='background-color:red;'>";
} else if (!isset($_SESSION['b1'])) {
$Table.="<tr style='background-color:yellow;'>";
} else {
$Table.="<tr style='background-color:white;'>";
}
foreach($Row as $field => $value) {
if ($field == 'b1') {
if ($value > $now) {
$_SESSION['b1'] = $b1;
$Table.= "<td style='font-size:14px;' align='center'>$value</td>";
} else {
$Table.= "<td style='font-size:14px;' align='center'>$value</td>";
}
} else if ($field == 'b2') {
if ($value > $now) {
$_SESSION['b2'] = $b2;
$Table.= "<td style='font-size:14px;' align='center'>$value</td>";
} else {
$Table.= "<td style='font-size:14px;' align='center'>$value</td>";
}
} else {
$Table.= "<td style='font-size:14px;' align='center'>$value</td>";
}
}
$Table.= "</tr>";
}
$Table.= "<tr style=\"background-color: #FFFFFF; font-size:10px; color: #000000;\"><td colspan='$NumFields'><br />Query returned " . mysql_num_rows($Result) . " result(s).</td></tr>";
}
$Table.= "</table>";
return $Table;
}
?>
<?php
echo "<div align='center'><u><strong><a href='index.php'>Query Results</a></strong></u></div>";
echo SQLResultTable("SELECT a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12 FROM test_db ORDER BY a6");
?>
</div>
、$now
値、すなわち8時30分、実際の時間を返します。フィールドb1
およびb2
の$value
は、前のフォームから格納されているのと同じ形式で同様の値を返します。
この処理は次のとおりです。遅い場合(フィールドb1の値が現在よりも大きい場合)、行が黄色で色付けされます。非常に遅い場合(フィールドb2の値が現在よりも大きい場合)、赤色の行が色付けされます。それ以外の場合、行は白い背景色になります。
上記のコードでは、テーブル全体が色づけされます。そして、これを元に戻す方法を見つけることができませんので、それは色ですちょうどセッション値が格納されている行、別名では遅いか遅いです。
これ以上のデータが必要な場合は、何か助けてください。
答えていない
チェックすべての3行は、スイッチング色に対する解決策については、以下のコメントPHPコード:EDITは
最初の質問ですが、最初にコードをクリーンアップしてみてください。それは可読ですが、多くの冗長性があります。 P.e. 'foreach'ループには複数の条件があり、すべて同じ結果になります(' Table。= "
この回答をありがとう。私はそれを単純化しようとします、それは私の元のコードではないと思ったとしても。オリジナルの問題をさらに詳しく考えると、私はそれが*ちょうどCSSの問題だとは思わないので、このように投稿しました。 :) – AleksanderKseniya
答えて
これは賢明ではありませんが、これを書くのはおそらく頭痛を緩和しやすい方法があります。しかし要するに、あなたのコードはほぼそこにあると言えます。あなたのテーブルは、1日の時間に依存する1つの色で表示されますか?もし
申し訳ありません:私はそれはあなたのセッション変数のみセット、決して解除 ...
この足りるようう何かであることとは何かを持っているでしょうね私は色が混ざってしまった! ;)これが正しい軌道上であなたを指すのを助けることを願っています! ( - 本当に速いそれを書いた私は右のそれを得た願っています!)
出典
2011-10-24 07:56:07
私はそれをチェックしている間にそれを得た;それで、ありがとう。しかし、それは、行全体の代わりにそれらのフィールドを塗りつぶすだけです(正しい色で、それが変更された後は、P)。とにかくありがとう:) – AleksanderKseniya
とあなたが投稿した質問について、btw。元の質問にはっきりとしていたと思っていましたが、その行のフィールドが実際の時間よりも大きな値である場合は、定義された色(黄色/赤色/白色)で行全体を表示することができます。 – AleksanderKseniya
母は問題ありません!さて、あなたのコードではないので、おそらくそれを書き直すことは、単純化するだけでなく、問題を解決するのに役立つかもしれません。元のコードを使用することに苦しんでいる場合は、特定のセッション変数を設定している間に他のセッション変数を設定解除してみてください。そうでなければ、行の背景色を上のコードに切り替えてみてください:) –
関連する問題