###質問内容
ポートフォリオサイトにコメント機能とメール送信機能をつけようとしていたところ問題が発生しました。
コメントフォームの確認画面から転送完了画面へと飛べず、データベースの登録もできない状態です。
前提・実現したいこと
「コメント欄」、具体的には「コメントを書き、書いたデータをデータベースに保管し、メールで送信できるシステム」を追加しようと考えています。
とはいえ、今は「書いたデータをデータベースに保管する」「サイトとして問題なく作動する」ことが目的なのでメール送信のコードはまだ書いていない状態です。
MAMPでの入力ですが、ゆくゆくはレンタルサーバーを通して本格的にアップロードもする予定でいます。
なお、実装には以下の書籍及びサイトを参考にさせていただきました。
よくわかるPHPの教科書 【PHP7対応版】 chapter6
【PHP】お問い合わせフォームの作成【コピペOK】
PHPで自動返信メール機能付きのコンタクトフォームを作成する(入力画面)
#現在の状況
「index.php」で入力を受け付け、「check.php」でindex.phpから送られてきたセッションを表示。データベース接続を「dbConnect.php」で行っております。
「index.php」で未入力の値がある場合「check.php」のif文でエラーメッセージを表示させた上でindex.phpに飛ばされる仕組みです。
データベースへの送信が終わったら「Receive.php」へ飛びます。
メール機能があればReceive.phpでメールの送信を行う予定です。
「index.php」から「check.php」までは進めるのですが、「送信」を押しても「Receive.php」まで行くことができずに、「check.php」に留まってしまいます。
細かいことを言うと、index.phpから送られてきたセッションは再読み込みをしても残っています。
ソースコードが以下の通りです。
index.php
PHP
1<?php 2 ini_set('display_errors',1); 3 error_reporting(E_ALL & ~E_NOTICE); 4 session_start(); 5 require('../dbConnect.php'); 6 function h($value){ 7 return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 8 } 9 if(!empty($_POST)){ 10 if($_POST['name']==''){ 11 $error['name']='blank'; 12 } 13 if($_POST['mail']==''){ 14 $error['mail']='blank'; 15 } 16 if($_POST['message']==''){ 17 $error['message']='blank'; 18 } 19 if(empty($error)){ 20 $_SESSION['join']=$_POST; 21 header('Location:check.php'); 22 exit(); 23 } 24 } 25 ?> 26<!DOCTYPE html> 27……… 28(省略) 29……… 30 <!-- div.contactForm>div.container>(div.h2wrap>(h2+p))+div.C_FormWrap>(form.C_Form>(label[for=mes]>textarea#mes[name=message])+(label[for=subm]>input#subm[name=submit type=submit value=送信])) --> 31 <section id="form" class="contactForm"> 32 <div class="container"> 33 <div class="h2wrap JQ Q2"> 34 <h2>お問い合わせ</h2> 35 <p>contact</p> 36 </div> 37 <div class="C_FormWrap JQ Q2"> 38 <form action="" class="C_Form clearfix" method="post"> 39 <label for="name"> 40 <input type="text" id="name" name="name" value="<?php echo h($_SESSION['join']['name']) ?>" placeholder="名前"> 41 </label> 42 <?php if(isset($error['name']) && $error['name'] == 'blank'): ?> 43 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*名前を入力してください。</p> 44 <?php endif; ?><!-- .error --> 45 46 <label for="mail"> 47 <input type="text" id="mail" name="mail" value="<?php echo h($_SESSION['join']['mail']) ?>" placeholder="メールアドレス"> 48 </label> 49 <?php if(isset($error['mail']) && $error['mail'] == 'blank'): ?> 50 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*メールアドレスを入力してください。</p> 51 <?php endif; ?><!-- .error --> 52 53 <label for="mes"> 54 <textarea name="message" id="mes" cols="30" rows="7" placeholder="コメントは現在休止中です"><?php echo h($_SESSION['join']['message']) ?></textarea> 55 </label> 56 <?php if(isset($error['message']) && $error['message'] == 'blank'): ?> 57 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*メッセージを入力してください。</p> 58 <?php endif; ?><!-- .error --> 59 60 <label for="retry"><button type="reset" id="retry" name="retry">やり直す</button></label> 61 <label for="subm"><input type="submit" id="subm" name="submit" value="送信"></label> 62 </form> 63 </div> 64 </div> 65 </section> 66……… 67(省略) 68……… 69
check.php
PHP
1<?php 2 ini_set('display_errors',1); 3 error_reporting(E_ALL & ~E_NOTICE); 4 session_start(); 5 // require('dbconnect.php'); 6 if(!isset($_POST)){ 7 header('Location:index.php'); 8 exit(); 9 } 10 // $_SESSION = $_POST; 11 if(!empty($_POST)){ 12 $statement=$db->prepare('INSERT INTO comments SET 13 name = ?, 14 mail = ?, 15 message = ?, 16 created = NOW() 17 '); 18 echo $ret=$statement->execute(array( 19 $_SESSION['join']['name'], 20 $_SESSION['join']['mail'], 21 $_SESSION['join']['message'] 22 )); 23 unset($_SESSION['join']); 24 header('Location:Receive.php'); 25 } 26 27 function h($value){ 28 return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 29 } 30 31 ?> 32<!DOCTYPE html> 33<html lang="ja"> 34<head> 35 <meta charset="UTF-8"> 36 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 37 <link rel="stylesheet" type="text/css" href="../styles/check.css"> 38 <link rel="stylesheet" type="text/css" href="../styles/check@media.css"> 39 <link rel="stylesheet" type="text/css" href="../styles/reset.css"> 40 <link rel="stylesheet" type="text/css" href="../styles/swiper.css"> 41 <link rel="stylesheet" type="text/css" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> 42 <script src="../jQ/jquery-3.3.1.min.js"></script> 43 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 44 <title>花田香ポートフォリオサイト</title> 45</head> 46<body> 47 48 49 50 <!-- div.contactForm>div.container>(div.h2wrap>(h2+p))+div.C_FormWrap>(form.C_Form>(label[for=mes]>textarea#mes[name=message])+(label[for=subm]>input#subm[name=submit type=submit value=送信])) --> 51 <section id="form" class="contactForm clearfix"> 52 <div class="container"> 53 <div class="h2wrap JQ Q2"> 54 <h2>内容確認</h2> 55 <p>Confirmation of contact</p> 56 </div> 57 <div class="C_FormWrap JQ Q2 clearfix"> 58 <form action="" class="C_Form clearfix"> 59 <p class="post">名前:<?php echo h($_SESSION['join']['name']); ?></p> 60 <p class="post">メールアドレス:<?php echo h($_SESSION['join']['mail']); ?></p> 61 <p class="post">コメント:<?php echo h($_SESSION['join']['message']); ?></p> 62 <label for=""><a class="retry" href="index.php">やり直す</a></label> 63 <label for="subm"><input type="submit" id="subm" name="submit" value="送信"></label> 64 </form> 65 </div> 66 </div> 67 </section> 68 69 <!-- div.copyright>div.container>p.copyright --> 70 <section class="copyright clearfix"> 71 72 <div class="container"> 73 <p class="copyright">images: freepik</p> 74 <p class="copyright">©kaoru-hanada 2019</p> 75 </div> 76 </section> 77 78<script src="../jQ/swiper.js"></script> 79<script src="../jQ/kaoruPf+Q.js"></script> 80</body> 81</html> 82
Receive.php
PHP
1……… 2(省略) 3……… 4 <!-- div.contactForm>div.container>(div.h2wrap>(h2+p))+div.C_FormWrap>(form.C_Form>(label[for=mes]>textarea#mes[name=message])+(label[for=subm]>input#subm[name=submit type=submit value=送信])) --> 5 <section id="form" class="contactForm clearfix"> 6 <div class="container"> 7 <div class="h2wrap JQ Q2"> 8 <h2>送信完了</h2> 9 <p>contact compleated</p> 10 </div> 11 <div class="C_FormWrap JQ Q2 clearfix"> 12 <form action="" class="C_Form C_Comp clearfix"> 13 <p>お問い合わせありがとうございました。</p> 14 <a href="index.php" class="quit">戻る</a> 15 </form> 16 </div> 17 </div> 18 </section> 19 20 <!-- div.copyright>div.container>p.copyright --> 21 <section class="copyright clearfix"> 22 <!-- copyrightがスクロールできないため 23 表示されないままになってしまった。 --> 24 <div class="container"> 25 <p class="copyright">images: freepik</p> 26 <p class="copyright">©kaoru-hanada 2019</p> 27 </div> 28 </section> 29 30<script src="../jQ/swiper.js"></script> 31<script src="../jQ/kaoruPf+Q.js"></script> 32</body> 33</html> 34
dbConnect.php
PHP
1<?php 2 3 try{ 4 $db = new PDO('mysql:dbname=HK_PF_commentForm; host=localhost; charset=utf8','root','root'); 5 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, PDO::ERRMODE_WARNING); 6 } catch(PDOException $e) { 7 echo 'DB接続エラー: '.$e->getMessage(); 8 } 9 ?> 10
発生している問題
1.HTML/CSS、PHP側では特にエラーコードもない。
2.phpmyadminを確認してみると「返り値が空でした」と表示される。
試したこと
試したことは、まずheaderのミスの確認です。
調べてみたところ、パスの間違い、コロン前の空白もなく、html前に出力ができているらしく確認を繰り返しても何も変わりませんでした。
「エラーコードが表示できない」ともあったので、PDOの設定に「PDO::ERRMODE_WARNING」を追加しました。それでも特にエラーコードの表示はありませんでした。
次にURLを直接指定して「送信完了画面」まで行けるかどうかの確認です。
その結果「送信画面」までは行けたので、「データが送られていない」ことが原因ではないかと考えています。
補足情報(FW/ツールのバージョンなど)
OS:mac
ブラウザ:chrome(最新のバージョン)
テキストエディタ:atom(ver:1.32.2)
サーバー:MAMP(free)5.2
以下、MAMP内の情報
PHP:7,1.12
mySQL:5.7.23
回答2件
あなたの回答
tips
プレビュー