🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

Webサイト

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1770閲覧

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

kaoru-drosera

総合スコア23

MySQL

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

Webサイト

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2019/10/31 12:01

前提・実現したいこと

「【PHP】コメントフォームで、データの送信ができず、確認画面から完了画面へと飛べない」の続きです。
「コメント欄」、具体的には「コメントを書き、書いたデータをデータベースに保管し、メールで送信できるシステム」を追加しようと考えています。
とはいえ、今は「書いたデータをデータベースに保管する」「サイトとして問題なく作動する」ことが目的なのでメール送信のコードはまだ書いていない状態です。
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でメールの送信を行う予定です。

付け加え忘れていた「method=POST」を加えてから、一度だけ転送が成功しました。問題はそこからです。
「index.php」から「check.php」までは進めるのですが、index.phpから送られてきた値が表示されなくなってしまったのです。
「値自体は受け取れているが、表示されていないだけ」と思い、値の表示がない状態でそこから無理やり送信してみたのですが「Integrity constraint violation: 1048 Column 'name' cannot be null」とあったため「値が受け取れていない」のではないかと考えます。
もちろん、「NULL」としても送れるように設定する意図はありません。

PHP

1Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null in /Applications/MAMP/htdocs/Sin-portfolioSite/index/check.php:21

該当のソースコード

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 ……… 27(省略) 28……… 29 <section id="form" class="contactForm"> 30 <div class="container"> 31 <div class="h2wrap JQ Q2"> 32 <h2>お問い合わせ</h2> 33 <p>contact</p> 34 </div> 35 <div class="C_FormWrap JQ Q2"> 36 <form action="" class="C_Form clearfix" method="post"> 37 <label for="name"> 38 <input type="text" id="name" name="name" value="<?php echo h($_SESSION['join']['name']) ?>" placeholder="名前"> 39 </label> 40 <?php if(isset($error['name']) && $error['name'] == 'blank'): ?> 41 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*名前を入力してください。</p> 42 <?php endif; ?><!-- .error --> 43 44 <label for="mail"> 45 <input type="text" id="mail" name="mail" value="<?php echo h($_SESSION['join']['mail']) ?>" placeholder="メールアドレス"> 46 </label> 47 <?php if(isset($error['mail']) && $error['mail'] == 'blank'): ?> 48 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*メールアドレスを入力してください。</p> 49 <?php endif; ?><!-- .error --> 50 51 <label for="mes"> 52 <textarea name="message" id="mes" cols="30" rows="7" placeholder="コメントは現在休止中です"><?php echo h($_SESSION['join']['message']) ?></textarea> 53 </label> 54 <?php if(isset($error['message']) && $error['message'] == 'blank'): ?> 55 <p class="error" style="color: red; text-align: left; margin-top: 5px;">*メッセージを入力してください。</p> 56 <?php endif; ?><!-- .error --> 57 58 <label for="retry"><button type="reset" id="retry" name="retry">やり直す</button></label> 59 <label for="subm"><input type="submit" id="subm" name="submit" value="送信"></label> 60 </form> 61 </div> 62 </div> 63 </section> 64 65 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 } 25 26 function h($value){ 27 return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 28 } 29 30 ?> 31<!DOCTYPE html> 32<html lang="ja"> 33<head> 34……… 35(省略) 36……… 37</head> 38<body> 39 40 <section id="form" class="contactForm clearfix"> 41 <div class="container"> 42 <div class="h2wrap JQ Q2"> 43 <h2>内容確認</h2> 44 <p>Confirmation of contact</p> 45 </div> 46 <div class="C_FormWrap JQ Q2 clearfix"> 47 <form action="" class="C_Form clearfix" method="post"> 48 <p class="post">名前:<?php echo h($_SESSION['join']['name']); ?></p> 49 <p class="post">メールアドレス:<?php echo h($_SESSION['join']['mail']); ?></p> 50 <p class="post">コメント:<?php echo h($_SESSION['join']['message']); ?></p> 51 <label for=""><a class="retry" href="index.php">やり直す</a></label> 52 <label for="subm"><input type="submit" id="subm" name="submit" value="送信"></label> 53 </form> 54 </div> 55 </div> 56 </section> 57 58 <!-- div.copyright>div.container>p.copyright --> 59 <section class="copyright clearfix"> 60 61 <div class="container"> 62 <p class="copyright">images: freepik</p> 63 <p class="copyright">&copy;kaoru-hanada 2019</p> 64 </div> 65 </section> 66 67<script src="../jQ/swiper.js"></script> 68<script src="../jQ/kaoruPf+Q.js"></script> 69</body> 70</html> 71 72

