前提
お問い合わせフォームで入力された情報をデータベースに登録したいのですが、
情報入力後、送信ボタンを押しても作成したテーブルに登録されません。
エラーメッセージ等は出ずデータベースにも接続はできている状態です。
登録処理は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
回答1件
あなたの回答
tips
プレビュー