Рисование таблицы со сессионными значениями - PullRequest
0 голосов
/ 24 октября 2011

Допустим, у меня есть динамически созданная таблица, которая заполнена данными из базы данных MySQL из предложения SELECT.

Теперь мне нужно получить доступ к переменной, определенной внутри предложения 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 возвращает фактический час, т.е. 08:30; и $value в полях b1 и b2 возвращает аналогичное значение в том же формате, который хранится в предыдущей форме.

Дело в том, что: когда поздно (значение в поле b1 больше, чем сейчас), оно окрашивает строку в желтый цвет. Если это очень поздно (значение в поле b2 больше, чем сейчас), оно окрашивает строку в красный цвет. В противном случае строка отображается на белом фоне.

С помощью приведенного выше кода он раскрашивает всю таблицу. И не могу найти, как отменить это, так что он просто строка, в которой хранится значение сеанса, то есть где его поздно или очень поздно.

Любая помощь приветствуется, спросите, нужны ли вам дополнительные данные.

1 Ответ

1 голос
/ 24 октября 2011

Не будь педантичным, но, вероятно, есть более простые и менее вызывающие головную боль способы написать это! Но вкратце, я бы сказал, что ваш код почти у цели. Ваш стол отображается одним цветом, который зависит от времени суток? Я бы сказал, что это как-то связано с тем, что ваши переменные сеанса имеют только set и никогда unset ...

Будет ли что-то вроде этого достаточно:

...
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>";
}
...

Извините, если я перепутал цвета! ;) Надеюсь, это поможет вам на правильном пути!

EDIT:

Проверьте прокомментированный код PHP ниже для решения для переключения цветов каждые 3 строки (надеюсь, я понял это правильно - написал это очень быстро!)

...

// 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>";
}

...
...