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

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

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

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

phpMyAdmin

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

PHP

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

Q&A

解決済

2回答

2980閲覧

データベースへアンケート結果を自動保存したい&自動返信メール機能を付けたい。

hayakawatakuma

総合スコア21

MySQL

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

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2018/04/07 13:50

編集2018/04/08 01:05

初歩的な質問で申し訳ございません。
現在初心者向けのPHP参考書にて標題の機能がうまく実装できないため
ご教示いただけますでしょうか?

・「アンケート自動保存機能」についての問題点
上記機能のコードを追加した途端にサンクスページに何も表示されなくなり、
且つデータベースに保存されない。

・「自動返信メール機能」の問題点
メールが来ない。

  • php動作環境

XREAというレンタルサーバーにて動作しています。

  • PHPバージョン

PHP7

  • データベース

mysql5.7.21(GUIはphpMyadminを使用)

  • エラーメッセージ

特に表示されません。(表示のさせ方がわかりません。。。)

  • PC

macOS 10.13.1

HTML

1<!--入力ページ--> 2<form method="post" action="check.php"> 3<p>ニックネームを入力してください。</p> 4 <input name="nickname" type="text" style="width: 100px;"><br> 5<p>アドレスを入力してください。</p> 6 <input name="mail" type="text" style="width: 100px;"><br> 7<p>ご意見を入力してください。</p> 8 <input name="iken" type="text" style="width: 100px;"><br> 9 <input type="submit" value="確認"> 10</form> 11

PHP

1 2//確認ページ 3<?php 4 $nickname=$_POST['nickname']; 5 $mail=$_POST['mail']; 6 $iken=$_POST['iken']; 7 8 $nickname=htmlspecialchars($nickname); 9 $mail=htmlspecialchars($mail); 10 $iken=htmlspecialchars($iken); 11 12 if($nickname==''){ 13 print'ニックネームが入力されておりません。<br>'; 14 }else{ 15 print "ようこそ"; 16 print $nickname; 17 print'様'; 18 print'<br>'; 19 } 20 21 if($mail==''){ 22 print'アドレスが入力されておりません。<br>'; 23 }else{ 24 print "メールアドレス"; 25 print $mail; 26 print'<br>'; 27 } 28 29 if($iken==''){ 30 print'ニックネームが入力されておりません。<br>'; 31 }else{ 32 print '意見「'; 33 print $iken; 34 print'」<br>'; 35 } 36 if($nickname==''||$mail==''||$iken==''){ 37 print'<form>'; 38 print'<input type="button" onclick="history.back()" value="戻る">'; 39 print'</form>'; 40 }else{ 41 print'<form method="post" action="thanks.php">'; 42 print'<input name="nickname" type="hidden" value="'.$nickname.'">'; 43 print'<input name="mail" type="hidden" value="'.$mail.'">'; 44 print'<input name="iken" type="hidden" value="'.$iken.'">'; 45 print'<input type="button" onclick="history.back()" value="戻る">'; 46 print'<input type="submit" value="送信">'; 47 print'</form>'; 48 } 49?>

PHP

1//サンクスページ 2<?php 3//データベース自動保存機能 4 $dsn='mysql:dbname=php;host=localhost'; 5 $user='root'; 6 $password=''; 7 $dbh = new PDO($dsn, $user, $password); 8 $dbh->query('SET NAMES utf8'); 9//ここまで 10 11 $nickname=$_POST['nickname']; 12 $mail=$_POST['mail']; 13 $iken=$_POST['iken']; 14 15 $nickname=htmlspecialchars($nickname); 16 $mail=htmlspecialchars($mail); 17 $iken=htmlspecialchars($iken); 18 19print $nickname; 20print '様<br>'; 21print 'お問い合わせありがとうございました!<br>'; 22print 'いただいたおご意見「'; 23print $iken; 24print '」を<br>'; 25print $mail; 26print 'に送りました'; 27 28// 自動返信メール機能 29$mail_sub='アンケートを受け付けました。'; 30$mail_body=$nickname."様へ\nアンケートご協力ありがとうございました。"; 31$mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8"); 32$mail_head='From:XXX@XXX.co.jp'; 33mb_language('Japanese'); 34mb_internal_encoding("UTF-8"); 35mb_send_mail($email,$mail_sub,$mail_body,$mail_head); 36//ここまで 37 38//データベース自動保存機能 39 $sql='INSERT INTO anketo(nickname,mail,iken)VALUES("'.$nickname.'","'.$mail.'","'.$iken.'")'; 40 $stmt=$dbh->prepare($sql); 41 $stmt->execute(); 42 43 $dbh=null; 44//ここまで 45?> 46

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

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

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

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

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

m.ts10806

