前提
お問い合わせフォームで入力された情報をデータベースに登録したいのですが、
情報入力後、送信ボタンを押しても作成したテーブルに登録されません。
エラーメッセージ等は出ずデータベースにも接続はできている状態です。
登録処理はcontact.phpのHTML上部に記載しています。
入力画面:contact.php
確認画面:confirm.php
当方、PHP,SQL勉強初めて一か月の初学者です。
知識はまだ足りないことばかりなのでアドバイスいただけると幸いです。
発生している問題・エラーメッセージ
発生なし
該当のソースコード
DBの情報
テーブル名 contacts カラム名: id name kana tel email body created_at パラメータ名:システムID 氏名 フリガナ 電話番号 メールアドレス お問い合わせ内容 送信日時
contact.php
<?php function db_open() :PDO{ $user = "root"; $password = "sample"; $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false, ]; $dbh = new PDO('mysql:host=localhost;dbname=form', $user, $password, $opt); return $dbh; } /* データベースへ登録 */ 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', $_POST['name'], PDO::PARAM_STR); $stmt->bindValue(':KATAKANA', $_POST['kana'], PDO::PARAM_STR); $stmt->bindValue(':TEL', $_POST['num'], PDO::PARAM_INT); $stmt->bindValue(':EMAIL', $_POST['mail'], PDO::PARAM_STR); $stmt->bindValue(':TEXTAREA', $_POST['message'], PDO::PARAM_STR); $stmt->execute(); /* ↓一つ前のページのパスを指定し、処理が終わったらそこに戻る */ header('location:'.$_SERVER["HTTP_REFERER"]); } catch (PDOException $e) { echo $e->getMessage(); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Sample</title> <link rel="stylesheet" type="text/css" href="form.css"> <link rel="stylesheet" type="text/css" href="formHeader.css"> <meta name="viewport" content="width=device-width,initial-scale=1"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> </head> <body> <main> <?php include('./header.php'); ?> <div id="contact"> <h1 id="contact_h1">お問い合わせ</h1> <div id="table"> <p class="p_gray">下記の項目をご記入の上送信ボタンを押してください</p> <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。</p> <p>なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。</p> <p><span>*</span>は必須項目となります。</p> <div id="contact_form"> <form action="confirm.php" method="post"> <p>氏名<span>*</span></p> <input type="text" id="name" name="name" placeholder="山田太郎"> <p>フリガナ<span>*</span></p> <input type="text" id="kana" name="kana" placeholder="ヤマダタロウ"> <p>電話番号</p> <input type="text" id="num" name="num" placeholder="09012345678"> <p>メールアドレス<span>*</span></p> <input type="text" id="mail" name="mail" placeholder="test@test.co.jp"> <p class="p_gray">お問い合わせ内容をご記入ください<span>*</span></p> <textarea id="message" name="message"></textarea> <input type="submit" class="submit" id="submit" value="送信"> </form> </section> <!-- DBからデータの取得と表示 --> <?php try{ $dbh = db_open(); $sql = 'SELECT id, name, kana, tel, email, body, created_at FROM contacts'; $statement = $dbh -> query($sql); ?> <section class="DB"> <table> <tr> <th>システムID</th> <th>氏名</th> <th>フリガナ</th> <th>電話番号</th> <th>メールアドレス</th> <th>お問い合わせ内容</th> <th>送信日時</th> </tr> <?php while($row = $statement -> fetch()): ?> <tr> <th><?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['kana'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['tel'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['email'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['body'], ENT_QUOTES, 'UTF-8')?></th> <th><?php echo htmlspecialchars($row['created_at'], ENT_QUOTES, 'UTF-8')?></th> <th><a href="edit.php?id=<?php echo (int) $row['id'];?>">編集</a></th> <th><a href="delete.php?id=<?php echo (int) $row['id'];?>">削除</a></th> </tr> <?php endwhile;?> </table> <?php } catch(PDOException $e){ echo '接続失敗'. $e-> getMessage(); exit(); } ?> </section> </div> </div> </div> <?php include('./footer.php'); ?> </main> </body> <script> window.onload = function() { const submit = document.getElementById('submit'); const name = document.getElementById('name'); const kana = document.getElementById('kana'); const num = document.getElementById('num'); const mail = document.getElementById('mail'); const message = document.getElementById('message'); const mailSt = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/; const numSt = /^\d*$/; const n = name.value; console.log(submit); console.log(n); submit.addEventListener('click', function(event) { let error = []; if (name.value === "") { error.push("氏名は必須入力です。\n"); } if (name.value.length > 10) { error.push("氏名は10文字以内で入力してください。\n"); } if (kana.value === "") { error.push("フリガナは必須入力です。\n"); } if (kana.value.length > 10) { error.push("フリガナは10文字以内で入力してください。\n"); } if (!numSt.test(num.value)) { error.push("半角数字で入力してください。\n"); } if (mail.value === "") { error.push("メールアドレスは必須入力です。\n"); } if ((!mailSt.test(mail.value)) && (mail.value.length > 0)) { error.push("メールアドレスの形式が不正です。\n"); } if (message.value === "") { error.push("お問い合わせ内容は必須入力です。\n"); } if (error.length > 0) { alert(error); return; } }); }; </script> </html>
試したこと
値の受け渡しができていないので登録されていないと思っています、insert文を使用しPOSTで送られてきた情報のキーから受け渡しを図ったが反応しません、、、
補足情報(FW/ツールのバージョンなど)
xamppを使用しlocalhostで表示
phpのバージョンは7.4.28
まだ回答がついていません
会員登録して回答してみよう