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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

HTML

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

Q&A

解決済

1回答

1663閲覧

formタグから入力したデータをDBに登録

horohorohoroo

総合スコア1

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

HTML

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

0グッド

0クリップ

投稿2022/04/14 07:26

編集2022/04/14 08:32

前提

お問い合わせフォームで入力された情報をデータベースに登録したいのですが、
情報入力後、送信ボタンを押しても作成したテーブルに登録されません。
エラーメッセージ等は出ずデータベースにも接続はできている状態です。
登録処理はcontact.phpのHTML上部に記載しています。
入力画面:contact.php
確認画面:confirm.php
当方、PHP,SQL勉強初めて一か月の初学者です。
知識はまだ足りないことばかりなのでアドバイスいただけると幸いです。

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

発生なし

該当のソースコード

DBの情報

1テーブル名 contacts 2カラム名: id  name  kana   tel    email       body       created_at 3パラメータ名:システムID  氏名  フリガナ 電話番号  メールアドレス  お問い合わせ内容   送信日時 4

contact.php

1<?php 2 3function db_open() :PDO{ 4$user = "root"; 5$password = "sample"; 6$opt = [ 7PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 8PDO::ATTR_EMULATE_PREPARES => false, 9PDO::MYSQL_ATTR_MULTI_STATEMENTS => false, 10]; 11$dbh = new PDO('mysql:host=localhost;dbname=form', $user, $password, $opt); 12return $dbh; 13} 14 15/* データベースへ登録 */ 16if(!empty($_POST['name'])){ 17 try{ 18 $sql = ' 19 INSERT INTO contacts( 20 name, 21 kana, 22 tel, 23 email, 24 body 25 ) 26 VALUES( 27 :FULLNAME, 28 :KATAKANA, 29 :TEL, 30 :EMAIL, 31 :TEXTAREA 32 ) 33 '; 34 $stmt = $dbh->prepare($sql); 35 $stmt->bindValue(':FULLNAME', $_POST['name'], PDO::PARAM_STR); 36 $stmt->bindValue(':KATAKANA', $_POST['kana'], PDO::PARAM_STR); 37 $stmt->bindValue(':TEL', $_POST['num'], PDO::PARAM_INT); 38 $stmt->bindValue(':EMAIL', $_POST['mail'], PDO::PARAM_STR); 39 $stmt->bindValue(':TEXTAREA', $_POST['message'], PDO::PARAM_STR); 40 $stmt->execute(); 41 42 /* ↓一つ前のページのパスを指定し、処理が終わったらそこに戻る */ 43 header('location:'.$_SERVER["HTTP_REFERER"]); 44 } catch (PDOException $e) { 45 echo $e->getMessage(); 46 } 47 } 48?> 49 50<!DOCTYPE html> 51<html lang="ja"> 52 53<head> 54 <meta charset="UTF-8"> 55 <title>Sample</title> 56 <link rel="stylesheet" type="text/css" href="form.css"> 57 <link rel="stylesheet" type="text/css" href="formHeader.css"> 58 <meta name="viewport" content="width=device-width,initial-scale=1"> 59 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 60</head> 61 62<body> 63 <main> 64 <?php include('./header.php'); ?> 65 <div id="contact"> 66 <h1 id="contact_h1">お問い合わせ</h1> 67 <div id="table"> 68 <p class="p_gray">下記の項目をご記入の上送信ボタンを押してください</p> 69 <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。</p> 70 <p>なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。</p> 71 <p><span>*</span>は必須項目となります。</p> 72 <div id="contact_form"> 73 <form action="confirm.php" method="post"> 74 <p>氏名<span>*</span></p> 75 <input type="text" id="name" name="name" placeholder="山田太郎"> 76 <p>フリガナ<span>*</span></p> 77 <input type="text" id="kana" name="kana" placeholder="ヤマダタロウ"> 78 <p>電話番号</p> 79 <input type="text" id="num" name="num" placeholder="09012345678"> 80 <p>メールアドレス<span>*</span></p> 81 <input type="text" id="mail" name="mail" placeholder="test@test.co.jp"> 82 <p class="p_gray">お問い合わせ内容をご記入ください<span>*</span></p> 83 <textarea id="message" name="message"></textarea> 84 <input type="submit" class="submit" id="submit" value="送信"> 85 </form> 86 </section> 87 <!-- DBからデータの取得と表示 --> 88 89 <?php 90 try{ 91 $dbh = db_open(); 92 $sql = 'SELECT id, name, kana, tel, email, body, created_at FROM contacts'; 93 $statement = $dbh -> query($sql); 94?> 95 <section class="DB"> 96 <table> 97 <tr> 98 <th>システムID</th> 99 <th>氏名</th> 100 <th>フリガナ</th> 101 <th>電話番号</th> 102 <th>メールアドレス</th> 103 <th>お問い合わせ内容</th> 104 <th>送信日時</th> 105 </tr> 106 <?php while($row = $statement -> fetch()): ?> 107 108 <tr> 109 <th><?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8')?></th> 110 <th><?php echo htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8')?></th> 111 <th><?php echo htmlspecialchars($row['kana'], ENT_QUOTES, 'UTF-8')?></th> 112 <th><?php echo htmlspecialchars($row['tel'], ENT_QUOTES, 'UTF-8')?></th> 113 <th><?php echo htmlspecialchars($row['email'], ENT_QUOTES, 'UTF-8')?></th> 114 <th><?php echo htmlspecialchars($row['body'], ENT_QUOTES, 'UTF-8')?></th> 115 <th><?php echo htmlspecialchars($row['created_at'], ENT_QUOTES, 'UTF-8')?></th> 116 <th><a href="edit.php?id=<?php echo (int) $row['id'];?>">編集</a></th> 117 <th><a href="delete.php?id=<?php echo (int) $row['id'];?>">削除</a></th> 118 119 </tr> 120 <?php endwhile;?> 121 </table> 122 <?php 123 } catch(PDOException $e){ 124 echo '接続失敗'. $e-> getMessage(); 125 exit(); 126 } 127 ?> 128 </section> 129 </div> 130 </div> 131 </div> 132 <?php include('./footer.php'); ?> 133 </main> 134</body> 135<script> 136window.onload = function() { 137 const submit = document.getElementById('submit'); 138 const name = document.getElementById('name'); 139 const kana = document.getElementById('kana'); 140 const num = document.getElementById('num'); 141 const mail = document.getElementById('mail'); 142 const message = document.getElementById('message'); 143 const mailSt = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/; 144 const numSt = /^\d*$/; 145 const n = name.value; 146 console.log(submit); 147 console.log(n); 148 149 submit.addEventListener('click', function(event) { 150 let error = []; 151 if (name.value === "") { 152 error.push("氏名は必須入力です。\n"); 153 } 154 if (name.value.length > 10) { 155 error.push("氏名は10文字以内で入力してください。\n"); 156 } 157 if (kana.value === "") { 158 error.push("フリガナは必須入力です。\n"); 159 } 160 if (kana.value.length > 10) { 161 error.push("フリガナは10文字以内で入力してください。\n"); 162 } 163 if (!numSt.test(num.value)) { 164 error.push("半角数字で入力してください。\n"); 165 } 166 if (mail.value === "") { 167 error.push("メールアドレスは必須入力です。\n"); 168 } 169 if ((!mailSt.test(mail.value)) && (mail.value.length > 0)) { 170 error.push("メールアドレスの形式が不正です。\n"); 171 } 172 if (message.value === "") { 173 error.push("お問い合わせ内容は必須入力です。\n"); 174 } 175 if (error.length > 0) { 176 alert(error); 177 return; 178 } 179 }); 180}; 181</script> 182 183</html>

