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

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

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

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

Q&A

解決済

1回答

601閲覧

データベースにデータが登録されない

masaa0802

総合スコア28

PHP

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

0グッド

1クリップ

投稿2022/03/16 05:27

実現したいこと

現在PHPでデータベースにデータを登録しようとしていますが、登録されません。
他サイトのデータベースとテーブル作成を見ながら、
自分の登録したいカラムに変更しましたが、データベースに反映されません。
他サイトのコードを試し、phpmyadminに情報登録はされてたのでデータベース情報の記載は
間違えていないと思います。
どうしたらデータベースに登録できるかご教示お願い致します。

データベース

イメージ説明

ソースコード

php

1<?php 2// タイムゾーン設定 3date_default_timezone_set('Asia/Tokyo'); 4 5// 使用する変数を初期化 6$name = null; 7$kana = null; 8$tel= null; 9$email = null; 10$body = null; 11 12$message_array = array(); 13$pdo = null; 14$stmt = null; 15$res = null; 16$option = null; 17 18// データベースに接続 19try { 20 21 $option = array( 22 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 23 PDO::MYSQL_ATTR_MULTI_STATEMENTS => false 24 ); 25 $pdo = new PDO('mysql:charset=UTF8;dbname=casteria;host=127.0.0.1;port=8111', 'root', '', $option); 26 27} catch(PDOException $e) { 28 29 // 接続エラーのときエラー内容を取得する 30 $error_message[] = $e->getMessage(); 31} 32 33session_start(); 34 35if( !empty($_POST['btn_submit']) ) { 36 37 // エラー内容 38 $errors = []; 39 40 if (isset($_POST)) { 41 // 氏名 42 if (empty($_POST['name'])) { 43 $errors['name'] = '氏名は必須項目です。'; 44 } 45 // フリガナ 46 if (empty($_POST['kana'])) { 47 $errors['kana'] = 'フリガナは必須項目です。'; 48 } 49 // 電話番号 50 if (preg_match('/^[0-9]+$/', $_POST['tel']) === 0) { 51 $errors['tel'] = '正しい電話番号を入力してください。'; 52 } 53 // メールアドレス 54 if (empty($_POST['email'])) { 55 $errors['email'] = 'メールアドレスは必須項目です。'; 56 } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 57 $errors['email'] = '正しいEメールアドレスを指定してください。'; 58 } 59 // お問い合わせ内容 60 if (empty($_POST['body'])) { 61 $errors['body'] = 'お問い合わせ内容は必須項目です。'; 62 } 63 } 64 65 if( empty($error_message) ) { 66 67 // トランザクション開始 68 $pdo->beginTransaction(); 69 70 try { 71 72 // SQL作成 73 $stmt = $pdo->prepare("INSERT INTO contacts (name, kana, tel, email, body) VALUES (:name, :kana, :tel, :email, :body)"); 74 75 // 値をセット 76 $stmt->bindValue(':name', $name, PDO::PARAM_STR); 77 $stmt->bindValue(':kana', $kana, PDO::PARAM_STR); 78 $stmt->bindValue(':tel', $tel, PDO::PARAM_STR); 79 $stmt->bindValue(':email', $email, PDO::PARAM_STR); 80 $stmt->bindValue(':body', $body, PDO::PARAM_STR); 81 82 // SQLクエリの実行 83 $res = $stmt->execute(); 84 85 // コミット 86 $res = $pdo->commit(); 87 88 } catch(Exception $e) { 89 90 // エラーが発生した時はロールバック 91 $pdo->rollBack(); 92 } 93 94 // プリペアドステートメントを削除 95 $stmt = null; 96 } 97} 98 99if( empty($error_message) ) { 100 101 // メッセージのデータを取得する 102 $sql = "SELECT name,kana,tel,email,body FROM contacts ORDER BY created_at DESC"; 103 $message_array = $pdo->query($sql); 104} 105 106// データベースの接続を閉じる 107$pdo = null; 108 109?> 110<!-- ----------------------------------------------------------------------------------------------------- --> 111<!DOCTYPE html> 112<html lang="ja"> 113 <head> 114 <title>お問い合わせフォーム</title> 115 <link rel="stylesheet" href="css/text"> 116 </head> 117<body> 118 <style> 119 body { 120 padding: 20px; 121 text-align: center; 122 } 123 124 h1 { 125 margin-bottom: 20px; 126 padding: 20px 0; 127 color: #209eff; 128 font-size: 122%; 129 border-top: 1px solid #999; 130 border-bottom: 1px solid #999; 131 } 132 133 input[type="text"] { 134 padding: 5px 30px; 135 margin: 10px; 136 font-size: 86%; 137 border: none; 138 border-radius: 3px; 139 background: #ddf0ff; 140 } 141 142 input[name="btn_confirm"], 143 input[name="btn_submit"], 144 input[name="btn_back"] { 145 margin-top: 10px; 146 padding: 5px 20px; 147 font-size: 100%; 148 color: #fff; 149 cursor: pointer; 150 border: none; 151 border-radius: 3px; 152 box-shadow: 0 3px 0 #2887d1; 153 background: #4eaaf1; 154 } 155 156 input[name="btn_back"] { 157 margin-right: 20px; 158 box-shadow: 0 3px 0 #777; 159 background: #999; 160 } 161 textarea[name="body"] { 162 width: 350px; 163 height: 150px; 164 margin: 10px; 165 font-size: 100%; 166 border: none; 167 border-radius: 3px; 168 background: #ddf0ff; 169 } 170 .error_list { 171 padding: 10px 30px; 172 color: #ff2e5a; 173 font-size: 86%; 174 border: 1px solid #ff2e5a; 175 border-radius: 5px; 176 width: 400px; 177 display: inline-block; 178 } 179 180 .element_wrap { 181 margin-bottom: 10px; 182 padding: 10px 0; 183 border-bottom: 1px solid #ccc; 184 display: contents; 185 width: 400px; 186 } 187 188 label { 189 margin: 10px; 190 display: inline-block; 191 margin-bottom: 10px; 192 font-weight: bold; 193 width: 150px; 194 } 195 196 .element_wrap_p { 197 margin-bottom: 10px; 198 border-bottom: 1px solid #ccc; 199 } 200 /*お問い合わせ内容詳細*/ 201 table{ 202 margin: 50px; 203 width: 60%; 204 text-align: center; 205 display: inline-table; 206 border-collapse: collapse; 207 border-spacing: 0; 208 } 209 210 th,table td{ 211 padding: 10px 0; 212 text-align: center; 213 } 214 215 table tr:nth-child(odd){ 216 background-color: #eee 217 } 218 input[name="edit"] { 219 margin-top: 10px; 220 padding: 5px 20px; 221 font-size: 100%; 222 text-align: center; 223 color: #fff; 224 cursor: pointer; 225 border: none; 226 border-radius: 3px; 227 box-shadow: 0 3px 0 #01a001; 228 background: #02be02; 229 } 230 input[name="delete"] { 231 margin-top: 10px; 232 padding: 5px 20px; 233 font-size: 100%; 234 text-align: center; 235 color: #fff; 236 cursor: pointer; 237 border: none; 238 border-radius: 3px; 239 box-shadow: 0 3px 0 #a70202; 240 background: #e70404; 241 } 242</style> 243 244<!-- --------------------------------------------------------------------------------------------- --> 245 246<h1> 入力画面</h1> 247<p>* は必須項目です</p> 248 <?php if(!empty($errors) ): ?> 249 <ul class="error_list"> 250 <?php foreach( $errors as $value ): ?> 251 <li><?php echo $value; ?></li> 252 <?php endforeach; ?> 253 </ul> 254 <?php endif; ?> 255 <form action= "" method="post"> 256 <div class="row"> 257 <!-- 氏名 --> 258 <div class="element_wrap"> 259 <label for="name">*氏名</label> 260 <input type="text" name="name" id="name" placeholder="例)入力太郎" 261 value="<?php if( !empty($_POST['name']) ){ echo $_POST['name']; } ?>"><br> 262 </div> 263 <!-- フリガナ --> 264 <div class="element_wrap"> 265 <label for="kana">*フリガナ</label> 266 <input type="text" name="kana" id="kana" placeholder="例)ニュウリョクタロウ" 267 value="<?php if( !empty($_POST['kana']) ){ echo $_POST['kana']; } ?>"><br> 268 </div> 269 <!-- 電話番号 --> 270 <div class="element_wrap"> 271 <label for="tel">電話番号</label> 272 <input type="text" name="tel" id="tel" placeholder="例)08011112222" 273 value="<?php if( !empty($_POST['tel']) ){ echo $_POST['tel']; } ?>"><br> 274 </div> 275 <!-- メールアドレス --> 276 <div class="element_wrap"> 277 <label for="email">*メールアドレス</label> 278 <input type="text" name="email" id="email" placeholder="例)nyuuryoku11@mail.com" 279 value="<?php if( !empty($_POST['email']) ){ echo $_POST['email']; } ?>"><br> 280 </div> 281 <!-- お問い合わせ内容 --> 282 <div class="element_wrap"> 283 <label for="body">*お問い合わせ内容</label><br> 284 <textarea rows="10" name="body" id="body" ><?php if (!empty($_POST['body'])){ echo nl2br($_POST['body']); } ?></textarea><br> 285 </div> 286 <input name = "btn_submit" type="submit" value="入力内容を確認する"> 287 </div> 288 </form> 289 <!-- -------------------------------------(入力画面)お問い合わせ内容詳細------------------------------------- --> 290<form method="post"> 291 <table> 292 <th>氏名</th> 293 <th>フリガナ</th> 294 <th>電話番号</th> 295 <th>メールアドレス</th> 296 <th>お問い合わせ内容</th> 297 <th></th> 298 <th></th> 299 <tr> 300 <?php if( !empty($message_array) ){ ?> 301 <?php foreach( $message_array as $value ){ ?> 302 <td><p><?php echo $value['name']; ?></p></td> 303 <td><p><?php echo $value['kana']; ?></p></td> 304 <td><p><?php echo $value['tel']; ?></p></td> 305 <td><p><?php echo $value['email']; ?></p></td> 306 <td><p><?php echo $value['body']; ?></p></td> 307 <td><input type="submit" name= "edit" value="編集"></td> 308 <td><input type="submit" name= "delete" value="削除"></td> 309 <?php } ?> 310 <?php } ?> 311 </tr> 312 </table> 313</form> 314</body> 315</html> 316 317

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

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

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

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

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

m.ts10806

2022/03/16 05:37

ロールバックだけではなく、exception内容を出力してエラー詳細を確認してください
masaa0802

2022/03/16 05:45

exception $eのエラーが以下になります。 PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null in C:\xampp\xampp\htdocs\geekation_php_advanced-main-PHP-\PHP応用_演習\Views\contact2.php:82 Stack trace: #0 C:\xampp\xampp\htdocs\geekation_php_advanced-main-PHP-\PHP応用_演習\Views\contact2.php(82): PDOStatement->execute() #1 C:\xampp\xampp\htdocs\geekation_php_advanced-main-PHP-\PHP応用_演習\public\index.php(8): require_once('C:\\xampp\\xampp\\...') #2 {main}
退会済みユーザー

退会済みユーザー

2022/03/16 06:19 編集

$name = null; のあと、誰も値を詰めていないのでは? $_POSTに含まれるフォーム受信データを検証はしていても、変数の詰め替えまではしていないようで。
masaa0802

2022/03/16 06:27

php-gresさん、ご返信ありがとうございます。 ご指摘の内容を記載したら、見事にデータが反映され、データが表示されました。 ありがとうございます。 単に変数に格納してなかっただけでした。
guest

回答1

0

自己解決

原因

変数の初期化以降、変数にデータを格納していなかったため。

解決策

$name = $_POST['name'];のようにPOSTしたデータを変数に格納したことで解決。

投稿2022/03/16 06:43

masaa0802

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問