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

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

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

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

PHP

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

Q&A

解決済

2回答

5344閲覧

ボタンを押したときにデータベースの値をアップデートさせるには?

boron

総合スコア11

SQL

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

PHP

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

0グッド

0クリップ

投稿2020/10/15 03:36

編集2020/10/15 03:57

イメージ説明
こちらの本申請のボタンを押すと
イメージ説明
situationの値を1にしたいです。

php

1<?php 2 require("nav-user.php"); 3 require('dbconnect.php'); 4 5 $reservations = $db->query('select * from reservation'); 6 ?> 7<!DOCTYPE html> 8 9<html> 10<head> 11<meta charset="UTF-8"> 12 13<meta http-equiv="X-UA-Compatible" content="IE=edge"> 14<meta name="viewport" content="width=device-width, initial-scale=1"> 15<title>予約確認・本申請・取消</title> 16 17<style type="text/css"> 18 19</style> 20</head> 21 22<body> 23 <h2>予約確認・本申請・取消</h2> 24 <table class="table table-striped table-bordered" > 25 <tr> 26 <th>予約状態</th><th>利用日</th><th>利用施設</th><th>行事名</th><th>時間帯</th><th>料金</th><th>操作</th> 27    </tr> 28 <tr> 29 <?php while($reservation = $reservations->fetch()): ?> 30 <td>仮予約</td><td class="text-center"><?php print($reservation['day']); ?></td><td class="text-center"><?php print($reservation['g_name']); ?></td><td class="text-center"><?php print($reservation['facility']); ?></td><td class="text-center"><?php echo "{$reservation['time1']}時~{$reservation['time2']}時"; ?></td><td class="text-center"><?php echo "{$reservation['fee']}円";?></td><td> 31 32 <form action="" method="POST"> 33 34 <input type="hidden" name="id" value=""/> 35 <input type="submit" class="btn btn-primary" value="本申請"/></a><input type="reset" class="btn btn-primary" value="取消"/></td> 36 </form> 37 </tr> 38 <?php endwhile; ?> 39 <?php if($_POST['id']){ 40 $statement = $db->prepare('update reservation set situation=? where id_reservation=? '); 41 $statement->execute(array(1,$reservation['id_reservation)); 42 }?> 43 44 </table> 45 <p>※仮予約は1週間以内に本申請しないと自動で取り下げ</p> 46 47</body> 48</html> 49

上記のコードで実行してもupdateさせたいsituationの値が1にならないといった現状です。
特にエラーもでないので、どこがどう間違っているのか分かりません。
初歩的なことだと思いますがどうしても分かりません
ご教授よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/10/15 03:38

今起きている現象は何でしょうか。 いずれにしてもURLとして&は特別な意味を持つのでやめたほうが良いかと。
boron

2020/10/15 03:48

回答ありがとうございます。 上記のコードで実行してもupdateさせたいsituationの値が1にならないといった現状です。 特にエラーもでないので、どこがどう間違っているのか分かりません。 URLに&は使わないようにします。ありがとうございます。
m.ts10806

2020/10/15 03:51

質問は編集できますので。
guest

回答2

0

ベストアンサー

<input type="hidden" name="id" value=""/>

IDに値が指定されていません。
空に対するUPDATEを行っても何も更新しないでしょうね。

特にエラーもでないので、どこがどう間違っているのか分かりません。

DBに関するエラーのことを言っているのでしたら、そもそもエラーを捕捉できる実装になっていません。
「エラーハンドリング」が必要です。
エラーおよびエラー処理

下記のような記事も読んだ方が良いでしょう。
PHPでデータベースに接続するときのまとめ

あと、現状の仕組みでは更新の処理が出力の処理の後に書かれているので、画面表示時に最新の状態を取得できないのでは。
出力と処理だけのロジックが混ざっているのはよろしくないです。分けてください。

初心者を戒めるPHP#テンプレートとロジックは分けろ

投稿2020/10/15 04:12

m.ts10806

総合スコア80875

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

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

boron

2020/10/15 06:21

IDに値を指定するということはid属性を使うということですかね? コードが汚いのは本当に申し訳ありません。 そして、参考サイトのリンクありがとうございます。 参考にさせていただきます。
m.ts10806

2020/10/15 06:29

>id属性を使うということですかね? いいえ。 引用したように > <input type="hidden" name="id" value=""/> value属性の属性値が指定されていないのでidは空で送信されます。 <input type="hidden" name="id" value="<?php echo $reservation['id_reservation'] ; ?>"/> のように処理したい情報を入れなければなりません。 >コードが汚いのは コードの汚さより必要な実装がされていなかったり処理順番の不整合を指摘しています。 ーーー あと今気づきましたが、下記はそもそも構文エラーですね。 $statement->execute(array(1,$reservation['id_reservation)); ↓ $statement->execute(array(1,$reservation['id_reservation']));
boron

2020/10/15 06:57

無事、解決することができました。 ちょっと分からないことが多すぎるので初心者を戒めるPHPを読んで 少しずつ改善していこうと思います。 ありがとうございました。
m.ts10806

2020/10/15 06:59

提示されたコード見る感じだと</form> の位置だったりちょこちょこHTMLもおかしい部分があるので「正しいHTMLを組む」ことも含めてやってみてください。
guest

0

idを指定して登録ボタンでsubmitすればよいでしょう。
ただしすべてのidを誰でもいじれてしまうと、他人の仮登録を
本登録に変えられることになるので、セッションで保持する
ユーザーIDと合致するものに限定してください

投稿2020/10/15 03:43

yambejp

総合スコア116724

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

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

boron

2020/10/15 04:07

回答ありがとうございます つまりsubmitボタンにname属性を加えて name="$reservation['id_reservation']"にするということですか?
yambejp

2020/10/15 04:29

サブミットする場合はformを細切れにして、hiddenなどで処理してもいいでしょう。 jsで処理するのですから適当なidやカスタムデータを抜き取って バックグラウンドでajaxで処理すればいいような・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問