Receive.php

PHP

1……… 2(省略) 3……… 4<?php 5 ini_set('display_errors',1); 6 error_reporting(E_ALL & ~E_NOTICE); 7 session_start(); 8 require('../dbConnect.php'); 9 if(!$_SESSION){ 10 header('Location: index.php'); 11 } 12……… 13(省略) 14……… 15<!DOCTYPE html> 16<html lang="ja"> 17<head> 18 <meta charset="UTF-8"> 19 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 20 <link rel="stylesheet" type="text/css" href="../styles/check.css"> 21 <link rel="stylesheet" type="text/css" href="../styles/check@media.css"> 22 <link rel="stylesheet" type="text/css" href="../styles/reset.css"> 23 <link rel="stylesheet" type="text/css" href="../styles/swiper.css"> 24 <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"> 25 <script src="../jQ/jquery-3.3.1.min.js"></script> 26 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 27 <title>花田香ポートフォリオサイト</title> 28</head> 29<body> 30 31 32 <!-- 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=送信])) --> 33 <section id="form" class="contactForm clearfix"> 34 <div class="container"> 35 <div class="h2wrap JQ Q2"> 36 <h2>送信完了</h2> 37 <p>contact compleated</p> 38 </div> 39 <div class="C_FormWrap JQ Q2 clearfix"> 40 <form action="" class="C_Form C_Comp clearfix"> 41 <p>お問い合わせありがとうございました。</p> 42 <a href="index.php" class="quit">戻る</a> 43 </form> 44 </div> 45 </div> 46 </section> 47 48 <!-- div.copyright>div.container>p.copyright --> 49 <section class="copyright clearfix"> 50 51 <div class="container"> 52 <p class="copyright">images: freepik</p> 53 <p class="copyright">&copy;kaoru-hanada 2019</p> 54 </div> 55 </section> 56 57<script src="../jQ/swiper.js"></script> 58<script src="../jQ/kaoruPf+Q.js"></script> 59</body> 60</html> 61

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

試したこと

エラーコードを見ても原因がわからなかったため、googleで「post 空になる」と検索してみました。
その結果、swiftと併用したコードの解説ばかりで目的の情報は見つからない状態です。

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

OS:mac
ブラウザ:chrome(最新のバージョン)
テキストエディタ:atom(ver:1.32.2)
サーバー:MAMP(free)5.2
以下、MAMP内の情報
PHP:7,1.12
mySQL:5.7.23

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 12:05

$_SESSION['join']['name']がカラなんじゃないかな、var_dump()などで$_SESSION['join']を点検してみてはいかがでしょうか
kaoru-drosera

2019/10/31 12:06

ご回答ありがとうございます。
kaoru-drosera

2019/10/31 12:21 編集

確認してみました。 やはり、3つの値ともNULLが返ってきていました。 ただし、このコード内の「unset($_SESSION['join'])」の前にvar_dumpを置くと値が返ってきていました。 なので、この問題は「unset($_SESSION['join'])」が関係あると考えています。
m.ts10806

2019/10/31 22:38

タイトルは全く同じなのであれば以前の質問で解決していないのに解決してしまっていることになります。タイトルは要件です。同一質問者で同一要件で複数質問をあげることはないはずです。 今回の要件にあわせたタイトルにしてください
guest

回答1

0

ベストアンサー

【PHP - 【PHP】コメントフォームで、データの送信ができず、確認画面から完了画面へと飛べない|teratail】
https://teratail.com/questions/220462

check.phpにPOSTで送信している箇所、ありますか?

前回の質問にて指摘されている部分を、もう一度確認してみてください。
check.phpにはPOSTでなくheader('Location: check.php');で移動していますよね。

投稿2019/10/31 12:06

kei344

総合スコア69596

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

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

退会済みユーザー

退会済みユーザー

2019/10/31 12:17

さらっとネット検索すると、リダイレクトするとセッション変数がクリアされるって話がありますね。さもありなん。 先にアドバイスを貰っていながら、無視してリダイレクトで実現させようとする意図はなんなんでしょうね。
退会済みユーザー

退会済みユーザー

2019/10/31 12:23

でも、改めて先の質問を読んだけど、回答する方もズバリ書いていないから、伝わってなくても仕方ないのかもしれないと思った。すまんな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問