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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

2903閲覧

【PHP】コメントフォームで、データの送信ができず、確認画面から完了画面へと飛べない

kaoru-drosera

総合スコア23

phpMyAdmin

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2019/10/31 05:12

編集2019/10/31 10:58

###質問内容
ポートフォリオサイトにコメント機能とメール送信機能をつけようとしていたところ問題が発生しました。
コメントフォームの確認画面から転送完了画面へと飛べず、データベースの登録もできない状態です。

前提・実現したいこと

「コメント欄」、具体的には「コメントを書き、書いたデータをデータベースに保管し、メールで送信できるシステム」を追加しようと考えています。
とはいえ、今は「書いたデータをデータベースに保管する」「サイトとして問題なく作動する」ことが目的なのでメール送信のコードはまだ書いていない状態です。
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">&copy;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">&copy;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

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

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

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

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

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

guest

回答2

0

ベストアンサー

check.php

php

1 if(!isset($_POST)){ 2 header('Location:index.php'); 3 exit(); 4 }

というか、こんな箇所あるけど、check.phpにPOSTで送信している箇所、ありますか?

投稿2019/10/31 05:44

yoorwm

総合スコア1305

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

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

kaoru-drosera

2019/10/31 08:18

確認しました。 method="post"忘れていました…
kaoru-drosera

2019/10/31 08:18

ご回答、ありがとうございます!
guest

0

直接関係ないとは思いますが基本なので。

header()

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。

現在のコードにheader()の前にechoがあります。echoに限らずどのような出力もあってはいけません。

投稿2019/10/31 05:29

m.ts10806

総合スコア80850

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

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

kaoru-drosera

2019/10/31 08:03

ご回答ありがとうございます。 修正してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問