試したこと

値の受け渡しができていないので登録されていないと思っています、insert文を使用しPOSTで送られてきた情報のキーから受け渡しを図ったが反応しません、、、

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

xamppを使用しlocalhostで表示
phpのバージョンは7.4.28

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

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

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

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

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

yambejp

2022/04/14 08:10

念のため・・・bindParamをbindValueにしてもだめですか?
m.ts10806

2022/04/14 08:13

db_open 呼び出すところも提示してください。 あと、オートコミットをOFFにしてたりしませんか?
horohorohoroo

2022/04/14 08:14

アドバイスありがとうございます! 修正して試したところ、挙動に変化はありませんでした;;
horohorohoroo

2022/04/14 08:45

オートコミットに関してはいじっていないので、SELECT @@session.autocommit;で確認したところ1が出たのでonだと思います。
guest

回答1

0

ベストアンサー

デバッグ方法
bindParam→bindValueにして
$_POSTを指定せずに

PHP

1$stmt->bindValue(':FULLNAME', 'test', PDO::PARAM_STR); 2$stmt->bindValue(':KATAKANA', 'test', PDO::PARAM_STR); 3$stmt->bindValue(':TEL', 123, PDO::PARAM_INT); 4$stmt->bindValue(':EMAIL', 'test', PDO::PARAM_STR); 5$stmt->bindValue(':TEXTAREA', 'test', PDO::PARAM_STR);

