2011-10-24 3 views
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の値が現在よりも大きい場合)、赤色の行が色付けされます。それ以外の場合、行は白い背景色になります。

上記のコードでは、テーブル全体が色づけされます。そして、これを元に戻す方法を見つけることができませんので、それは色ですちょうどセッション値が格納されている行、別名では遅いか遅いです。

これ以上のデータが必要な場合は、何か助けてください。

+0

答えていない

チェックすべての3行は、スイッチング色に対する解決策については、以下のコメントPHPコード:EDITは

最初の質問ですが、最初にコードをクリーンアップしてみてください。それは可読ですが、多くの冗長性があります。 P.e. 'foreach'ループには複数の条件があり、すべて同じ結果になります(' Table。= " Bjoern

+0

この回答をありがとう。私はそれを単純化しようとします、それは私の元のコードではないと思ったとしても。オリジナルの問題をさらに詳しく考えると、私はそれが*ちょうどCSSの問題だとは思わないので、このように投稿しました。 :) – AleksanderKseniya

答えて

1

これは賢明ではありませんが、これを書くのはおそらく頭痛を緩和しやすい方法があります。しかし要するに、あなたのコードはほぼそこにあると言えます。あなたのテーブルは、1日の時間に依存する1つの色で表示されますか?もし

... 
while($Row = mysql_fetch_assoc($Result)) 
{ 
    $timezone = new DateTimeZone("Europe/London"); 
    $date = new DateTime(); 
    $date->setTimezone($timezone); 
    $now = $date->format('H:i'); 

    foreach($Row as $field => $value) { 
     if ($field == 'b1') { 
      if ($value > $now) { 
       $Table.= "<td style='font-size:14px; background-color:YELLOW;' align='center'>$value</td>"; 
      } else { 
       $Table.= "<td style='font-size:14px; background-color:WHITE;' align='center'>$value</td>"; 
      } 
     } else if ($field == 'b2') { 
      if ($value > $now) { 
       $Table.= "<td style='font-size:14px; background-color:RED;' align='center'>$value</td>"; 
      } else { 
       $Table.= "<td style='font-size:14px; background-color:WHITE;' align='center'>$value</td>"; 
      } 
     } else { 
      $Table.= "<td style='font-size:14px; background-color:WHITE;' align='center'>$value</td>"; 
     } 
    } 
    $Table.= "</tr>"; 
} 
... 

申し訳ありません:私はそれはあなたのセッション変数のみセット、決して解除 ...

この足りるよう

う何かであることとは何かを持っているでしょうね私は色が混ざってしまった! ;)これが正しい軌道上であなたを指すのを助けることを願っています! ( - 本当に速いそれを書いた私は右のそれを得た願っています!)

... 

// so this is my understanding of what I think this code must do 
// based on what your original code looks like and what your original 
// question was highlighting... 

// based on how you're calling the rows and checking the fields for 
// values 'b1' and 'b2', I'm making an assumption here that the fields 
// 'b1' and 'b2' will always both exist in every row you parse. Maybe you 
// shouldn't be checking the '$field' variable for equivalence to 'b1' 
// or 'b2', but rather the '$value' variable? Regardless, I'm throwing down 
// this code for the '$RowCt' question you had, it will alternate between the 
// 3 colours...I hope it helps... 

$RowCt = 0; 
while($Row = mysql_fetch_assoc($Result)) 
{ 
    // get the time, that's all working ok... 
    $timezone = new DateTimeZone("Europe/London"); 
    $date = new DateTime(); 
    $date->setTimezone($timezone); 
    $now = $date->format('H:i'); 

    // increase the counter, work out the colour... 
    $RowCt++; 

    $background_color = 'white'; 
    if ($RowCt % 3 == 1) 
     $background_color = 'red'; 
    if ($RowCt % 3 == 2) 
     $background_color = 'yellow'; 

    $Table.="<tr style='background-color:". $background_color .";'>"; 

    foreach($Row as $field => $value) 
     $Table.= "<td style='font-size:14px;' align='center'>$value</td>"; 

    $Table.= "</tr>"; 
} 

... 
+0

私はそれをチェックしている間にそれを得た;それで、ありがとう。しかし、それは、行全体の代わりにそれらのフィールドを塗りつぶすだけです(正しい色で、それが変更された後は、P)。とにかくありがとう:) – AleksanderKseniya

+0

とあなたが投稿した質問について、btw。元の質問にはっきりとしていたと思っていましたが、その行のフィールドが実際の時間よりも大きな値である場合は、定義された色(黄色/赤色/白色)で行全体を表示することができます。 – AleksanderKseniya

+0

母は問題ありません!さて、あなたのコードではないので、おそらくそれを書き直すことは、単純化するだけでなく、問題を解決するのに役立つかもしれません。元のコードを使用することに苦しんでいる場合は、特定のセッション変数を設定している間に他のセッション変数を設定解除してみてください。そうでなければ、行の背景色を上のコードに切り替えてみてください:) –

関連する問題