簡體   English   中英

根據php中數據庫的值突出顯示不同顏色的表行

[英]Highlight table row in different colors based on values from database in php

下面的代碼具有動態下拉列表,用戶可以選擇喜歡的品牌和型號,因此在網頁中將生成品牌,型號和年份的結果表。 現在,代碼需要將同一年的所有年份用不同的模型進行分組,並相應地用每年不同的顏色突出顯示它們。 預期的結果作為圖像附上。

// (___ & !!!) or (ALL & ___) or (ALL & ALL)
if ((!isset($_POST['model']) || ($_POST['brand'] == 'ALL' && empty($_POST['model']))) || ($_POST['brand'] == 'ALL' && $_POST['sip'] == 'ALL')) {
    $query1 = 'SELECT DISTINCT brand,model,year FROM `carlist` ORDER BY brand,model,year';
}
// (... & ...) or (... & ALL)
else if (!empty($_POST['brand']) && (empty($_POST['model']) || ($_POST['model'] == 'ALL'))) {
    $query1 = 'SELECT DISTINCT brand,model,year FROM `carlist` WHERE brand="'.$_POST['brand'].'" ORDER BY brand,model,year';
}
// (ALL & ...) or (ALL & notALL)
else if ($_POST['brand'] == 'ALL' && (!empty($_POST['model']) && $_POST['model'] != 'ALL')) {
    $query1 = 'SELECT DISTINCT brand,model,year FROM `carlist` WHERE model="'.$_POST['model'].'" ORDER BY brand,model,year';
}
else {
    $query1 = 'SELECT DISTINCT brand,model,year FROM `carlist` WHERE brand="'.$_POST['brand'].'" AND model="'.$_POST['model'].'" ORDER BY brand,model,year';
}
//echo $_POST['brand'].'<br />'.$_POST['model'];

echo '<table border=1><tr><th>BRAND</th><th>MODEL</th><th>YEAR</th></tr>';
$result1 = mysqli_query($con, $query1);


    while($row1 = mysqli_fetch_array($result1)){
    //echo'<tr><td>'.$row1['brand'].'</td><td>'.$row1['model'].'</td><td>'.$row1['year'].'</td></tr>';

        $query2= 'SELECT DISTINCT brand,model,year, count(*) `number` FROM `carlist` WHERE brand="'.$_POST['brand'].'" GROUP BY `year` HAVING count(*) > 1';
        $result2= mysqli_query($con, $query2);
        $count=0;


        while($row2 = mysqli_fetch_array($result2)){

            if ( $row2['year'] == $row1['year']) {
            $count=1;
            }

            //$intersect = array_intersect($row1,$row2);
            //echo $intersect[1];


        }

        $bgcolor = "#FF8C00"; 
        if($count==1){
            echo '<tr style="background-color: tomato;" ><td>'.$row1['brand'].'</td><td>'.$row1['model'].'</td><td>'.$row1['year'].'</td></tr>';

        }else {

            echo'<tr><td>'.$row1['brand'].'</td><td>'.$row1['model'].'</td><td>'.$row1['year'].'</td></tr>';
        } 

    }


echo '</table>';

方法1:

這不需要做嵌套循環。 僅當您的行按年份排列時,第一種方法才有效。

/* DEFINE THIS VARIABLE FIRST BEFORE YOUR LOOP */
$yearstorage = ""; /* STORAGE FOR YOUR YEAR AND COMPARISON LATER */
$randomcolor = '#' . strtoupper(dechex(rand(256,16777215))); /* GENERATE RANDOM COLOR */

