質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

登録データが未確定の時にtableの背景色を変えたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 981

narutomo

score 13

前提・実現したいこと```ここに言語を入力

コード

PHPにてテーブル一覧を作成しています。  
ですが、PHPでループさせて一覧表示をする時に、表示後に特定の文字だった場合(未確定)のデータを抽出した時に、テーブル内のそのセルだけ背景色を変えたいと思うのですが、上手くいきません。  

###発生している問題・エラーメッセージ  

特にエラーは出ておりませんが、色が変わりません。 自分なりに調べては見たのですが、Javascriptを利用しないと上手く行かないのでしょうか?

test.html  

<!DOCTYPE html>  
<html>  
<head>  
省略  
</head>  
<body>  
<table>  
<tr>  
<th>名前</th><th>誕生日</th><th>年齢</th>  
</tr>  
<tr>  
<#LIST#>//PHPにて置き換えしています  
</tr>  
</body>  
</html>  
<?php  
$query='select * from check_info';//ここの名前カラムに、未確定というデータが入っています。  

$line="";  
$line_not_decide="";  

if ($result = mysqli_query($link, $query)) {  

$i=0;  
while ($row = mysqli_fetch_row($result)) {  
$name = $row[0];  
$birthday = $row[1];  
$age = $row[2];  

$line .="<tr><td>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";  
$i++;  

$line_not_decide .="<tr><td style='background-color:red;'>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";  
$i++;  

}  
mysqli_free_result($result);  
}  
mysqli_close($link);  

$fp=fopen('./test.html','r');  

while(!feof($fp)) {  
$test_line=fgets($fp);  

if($name[$i] == "未確定"){  
$lines=str_replace("<#LIST#>",$line_not_decide,$test_line);  
}else{  
$lines=str_replace("<#LIST#>",$line,$test_line);  
}  
echo $lines;  
}  
fclose($fp);  
exit();  

?>  
該当箇所修正コード  
<?php  

$i = $lines = '';  
while ($row = mysqli_fetch_row($result)) {  
$name = $row[0];  
$birthday = $row[1];  
$age = $row[2];  

if($name[$i] == "未確定"){  
$lines .= "<tr><td style='background-color:red;'>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";  

} elseif ($name[$i] == "未確定" && $age[$i] == "30"){  
$lines .= "<tr><td style='background-color:red;'>".$name[$i]."</td><td>".$birthday[$i]."</td><td style='background-color:red;'>".$age[$i]."</td></tr>\n";  

} else {  
$lines .= "<tr><td>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";  
}  
$i++;  
}  

?>  

試したこと

追記 :年齢もelseifで指定して、複数のカラムを選択して抽出しようとしたら、最初の名前のみ背景色が赤くなりますが、例えば年齢カラムの背景色が赤くならない。

PHPのif文を利用して、もし引っ張ってきたデータが「未確定」という文字だった場合に、セルの背景色を赤にしたいので、文を二つに分けて、表示させようとしました。
ですが、PHPでループした時に、未確定があったら$line_not_decide、なければ$lineで表示を変えていこうとしましたが、上手く反映されません。

分けてPHPで表示しようとするからいけないのかと思ったりもしていますが、どなたかご教授いただけないでしょうか?

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報
MAC OS、

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2017/06/08 01:30

    解決済みのものに追記せず、新たに質問を投稿しなおしてはいかがでしょうか。

    キャンセル

  • narutomo

    2017/06/08 01:31

    ご指摘ありがとうございます。その内容でやって見ます。

    キャンセル

回答 1

checkベストアンサー

+2

動作未検証ですが,置換ではなく、最初から$linesへ格納していくのではどうでしょう?

$i = $lines = '';
while ($row = mysqli_fetch_row($result)) {
       $name = $row[0];
       $birthday = $row[1];
       $age = $row[2];

     if($name[$i] == "未確定"){
        $lines .= "<tr><td>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";
     }else{
        $lines .= "<tr><td style='background-color:red;'>".$name[$i]."</td><td>".$birthday[$i]."</td><td>".$age[$i]."</td></tr>\n";
     }
     $i++;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/07 21:33 編集

    ご回答ありがとうございます。
    上記の代入の仕方を試したところ、上手く指定したい背景色変更がかかりました!

    $i = $line = "" ; のように同じ行で、代入の代入みたいな記載方法があることを知りませんでした。
    色々なプログラミング方法があるのですね。

    ありがとうございました。
    精進します。

    キャンセル

  • 2017/06/07 22:30

    良かったです!今見たら色指定の条件が逆でしたね。。
    よしなに変更して頂いたと思いますが失礼しました。

    キャンセル

  • 2017/06/08 01:28

    せっかく教えていただいたのですが、もう一つ自分なりにご教授頂いたコードを参考に、年齢の部分もある値の時は背景色を赤にするように追加でかいてみたのですが、最初の名前の背景色しか変更にならず苦戦しています。

    年齢もelseifで指定して、名前と年齢がある値なら、赤にすると組んで見たつもりなのですが、どこか書き方が上手く行ってないのでしょうか?

    自分が考えたのは、if,elseifで条件を繋いで最後にelseで閉めて表示でいいのではと思ったのですが、、、。
    また、こういう場合に、変更したい項目が多くなると、たくさんのif文を書き込むしか方法でやっていくしかないのでしょうか?

    キャンセル

  • 2017/06/08 06:58

    if文については、ifの中でまたifのようにネストが深くなりすぎたり、
    多くの条件分岐になるようでしたら考えた方が良いと思います。

    ネットにもあるかも知れませんが、「リーダブルコード」や「リファクタリング」のような
    書籍を読んでみるのもきれいな書き方の参考になるかも知れませんね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る