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

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

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

764閲覧

table内のtrの背景色をステータス、公開と非公開で変えたいのですが一つ公開すると全てのtrの背景色が変わってしまう

nouzoe_hiroaki

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/18 14:46

編集2019/07/19 11:47

制作しているシステム

PHPで自動販売機のシステムを制作
管理、在庫、購入履歴の3つのデータベースに管理しています

発生している問題

<tr class = "status_false">とし、status_buttonが非公開→公開(hidden value 1)の時のif文の条件の一つとして background-color:gray;を指定しているのですが、value1でない商品も全て背景色が変わってしまいます。

該当のソースコード

<?php $drink_data = array(); $uploaddir = '../upload_img/'; $error = array(); $up_date = date('Y-m-d H:i:s'); $host = ''; 省略 $link = mysqli_connect($host,省略); if($link){ mysqli_set_charset($link, 'utf8'); if($_SERVER['REQUEST_METHOD'] === 'POST'){ if(isset($_POST['name']) === TRUE && isset($_POST['price']) === TRUE && isset($_POST['stock']) === TRUE && isset($_POST['status']) === TRUE){ $name = $_POST['name']; $price = $_POST['price']; $stock = $_POST['stock']; $date = date('Y-m-d H:i:s'); $up_date = date('Y-m-d H:i:s'); $status = $_POST['status']; if(isset($_FILES['img_name']) === TRUE){ $uploadfile = basename($_FILES['img_name']['name']); if(is_uploaded_file($_FILES['img_name']['tmp_name'])===TRUE){ $mime = $_FILES['img_name']['type']; if($mime === 'image/png' || $mime === 'image/jpeg'){ if(move_uploaded_file($_FILES['img_name']['tmp_name'], $uploaddir.$uploadfile)===FALSE){ $error[] = "失敗!"; } }else{ $error[] = '形式が違います'; } //print_r($_FILES); }else{ $error[] = 'ファイル未選択'; } } if($name === ''){ $error[] = '名前が入力されていません'; } if($price === ''){ $error[] = '値段が入力されていません'; }else if(preg_match('/^[0-9]+$/',$price) === 0){ $error[] = '値段は整数値で入力してください'; } if($stock === ''){ $error[] = '個数が入力されていません'; }else if(preg_match('/^[0-9]+$/',$stock)===0){ $error[] = '個数は整数値で入力してください'; } if(preg_match('/^[01]$/',$status)===0){ $error[] = 'ステータス値が不正です'; } if(count($error)===0){ mysqli_autocommit($link, false); $query = "INSERT INTO drink_table(name,price,created_date,update_date,status,drink_img) VALUES ('$name',$price,'$date','$up_date',$status,'$uploadfile')"; if(mysqli_query($link, $query) === false){ $error[] = 'エラー1'; }else{ $drink_id = mysqli_insert_id($link); $sql = "INSERT INTO stock_table VALUES ($drink_id,$stock,'$date','$up_date')"; if(mysqli_query($link, $sql) === false){ $error[] = 'エラー2'; } } if (count($error) === 0) { mysqli_commit($link); } else { mysqli_rollback($link); } } }else if(isset($_POST['stock_button'])===TRUE){ $drink_id = ''; $stock = ''; //$up_date = date('Y-m-d H:i:s'); if(isset($_POST['drink_id'])===TRUE){ $drink_id = $_POST['drink_id']; } if(isset($_POST['stock'])===TRUE){ $stock = $_POST['stock']; } $query = "UPDATE stock_table SET stock = {$stock},update_date = {'$up_date'} WHERE drink_id = {$drink_id}"; //$query = "UPDATE `stock_table` SET `stock`=[$stock],`update_date`=[$up_date] WHERE drink_id = {$drink_id}"; var_dump($up_date); if(mysqli_query($link, $query) !== TRUE) { $error[] = 'エラー3'; } }else if(isset($_POST['status_button'])===TRUE){ $status = ''; if(isset($_POST['drink_id'])===TRUE){ $drink_id = $_POST['drink_id']; } if(isset($_POST['status'])===TRUE){ $status = $_POST['status']; } $query = "UPDATE drink_table SET status = {$status} WHERE drink_id = {$drink_id}"; if(mysqli_query($link, $query) !== TRUE) { $error[] = 'エラー4'; } } } $query = 'SELECT drink_table.drink_id,name,price,stock,status,drink_img FROM drink_table JOIN stock_table ON drink_table.drink_id = stock_table.drink_id '; $result = mysqli_query($link,$query); while($row = mysqli_fetch_array($result)){ $drink_data[] = $row; } mysqli_free_result($result); mysqli_close($link); }else{ print 'DB接続失敗'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>サンプル</title> <style> 省略 </style> </head> <body> <section> <?php foreach($error as $value){?> <p><?php print $value; ?></p> <?php }?> <h1>新規商品追加</h1> <form enctype="multipart/form-data" method = "post"> <div> <label>名前:<input type = "text" name = "name" value = ""></label> </div> <div> <label>値段:<input type = "text" name = "price" value = ""></label> </div> <div> <label>個数:<input type = "text" name = "stock" value = ""></label> </div> <div> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <input type = "file" name = "img_name"> </div> <div> <select name = "status"> <option value ="0">非公開</option> <option value ="1">公開</option> </select> </div> <div> <input type ="hidden" name = "sql_kind" value ="insert"> </div> <div> <input type ="submit" value ="■□■□■商品追加■□■□■"> </div> </form> </section> <section> <h1>商品情報変更</h1> <table> <caption>商品一覧</caption> <tbody> <tr> <th>商品画像</th> <th>商品名</th> <th>価格</th> <th>在庫数</th> <th>ステータス</th> </tr> <?php foreach ($drink_data as $value){ ?> <tr class = "status_false"> <td><img src = "<?php print htmlspecialchars($uploaddir.$value['drink_img'], ENT_QUOTES, 'UTF-8'); ?>"></td> <td><?php print htmlspecialchars($value['name'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($value['price'], ENT_QUOTES, 'UTF-8'); ?></td> <td> <form method = "post"> <input type = "hidden" name = "drink_id" value = "<?php print htmlspecialchars($value['drink_id'], ENT_QUOTES, 'UTF-8'); ?>"> <input type = "text" name = "stock" value = "<?php print htmlspecialchars($value['stock'], ENT_QUOTES, 'UTF-8'); ?>">個 <input type = "submit" name ="stock_button" value = "変更"> </form> </td> <td> <form method = "post"> <input type = "hidden" name = "drink_id" value = "<?php print htmlspecialchars($value['drink_id'], ENT_QUOTES, 'UTF-8'); ?>"> <?php if(htmlspecialchars($value['status'], ENT_QUOTES, 'UTF-8')==='0'){ ?> <input type = "submit" name ="status_button" value = "非公開→公開"> <input type = "hidden" name = "status" value = '1' > <style type="text/css"> .status_false{ background-color:gray; } </style> <?php }else{?> <input type = "submit" name ="status_button" value = "公開→非公開"> <input type = "hidden" name = "status" value = '0' > <?php }?> </form> </td> </tr> <?php }?> </tbody> </table> </section> </body> </html>

試したこと

phpのif文の中にさらにif文を加え、$drink_idと比較してみた
if($drink_id === 'drink_id')
else以降、valueが0の時に同じように背景色白を指定してみた

問題の発生した環境

PHP Version 5.3.29

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/19 01:39

>問題の発生した環境 PHP できれば、マイナーバージョンまで含めたバージョンをご提示ください。
m.ts10806

2019/07/19 01:41

あと >$query = "UPDATE stock_table SET stock = {$stock},update_date = {'$up_date'} WHERE drink_id = {$drink_id}"; 前の回答活かされてませんが・・・。 https://teratail.com/questions/201314
nouzoe_hiroaki

2019/07/19 11:38

すみません。こちらのコード修正するのを忘れてました。 バージョン、調べ次第すぐに修正します。
guest

回答1

0

ベストアンサー

<style>要素はページ全体に影響します。当該行に固有のidを振るか、`<tr class = "status_false">`にクラスを追加するような分岐の仕方にしてみては。 ```HTML <tr class = "status_false bg_gray"> ``` (こんな感じであとはCSSで処理) ```CSS .status_false.bg_gray { background-color:gray; } ```

投稿2019/07/18 14:55

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nouzoe_hiroaki

2019/07/19 12:20

挑戦してみましたがダメでした、、もしかしたら自分の質問の意図が上手く伝わっていないのかもしれません、、画像のupの仕方がまだわからないのでどうしても文字でイメージを伝えるしかないのですが、table内のtrをforeachで囲っています。inputタグに画像、名前、値段、個数を入力し、追加ボタンを押すとtrが一行ずつ増えていきます。その際ステータスボタンで非公開か公開に変更できるのですが非公開ならその行のtrだけ背景色gray、公開にしてある行のtrはwhiteにしたいです。今の処理だと全ての行のtrの背景色が変わってしまう理屈もわかります。ですが、foreachでのループ処理をしているので、<tr></tr>は一箇所しかないためclass追加、もしくはidを振ることができるのもそこしかなく、どうしても全行のtrの背景色が変わってしまいます。
kei344

2019/07/19 14:38

<tr class = "status_false<?php if($value['status']){ ?> bg_gray<?php } ?>">
nouzoe_hiroaki

2019/07/19 15:09

ありがとうございます!classの中にphpを入れ込むやり方は初めてでした、、また機会ありましたらよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問