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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1527閲覧

php データベースの値でsubmitボタンのvalueを変更したい

h_r

総合スコア18

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/09/23 09:03

編集2018/09/23 11:32

前提・実現したいこと

php データベースの内容でsubmitボタンのvalueを変更したい

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

下記ソースコードだとデータベース上のステータスが0でもelseの処理となりvalue="公開->非公開"となってしまいます。また、できたsubmitボタンを押したらデータベースの値を変更するSQL文を作成しましたが、もう少し短く記述する方法があるような気がします。(nameを分ける必要がないような…)一応、現在の記述でステータス変更はできています。
ご教授宜しくお願いいたします。

該当のソースコード

php

1<?php if (isset($value['status']) === 0) {?> 2 <input type="submit" name="change_status1" value="非公開->公開"> 3 <?php } else { ?> 4 <input type="submit" name="change_status2" value="公開->非公開"> 5 <?php } ?>

php

1// === から !== に 2<?php if (isset($value['status']) !== 0) {?> 3 <input type="submit" name="change_status1" value="非公開->公開"> 4 <?php } else { ?> 5 <input type="submit" name="change_status2" value="公開->非公開"> 6 <?php } ?> 7

php

1// ステータス変更 2 if (isset($_POST['change_status1']) === TRUE) { 3 // SQL文を作成 4 $sql = 'UPDATE drink_master 5 SET status = 1 6 WHERE drink_id = :drink_id'; 7 // SQL文を実行する準備 8 $stmt = $dbh->prepare($sql); 9 // SQL文のプレースホルダに値をバインド 10 $drink_id = $_POST['drink_id']; 11 $stmt->bindParam(':drink_id', $drink_id, PDO::PARAM_INT); 12 // SQL文を実行 13 $stmt->execute(); 14 // コミット処理 15 $dbh->commit(); 16 } 17 if (isset($_POST['change_status2']) === TRUE) { 18 // SQL文を作成 19 $sql = 'UPDATE drink_master 20 SET status = 0 21 WHERE drink_id = :drink_id'; 22 // SQL文を実行する準備 23 $stmt = $dbh->prepare($sql); 24 // SQL文のプレースホルダに値をバインド 25 $drink_id = $_POST['drink_id']; 26 $stmt->bindParam(':drink_id', $drink_id, PDO::PARAM_INT); 27 // SQL文を実行 28 $stmt->execute(); 29 // コミット処理 30 $dbh->commit(); 31 32 }

試したこと

var_dumpなど

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

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

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

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

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

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

guest

回答3

0

自己解決

php

1<?php if ($value['status'] == 0) {?> 2 <input type="submit" name="change_status1" value="非公開->公開"> 3 <?php } else { ?> 4 <input type="submit" name="change_status2" value="公開->非公開"> 5 <?php } ?>

issetを外すことでできました。回答して頂いた方本当にありがとうございました。

投稿2018/09/23 23:55

h_r

総合スコア18

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

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

m.ts10806

2018/09/24 00:12

だいぶ後で気づきました。 isset()の結果比較になってるから変数の値関係なかったですね。
guest

0

===だと型も含めて比較します。
不確かな記憶で申し訳ないですが、DBのカラムの型が数値であってもPHPで取得して扱う時には基本は文字列になっているはずなので、==で比較してください。

試したこと

var_dumpなど

実行結果を提示していただけると・・・。
var_dump()はあくまでデバッグの手段なので。

投稿2018/09/23 10:33

m.ts10806

総合スコア80765

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

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

h_r

2018/09/23 11:04

ご回答ありがとうございます。==で比較しても結果は変わりませんでした。if文の最初の判定でvar_dumpした場合はそもそも値すら出力されませんでした。else以降でvar_dumpすると、データベース内の値を返してくれました。 <?php print var_dump($value); ?> array(12) { ["drink_id"]=> string(1) "1" [0]=> string(1) "1" ["drink_name"]=> string(12) "サイダー" [1]=> string(12) "サイダー" ["price"]=> string(3) "120" [2]=> string(3) "120" ["img"]=> string(45) "6972faaf3e1c16e64be9871ba63a64e11523cf31.jpeg" [3]=> string(45) "6972faaf3e1c16e64be9871ba63a64e11523cf31.jpeg" ["stock"]=> string(1) "0" [4]=> string(1) "0" ["status"]=> string(1) "1" [5]=> string(1) "1" }
h_r

2018/09/23 11:05

データベースの一部からです
m.ts10806

2018/09/23 11:12

どのようなコードにしましたか? 質問本文に追記してください。 あとvar_dumpにprintつけても意味ないですよ。var_dumpだけで出力も担うので。
h_r

2018/09/23 11:39

追記しました。ifの条件式に問題があるのではと思うのですが。解決策がさっぱりです。var_dumpについてありがとうございました。
m.ts10806

2018/09/23 11:46 編集

追記ありがとうございます。 が、私の回答でアドバイスしたことと違いますよ。 !== だと型比較で「否定」です。 ===をそのまま==に直せばいいだけです。 <?php if (isset($value['status']) === 0) {?> ↓ <?php if (isset($value['status']) == 0) {?> 余談: 下記でも効果としては同じです。 <?php if (isset($value['status']) === "0") {?>
h_r

2018/09/23 11:51

すみません。頂いたアドバイスを試したところ表示結果が変わらなかったので、!==などやってみた次第です。
h_r

2018/09/23 11:53

実は似たようなことを別ファイルでもやっていたのですが、そちらは==に修正したら反映されました!ただなぜこちらは直らないのか。。
m.ts10806

2018/09/23 11:55

うーん。試した結果コメントもなくアドバイスと別のことされると今後考えなきゃいけませんね…。あとはご勝手にってなりますよ…。 ひとまず、ifの直前でその変数echoして内容確かめてください。
guest

0

smartyは使わないのでしょうか?
普段smartyを使ったview表示をしていますので古米箇所若干記述が違ったらすいません。
けど基本の考え方は私なら以下です。

私なら
STATUS[0]='非公開'
STATUS[1]='公開'

というconst値を設けます

そしてview側で、その値の添え字の定数を表示をさせます。
分岐はしません

<input type="submit" name="change_status" value="STATUS[<?php $value['status'] ?>]>

サーバ側は

//1なら0 0なら1にする
$change_status=($_POST['change_status'] == 0) ? 1:0;

$sql = 'UPDATE drink_master
SET status = ' . $change_status .'
WHERE drink_id = :drink_id';
// SQL文を実行する準備
$stmt = $dbh->prepare($sql);
// SQL文のプレースホルダに値をバインド
$drink_id = $_POST['drink_id'];
$stmt->bindParam(':drink_id', $drink_id, PDO::PARAM_INT);
// SQL文を実行
$stmt->execute();
// コミット処理
$dbh->commit();

とします

投稿2018/09/23 15:30

ms5025

総合スコア292

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問