2018/04/07 21:46

PHPはどこで動作させているのでしょうか?ローカルPCであれば別途設定などが必要です。PHPのバージョン、DBの種類・バージョン、動作環境を質問本文に追記してください。またエラーが表示されていたら、それも(できれば全文)
hayakawatakuma

2018/04/08 01:06

失礼いたしました。開発環境を追記いたしました。
guest

回答2

0

ベストアンサー

本来、追記依頼に書くべき内容ですが、見にくくなるため回答としています。

まず、エラーが表示されないということだと思うので、各ファイルの冒頭を以下のように追記し、エラーを表示させてください。

php

1<?php 2error_reporting(-1); 3ini_set('display_errors', 'On');

また、DB 接続がうまくいっていないようなので、

php

1$dsn='mysql:dbname=php;host=localhost'; 2 $user='root'; 3 $password=''; 4$dbh = new PDO($dsn, $user, $password); 5$dbh->query('SET NAMES utf8');

を以下のように変更してください。

php

1$dsn='mysql:dbname=php;host=localhost;charset=utf8'; 2$user='root'; 3$password=''; 4try { 5 $dbh = new PDO($dsn, $user, $password, 6 [ 7 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 8 ] 9 ); 10} catch (PDOException $e) { 11 exit($e->getMessage()); 12}

余談
参考にしている書籍の質があまり良くありません。
$dbh->query('SET NAMES utf8');は問題があるので使わないですし、htmlspecialcharsは出力時に使用すべきです。
また、
$sql='INSERT INTO anketo(nickname,mail,iken)VALUES("'.$nickname.'","'.$mail.'","'.$iken.'")';のような記述も、prepareを使うのであれば、適切ではないです。

php の ver7 以降を学習するのであれば、新し目の参考書を入手することをオススメします。

投稿2018/04/08 06:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/04/08 06:21

さらに余談。 phpMyadmin を外部からアクセスできる場所に置くのは大変危険です。やめたほうが良いです。
退会済みユーザー

退会済みユーザー

2018/04/08 06:39

エスパー回答すると、パスワードが間違っています。
Dot

2018/04/08 07:26

>phpMyadmin を外部からアクセスできる場所に置くのは大変危険 ローカルの話ですか? パスワードしておけばOKです?
退会済みユーザー

退会済みユーザー

2018/04/08 07:50

> ローカルの話ですか? ローカルといっているのが、どこを指すのか分かりませんが、私の言っている「外部」というのは、管理者以外がアクセスできる環境以外全般です。 > パスワードしておけばOKです? ダメです。 質問から大きくそれるので細かいことは書きませんが、phpMyAdmin は脆弱性等を突きアクセスされた場合、利用できる権限が大きすぎます。管理者以外がアクセスできる場所においてはイケないものです。 どうしても設置しなければならない場合は、IP アドレスの制限等が必須です。
hayakawatakuma

2018/04/08 07:51

回答ありがとうございます。 読んでいる書籍が2011年のものなので確かに情報は古いですね。。。 いただいた内容にて修正いたしましたが、まだ上手く行きません。 パスワードも追記したのですが、下記エラーメッセージが表示されてしまいます。 SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: YES)
Dot

2018/04/08 07:52

ありがとうございました
退会済みユーザー

退会済みユーザー

2018/04/08 08:13

XREA のマニュアルをざっと見てみましたが、ユーザ名'root'がおかしいようです。 使用しようとするデータベースに紐付いたアカウントを改めて用意して設定してみてください。
hayakawatakuma

2018/04/08 09:19

te2jiさん、astさん 色々とご教示いただき、ありがとうございます。 ユーザー名を設定した結果、無事データベースにアンケート結果が自動保存されるようになりました。 今回は明確なご指摘をいただいたte2jiさんを ベストアンサーとさせていただきます。 自動返信メール機能に関してはもう少し調べてみとうと思います。 ありがとうございました!!
guest

0

サンクスページに何も表示されなくなるのはよくわからないですね
通常はDBへ接続失敗している場合はFatal error
こんなのが表示
PHP のバージョン: 7.1.1
イメージ説明
書き込み正常時
こんなのが表示(メールはやった事無いです)
イメージ説明
サーバのバージョン: 10.1.21-MariaDB
イメージ説明

投稿2018/04/08 04:28

Dot

総合スコア120

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

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

hayakawatakuma

2018/04/08 06:03

データベース接続部分に記載のある下記2つのコードを削除するとサンクスページが表示されます。。 $dbh = new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); 当然データベースには保存されませんが。。。。
Dot

2018/04/08 06:11

なんでしょね・・・ サーバー関連でトラブった事ないのでわからないですね・・・ 私のはWindowsだからですかね・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問