みたいなリテラルを指定してinsertされるかどうか試すところから

投稿2022/04/14 08:12

yambejp

総合スコア114777

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

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

yambejp

2022/04/14 08:45

これで登録できないなら select文発行で結果が表示されるか確認する まぁrootでのアクセスなのでinsert権限がないとは思えませんが・・
horohorohoroo

2022/04/14 09:12

/* データベースへ登録 */ if(!empty($_POST['name'])){ try{ $sql = ' INSERT INTO contacts( name, kana, tel, email, body ) VALUES( :FULLNAME, :KATAKANA, :TEL, :EMAIL, :TEXTAREA ) '; $stmt = $dbh->prepare($sql); $stmt->bindValue(':FULLNAME', '田中', PDO::PARAM_STR); $stmt->bindValue(':FULLNAME', 'タナカ', PDO::PARAM_STR); $stmt->bindValue(':TEL', '090', PDO::PARAM_STR); $stmt->bindValue(':FULLNAME', 'test@test.co.jp', PDO::PARAM_STR); $stmt->bindValue(':FULLNAME', 'a', PDO::PARAM_STR); $stmt->execute(); 今のところ修正したのですが、中身の確認方法がわかりません、、、 var_dampで中身を見れるかなと思ったのですが、変数がないなと デバック方法が違うの、わからないです。 とりあえず、アドバイスいただいたselect文発行を確認してみます。
horohorohoroo

2022/04/14 09:14

$stmt = $dbh->prepare($sql); $stmt->bindValue(':FULLNAME', '田中', PDO::PARAM_STR); $stmt->bindValue(':KATAKANA', 'タナカ', PDO::PARAM_STR); $stmt->bindValue(':TEL', '090', PDO::PARAM_STR); $stmt->bindValue(':EMAIL', 'test@test.co.jp', PDO::PARAM_STR); $stmt->bindValue(':TEXTAREA', 'a', PDO::PARAM_STR); $stmt->execute();
yambejp

2022/04/14 09:16 編集

> 中身の確認方法がわかりません ということですが > 作成したテーブルに登録されません ともともと書いていたはずですので、なにか確認する手段をお持ちなのでは?
horohorohoroo

2022/04/14 09:21

select文発行では入力できました
horohorohoroo

2022/04/14 09:27

登録の有無に関して情報入力後に送信ボタンを押して登録されていれば、phpmyadminにあるテーブルに情報が入るので確認できるのですが、その確認方法でよいならば登録されていません;;
horohorohoroo

2022/04/14 09:33

疑問点の詳細に関しては、アドバイス頂いたリテラルの指定で情報がある状態にしているので その情報を送信する方法ですが送信ボタンを押したら登録の流れの前に情報入力があり、バリデーション設定のため入力しなければ送信ボタンは押せないようになっています。 リテラル指定の情報と同じ内容を入力して送信ボタンを押してみましたが登録はされていませんでした、、、
yambejp

2022/04/14 09:40

今のフローをみるとPOSTでnameがきてもdb_open()を実行していないのでINSERTの発行がされないように見えますが・・・
horohorohoroo

2022/04/14 09:46

なるほど、それが正解のような気がします、、、
horohorohoroo

2022/04/14 09:56

ちょっとまだ理解力が低いみたいなので、いろいろと調べてもう少しインプットしたいと思います;; たくさんアドバイスありがとうございました! 今回で学ばせてもらったこと意識して頑張って作成したいと思います。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問