/* START OF YOUR LOOP */
while($row1 = mysqli_fetch_array($result1)){

  $res = mysqli_query($con,"SELECT * FROM carlist WHERE year=".$row1['year']."");
  if(mysqli_num_rows($res) > 1){ /* IF YEAR HAS ONLY ONE ROW */
    $randomcolor = "#ffffff";
  }

  if(empty($yearstorage)){ /* START OF FIRST ROW */
    ?>
      <tr style="background-color: <?php echo $randomcolor ?>;">
    <?php
    $storecolor = $randomcolor;
  }

  else if($yearstorage == $row1["year"]){ /* IF LAST YEAR ROW IS THE SAME AS THE CURRENT YEAR ROW */
    ?>
      <tr style="background-color: <?php echo $storecolor ?>;">
    <?php
  } 

  else { /* IF THE LAST YEAR ROW IS NOT THE SAME WITH THE CURRENT YEAR ROW */
    $randomcolor = '#' . strtoupper(dechex(rand(256,16777215))); /* GENERATE NEW RANDOM COLOR */
    ?>
      <tr style="background-color: <?php echo $randomcolor ?>;">
    <?php
    $storecolor = $randomcolor;
  }

  $yearstorage = $row1["year"]; /* STORE THE CURRENT YEAR FOR COMPARISON ON THE NEXT LOOP */

    ?>
        <td><?php echo $row1['brand']; ?></td>
        <td><?php echo $row1['model']; ?></td>
        <td><?php echo $row1['year']; ?></td>
      </tr>
    <?php

} /* END OF WHILE LOOP */

方法2:

即使您的行未按年份排列,第二種方法也將起作用。 即使按不同的列名進行排列,我也會向您詳細介紹。

您必須創建一個循環以清楚地獲取所有年份,然后將顏色和年份存儲在數組中,然后在主循環中進行比較並獲取它們。

也無需執行嵌套循環。 但是兩個分開的循環。

您會注意到,此代碼也比第一種方法短。

如果一年僅包含一行,則背景為白色。

$counter = 0; /* DETERMINER OF THE COLOR TO BE USED LATER */
$res = mysqli_query($con,"SELECT DISTINCT year FROM carlist");
while($row = mysqli_fetch_array($res)){
  $randomcolor = '#' . strtoupper(dechex(rand(256,16777215))); /* GENERATE NEW RANDOM COLOR */
  /* STORE THE COLOR AND YEAR IN AN ARRAY */

  $res2 = mysqli_query($con,"SELECT * FROM carlist WHERE year = ".$row['year']."");
  if(mysqli_num_rows($res2) > 1){ /* IF YEAR IS USED MORE THAN ONCE */
    $colorstorage[$counter] = $randomcolor;
  }
  else { /* ELSE, IT WILL HAVE A WHITE BACKGROUND */
    $colorstorage[$counter] = "#ffffff";
  }
  $yearstorage[$counter] = $row['year'];
  $counter = $counter + 1; /* INCREMENT COUNTER */
} /* END OF LOOP THAT STORES THE COLOR AND YEAR IN AN ARRAY */

/* START OF YOUR MAIN LOOP */
while($row1 = mysqli_fetch_array($result1)){

  $key = array_search($row1["year"],$yearstorage);
  ?>
    <tr style="background-color: <?php echo $colorstorage[$key]; ?>;">
      <td><?php echo $row1['brand']; ?></td>
      <td><?php echo $row1['model']; ?></td>
      <td><?php echo $row1['year']; ?></td>
    </tr>
  <?php

} /* END OF YOUR MAIN LOOP */

創建產生隨機顏色的函數

function getColor($year){
  return '#'.substr(md5($year), 0, 6);
}

在您的while循環中

// Get color for current year
// Same years will be colored with same color
$bgColor = getColor($row1['year']);

// Print table row
echo '<tr style="background-color: '.$bgColor.';"><td>'.$row1['brand'].'</td><td>'.$row1['model'].'</td><td>'.$row1['year'].'</td></tr>';

所以你的while循環將是

while($row1 = mysqli_fetch_array($result1)){

    // Delete extra while and if condition

    $bgColor = getColor($row1['year']);
    echo '<tr style="background-color: '.$bgColor.';"><td>'.$row1['brand'].'</td><td>'.$row1['model'].'</td><td>'.$row1['year'].'</td></tr>';
}

注意:您的查詢容易受到SQL注入的攻擊。 請參閱有關如何預防的答案

注意2:由於背景顏色是自動生成的,因此可能會導致文本不容易閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM