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

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

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

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

解決済

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

masaa0802
masaa0802

総合スコア28

PHP

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

1回答

0評価

1クリップ

326閲覧

投稿2022/03/16 05:27

実現したいこと

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

データベース

イメージ説明

ソースコード

php

<?php // タイムゾーン設定 date_default_timezone_set('Asia/Tokyo'); // 使用する変数を初期化 $name = null; $kana = null; $tel= null; $email = null; $body = null; $message_array = array(); $pdo = null; $stmt = null; $res = null; $option = null; // データベースに接続 try { $option = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false ); $pdo = new PDO('mysql:charset=UTF8;dbname=casteria;host=127.0.0.1;port=8111', 'root', '', $option); } catch(PDOException $e) { // 接続エラーのときエラー内容を取得する $error_message[] = $e->getMessage(); } session_start(); if( !empty($_POST['btn_submit']) ) { // エラー内容 $errors = []; if (isset($_POST)) { // 氏名 if (empty($_POST['name'])) { $errors['name'] = '氏名は必須項目です。'; } // フリガナ if (empty($_POST['kana'])) { $errors['kana'] = 'フリガナは必須項目です。'; } // 電話番号 if (preg_match('/^[0-9]+$/', $_POST['tel']) === 0) { $errors['tel'] = '正しい電話番号を入力してください。'; } // メールアドレス if (empty($_POST['email'])) { $errors['email'] = 'メールアドレスは必須項目です。'; } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors['email'] = '正しいEメールアドレスを指定してください。'; } // お問い合わせ内容 if (empty($_POST['body'])) { $errors['body'] = 'お問い合わせ内容は必須項目です。'; } } if( empty($error_message) ) { // トランザクション開始 $pdo->beginTransaction(); try { // SQL作成 $stmt = $pdo->prepare("INSERT INTO contacts (name, kana, tel, email, body) VALUES (:name, :kana, :tel, :email, :body)"); // 値をセット $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindValue(':kana', $kana, PDO::PARAM_STR); $stmt->bindValue(':tel', $tel, PDO::PARAM_STR); $stmt->bindValue(':email', $email, PDO::PARAM_STR); $stmt->bindValue(':body', $body, PDO::PARAM_STR); // SQLクエリの実行 $res = $stmt->execute(); // コミット $res = $pdo->commit(); } catch(Exception $e) { // エラーが発生した時はロールバック $pdo->rollBack(); } // プリペアドステートメントを削除 $stmt = null; } } if( empty($error_message) ) { // メッセージのデータを取得する $sql = "SELECT name,kana,tel,email,body FROM contacts ORDER BY created_at DESC"; $message_array = $pdo->query($sql); } // データベースの接続を閉じる $pdo = null; ?> <!-- ----------------------------------------------------------------------------------------------------- --> <!DOCTYPE html> <html lang="ja"> <head> <title>お問い合わせフォーム</title> <link rel="stylesheet" href="css/text"> </head> <body> <style> body { padding: 20px; text-align: center; } h1 { margin-bottom: 20px; padding: 20px 0; color: #209eff; font-size: 122%; border-top: 1px solid #999; border-bottom: 1px solid #999; } input[type="text"] { padding: 5px 30px; margin: 10px; font-size: 86%; border: none; border-radius: 3px; background: #ddf0ff; } input[name="btn_confirm"], input[name="btn_submit"], input[name="btn_back"] { margin-top: 10px; padding: 5px 20px; font-size: 100%; color: #fff; cursor: pointer; border: none; border-radius: 3px; box-shadow: 0 3px 0 #2887d1; background: #4eaaf1; } input[name="btn_back"] { margin-right: 20px; box-shadow: 0 3px 0 #777; background: #999; } textarea[name="body"] { width: 350px; height: 150px; margin: 10px; font-size: 100%; border: none; border-radius: 3px; background: #ddf0ff; } .error_list { padding: 10px 30px; color: #ff2e5a; font-size: 86%; border: 1px solid #ff2e5a; border-radius: 5px; width: 400px; display: inline-block; } .element_wrap { margin-bottom: 10px; padding: 10px 0; border-bottom: 1px solid #ccc; display: contents; width: 400px; } label { margin: 10px; display: inline-block; margin-bottom: 10px; font-weight: bold; width: 150px; } .element_wrap_p { margin-bottom: 10px; border-bottom: 1px solid #ccc; } /*お問い合わせ内容詳細*/ table{ margin: 50px; width: 60%; text-align: center; display: inline-table; border-collapse: collapse; border-spacing: 0; } th,table td{ padding: 10px 0; text-align: center; } table tr:nth-child(odd){ background-color: #eee } input[name="edit"] { margin-top: 10px; padding: 5px 20px; font-size: 100%; text-align: center; color: #fff; cursor: pointer; border: none; border-radius: 3px; box-shadow: 0 3px 0 #01a001; background: #02be02; } input[name="delete"] { margin-top: 10px; padding: 5px 20px; font-size: 100%; text-align: center; color: #fff; cursor: pointer; border: none; border-radius: 3px; box-shadow: 0 3px 0 #a70202; background: #e70404; } </style> <!-- --------------------------------------------------------------------------------------------- --> <h1> 入力画面</h1> <p>* は必須項目です</p> <?php if(!empty($errors) ): ?> <ul class="error_list"> <?php foreach( $errors as $value ): ?> <li><?php echo $value; ?></li> <?php endforeach; ?> </ul> <?php endif; ?> <form action= "" method="post"> <div class="row"> <!-- 氏名 --> <div class="element_wrap"> <label for="name">*氏名</label> <input type="text" name="name" id="name" placeholder="例)入力太郎" value="<?php if( !empty($_POST['name']) ){ echo $_POST['name']; } ?>"><br> </div> <!-- フリガナ --> <div class="element_wrap"> <label for="kana">*フリガナ</label> <input type="text" name="kana" id="kana" placeholder="例)ニュウリョクタロウ" value="<?php if( !empty($_POST['kana']) ){ echo $_POST['kana']; } ?>"><br> </div> <!-- 電話番号 --> <div class="element_wrap"> <label for="tel">電話番号</label> <input type="text" name="tel" id="tel" placeholder="例)08011112222" value="<?php if( !empty($_POST['tel']) ){ echo $_POST['tel']; } ?>"><br> </div> <!-- メールアドレス --> <div class="element_wrap"> <label for="email">*メールアドレス</label> <input type="text" name="email" id="email" placeholder="例)nyuuryoku11@mail.com" value="<?php if( !empty($_POST['email']) ){ echo $_POST['email']; } ?>"><br> </div> <!-- お問い合わせ内容 --> <div class="element_wrap"> <label for="body">*お問い合わせ内容</label><br> <textarea rows="10" name="body" id="body" ><?php if (!empty($_POST['body'])){ echo nl2br($_POST['body']); } ?></textarea><br> </div> <input name = "btn_submit" type="submit" value="入力内容を確認する"> </div> </form> <!-- -------------------------------------(入力画面)お問い合わせ内容詳細------------------------------------- --> <form method="post"> <table> <th>氏名</th> <th>フリガナ</th> <th>電話番号</th> <th>メールアドレス</th> <th>お問い合わせ内容</th> <th></th> <th></th> <tr> <?php if( !empty($message_array) ){ ?> <?php foreach( $message_array as $value ){ ?> <td><p><?php echo $value['name']; ?></p></td> <td><p><?php echo $value['kana']; ?></p></td> <td><p><?php echo $value['tel']; ?></p></td> <td><p><?php echo $value['email']; ?></p></td> <td><p><?php echo $value['body']; ?></p></td> <td><input type="submit" name= "edit" value="編集"></td> <td><input type="submit" name= "delete" value="削除"></td> <?php } ?> <?php } ?> </tr> </table> </form> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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