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

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

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

phpPgAdminは、PHPで作成された複数のPostgreSQLデータベースをブラウザから簡単に管理・操作できるツール。テーブルの作成や参照を始め、データのバックアップやリストアといった操作が可能になります。

MySQL

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

PHP

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

Q&A

解決済

1回答

599閲覧

DBに保存できなくなってしまいました。

YTKM

総合スコア22

phpPgAdmin

phpPgAdminは、PHPで作成された複数のPostgreSQLデータベースをブラウザから簡単に管理・操作できるツール。テーブルの作成や参照を始め、データのバックアップやリストアといった操作が可能になります。

MySQL

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

PHP

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

0グッド

0クリップ

投稿2022/07/20 23:10

phpにてフォームの削除機能を実装中に、保存が出来なくなっている事に気がつきました。
元々は、確認画面にて送信ボタンを押すと、データベースに保存できていました。
その後、編集機能、一覧表示機能、削除機能、バリデーションを実装して、改めて保存できるか確認した所、DBに保存できなくなっていました。
var_dumpでデバックして確認した所、モデルまで値が来ていて、INSERTも、bindValueも、executeもしているのに、保存されないのが分かりません
分かる方居ましたらお願いします。

フォーム

入力画面

Image from Gyazo

確認画面

Image from Gyazo

完了画面

Image from Gyazo

コード

VIEW

php

1<?php 2function h($str) 3 4{ 5 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 6} 7 8require 'validation.php'; 9require_once(ROOT_PATH .'Controllers/ContactController.php'); 10 11$create = new ContactController(); 12$edit = new ContactController(); 13$params = $edit->index(); 14 15 16 17 18 19/// $pageFlagにて切り替え 20/// 入力画面 21 22 $pageFlag = 0; 23 $errors = validation($_POST); 24/// 確認画面 25if (!empty($_POST['btn_confirm']) && empty($errors)) { 26 $pageFlag = 1; 27} 28/// 完了画面 29if (!empty($_POST['btn_submit'])) { 30 $pageFlag = 2; 31 var_dump($_POST); 32 $create->contact($_POST); 33 34} 35/// 更新画面 36if (!empty($_POST["btn_edit"])) { 37 $pageFlag = 3; 38 39} 40 41 42 43?> 44 45割愛 46 47<body> 48<div class = "container"> 49 50<!-- 入力画面フォーム --> 51<?php if($pageFlag === 0 ) : ?> 52 53<!-- エラー文表示 --> 54<?php 55if(!empty($errors) && !empty($_POST['btn_confirm'])) : 56 57?> 58<?php echo '<ul>' ; ?> 59<?php 60 foreach($errors as $error){ 61 echo '<li>'. $error . '</li>' ; 62 } 63?> 64<?php echo '</ul>' ; ?> 65<?php endif ;?> 66 67 68 <div class = "title"> 69 <h1>入力画面</h1> 70 </div> 71 <form method="POST" action="contact.php"> 72 <p>氏名</p> 73 <input type="text" name="name" id="inputName" value="<?php if(!empty($_POST['name'])) { echo h($_POST['name']); } ?>" > 74 <br> 75 <p>フリガナ</p> 76 <input type="text" name="kana" id="inputKana" value="<?php if(!empty($_POST['kana'])) { echo h($_POST['kana']); } ?>" > 77 <br> 78 <p>電話番号</p> 79 <input type="text" name="tel" value="<?php if(!empty($_POST['tel'])) { echo h($_POST['tel']); } ?>" > 80 <br> 81 <p>メールアドレス</p> 82 <input type="email" name="email" id="inputMail" value="<?php if(!empty($_POST['email'])) { echo h($_POST['email']); } ?>" > 83 <br> 84 <p>お問い合わせ内容</p> 85 <textarea name="body" id="inputBody"> 86 <?php if(!empty($_POST['body'])) { echo h($_POST['body']); } ?> 87 </textarea> 88 <p><input type="submit" name="btn_confirm" id="btnConfirm" value="送信"> </p> 89 <br> 90 </form> 91 <section> 92 <table border="1"> 93 <tbody> 94 <tr> 95 <th>氏名</th> 96 <th>フリガナ</th> 97 <th>電話番号</th> 98 <th>メールアドレス</th> 99 <th>お問い合わせ内容</th> 100 <th>編集ボタン</th> 101 <th>削除ボタン</th> 102 </tr> 103 <?php foreach($params['contacts'] as $content): ?> 104 <tr> 105 <td><?=$content['name'] ?></td> 106 <td><?=$content['kana'] ?></td> 107 <td><?=$content['tel'] ?></td> 108 <td><?=$content['email'] ?></td> 109 <td><?=$content['body'] ?></td> 110 <td> 111 <?php echo "<a href=edit.php?id=" . $content["id"] . ">編集</a>\n"; ?> 112 </td> 113 <td> 114 <?php echo "<a href=contact.php?id=" . $content["id"] . ">削除</a>\n"; ?> 115 </td> 116 </tr> 117 </tbody> 118 <?php endforeach; ?> 119 </table> 120 </section> 121<?php endif; ?> 122 123 124<!-- 確認画面フォーム --> 125<?php if($pageFlag === 1 ) : ?> 126 <h1>確認画面</h1> 127 <form method="POST" action="contact.php"> 128 <p>氏名</p> 129 <?php echo h($_POST['name']);?> 130 <br> 131 <p>フリガナ</p> 132 <?php echo h($_POST['kana']);?> 133 <br> 134 <p>電話番号</p> 135 <?php echo h($_POST['tel']);?> 136 <br> 137 <p>メールアドレス</p> 138 <?php echo h($_POST['email']);?> 139 <br> 140 <p>お問い合わせ</p> 141 <?php echo h($_POST['body']);?> 142 <br> 143 <p>上記の内容でよろしいですか?</p> 144 <input type="submit" name="back" value="キャンセル"> 145 <input type="submit" name="btn_submit" value="送信"> 146 <input type="hidden" name="name" value="<?php echo h($_POST['name']); ?>" > 147 <input type="hidden" name="kana" value="<?php echo h($_POST['kana']); ?>" > 148 <input type="hidden" name="tel" value="<?php echo h($_POST['tel']); ?>" > 149 <input type="hidden" name="email" value="<?php echo h($_POST['email']); ?>" > 150 <input type="hidden" name="body" value="<?php echo h($_POST['body']); ?>" > 151 </form> 152<?php endif; ?> 153 154 155 156<!-- 完了画面フォーム --> 157<?php if($pageFlag === 2 ) : ?> 158 <p>完了画面</p> 159<br> 160お問合せ内容を送信しました。 161<br> 162ありがとうございました。 163<br> 164<form> 165<input type="submit" name="back" value="キャンセル"> 166</form> 167<?php endif; ?> 168 169</div> 170</body> 171</html>

コントローラー

php

1 2<?php 3 4 5require_once(ROOT_PATH .'Models/ContactModel.php'); 6 7class ContactController { 8 private $request; // リクエストパラメータ(GET,POST) 9 private $Contact; // Playerモデル 10 private $Text; 11 12 public function __construct() { 13 // リクエストパラメータの取得 14 $this->request['get'] = $_GET; 15 $this->request['post'] = $_POST; 16 17 // モデルオブジェクトの生成 18 $this->Contact = new ContactModel(); 19 $this->Text = new ContactModel(); 20 // 別モデルと連携 21 $dbh = $this->Contact; 22 } 23 24 public function contact($data) 25 { 26 var_dump($data); 27 $this->Contact->contact($data); 28 } 29 30 public function text($edit) 31 { 32 $this->Contact->text($edit); 33 } 34 35 36 37 public function index() { 38 $pageFlag = 0; 39 if(isset($this->request['get']['pageFlag'])) { 40 $pageFlag = $this->request['get']['pageFlag']; 41 } 42 43 $contacts = $this->Contact->findAll($pageFlag); 44 $params = [ 45 'contacts' => $contacts, 46 'page' => $pageFlag // ページ番号 47 ]; 48 return $params; 49} 50} 51?>

モデル

php

1 2<?php 3require_once(ROOT_PATH .'Models/Db.php'); 4 5class ContactModel extends Db { 6 public function __construct($dbh = null) { 7 parent::__construct($dbh); 8 } 9 public function contact($data) 10 { 11 var_dump($data); 12 $name = $data['name']; 13 $kana = $data['kana']; 14 $tel = $data['tel']; 15 $email = $data['email']; 16 $body = $data['body']; 17 $this->dbh->beginTransaction(); 18 try { 19 $sql = "INSERT INTO contacts (name, kana, tel, email, body) VALUES (:name,:kana,:tel,:email,:body)"; 20 $sth = $this->dbh->prepare($sql); 21 $sth -> bindValue(':name', $name); 22 $sth -> bindValue(':kana', $kana); 23 $sth -> bindValue(':tel', $tel); 24 $sth -> bindValue(':email', $email); 25 $sth -> bindValue(':body', $body); 26 $sth->execute(); 27 } catch (Exception $e) { 28 echo "接続失敗: " . $e->getMessage() . "\n"; 29 exit(); 30 } 31 } 32 33 public function text($edit){ 34 if (!empty($_POST['edit_confirm']) && empty($errors)) { 35 try { 36 $dbh = new PDO('mysql:dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASSWD); 37 38 $stmt = $dbh->prepare('UPDATE contacts SET name = :name, kana = :kana , tel = :tel , email = :email , body = :body WHERE id = :id'); 39 40 $stmt->execute(array(':name' => $_POST['name'], ':kana' => $_POST['kana'], ':tel' => $_POST['tel'], ':email' => $_POST['email'], ':body' => $_POST['body'], ':id' => $_POST['id'])); 41 } catch (Exception $e) { 42 echo 'エラーが発生しました。:' . $e->getMessage(); 43 } 44 } elseif (!empty($errors) && !empty($_POST['edit_confirm'])) { 45 foreach($errors as $error){ 46 echo '<li>'. $error . '</li>' ; 47 } 48 } 49 } 50 51 52 53 54 public function findAll($pageFlag = 0):Array { 55 $sql = 'SELECT'; 56 $sql .= ' id,'; 57 $sql .= ' name,'; 58 $sql .= ' kana,'; 59 $sql .= ' tel,'; 60 $sql .= ' email,'; 61 $sql .= ' body'; 62 $sql .= ' FROM contacts'; 63 64 $sth = $this->dbh->prepare($sql); 65 $sth->execute(); 66 $result = $sth->fetchAll(PDO::FETCH_ASSOC); 67 return $result; 68 } 69 70 } 71?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

Transactionを張るのでしたら、commit / rollbackが必要です。

投稿2022/07/20 23:44

m.ts10806

総合スコア80854

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

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

YTKM

2022/07/22 08:40

回答いただき有難うございます。 commitを記述した所反映されました。 記述は大丈夫でしたが、commitをしていなかった為反映されていなかったようです。
m.ts10806

2022/07/22 08:46

1セットなのでご注意を。 もちろんエラー時のrollbackもです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問