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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

800閲覧

【PHP基礎】サンクスページに SQL でデータベースに追加ができません(; ;*)

yocotan

総合スコア14

phpMyAdmin

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2017/07/20 05:48

編集2017/07/20 09:14

###前提・実現したいこと
『いきなりはじめる PHP』という本で勉強しています。
アンケート自動保存機能を追加する(SQL操作)の章で、期待通りに
1、データベースに接続>SQLで指示>接続を切断し、
2、データベースにデータを追加する
ことができません。

###発生している問題・エラーメッセージ
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in /Applications/MAMP/htdocs/phpkiso/thanks.php:13 Stack trace: #0 /Applications/MAMP/htdocs/phpkiso/thanks.php(13): PDO->__construct('mysql:dbname=ph...', 'root', '') #1 {main} thrown in /Applications/MAMP/htdocs/phpkiso/thanks.php on line 13

php_error.logの表示

/Applications/MAMP/htdocs/phpkiso/thanks.php(13): PDO->__construct('mysql:dbname=ph...', 'root', '') #1 {main} thrown in /Applications/MAMP/htdocs/phpkiso/thanks.php on line 13

###該当のソースコード
● index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <form method="post" action="check.php"> ニックネームを入力してください。<br /> <input type="text" name="nickname" style="width:100px"><br /> メールアドレスを入力してください。<br /> <input type="text" name="email" style="200px"><br /> ご意見を一言でお聞かせください。<br /> <input type="text" name="goiken" style="width: 300px"><br /> <br /> <input type="submit" value="送信"> </form> </body> </html>

● check.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname = $_POST['nickname']; $email = $_POST['email']; $goiken = $_POST['goiken']; $nickname = htmlspecialchars($nickname); $email = htmlspecialchars($email); $goiken = htmlspecialchars($goiken); if($nickname == '') { echo'ニックネームが入力されていません。<br />'; } else{ echo'ようこそ'; echo $nickname; print'様'; print'<br />'; } if($email == '') { echo'メールアドレスが入力されていません。<br />'; } else{ echo'メールアドレス:'; echo $email; echo'<br />'; } if($goiken == '') { echo'ご意見が入力されていません。<br />'; } else{ echo'ご意見:'; echo $goiken; echo'<br />'; } if($nickname==''||$email==''||$goiken==''){ echo'<form method="post" action="thanks.php">'; echo'<input type="button" onclick="history.back()" value="戻る">'; echo'</form>'; } else{ echo'<form method="post" action="thanks.php">'; echo'<input name="nickname" type="hidden" value="'.$nickname.'">'; echo'<input name="email" type="hidden" value="'.$email.'">'; echo'<input name="goiken" type="hidden" value="'.$goiken.'">'; echo'<input type="button" onclick="history.back()" value="戻る">'; echo'<input type="submit" value="OK">'; echo'</form>'; } ?> </body> </html>

● thanks.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $dsn ='mysql:dbname=phpkiso;host=localhost'; $user ='root'; $password =''; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; $nickname = htmlspecialchars($nickname); $email = htmlspecialchars($email); $goiken = htmlspecialchars($goiken); echo $nickname; echo '様'; echo 'ご意見ありがとうございました!<br />'; echo 'いただいたご意見「'; echo $goiken; echo'」<br />'; echo $email; echo 'にメールを送りましたのでご確認ください。'; $mail_sub = 'アンケートを受け付けました。'; $mail_body = $nickname."様へ\nアンケートご協力ありがとうございました。"; $mail_body = html_entity_decode($mail_body,$ENT_QUOTES,"UTF-8"); $mail_head = 'From: xxx@xxx.co.jp'; $mb_send_mail($email,$mail_sub,$mail_body,$mail_head); $sql ='INSERT INTO anketo(nickname,email,goiken) VALUES("'.$nickname.'","'.$email.'","'.$goiken.'")'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; ?> </body> </html>

###試したこと
本には、
1、データベースに接続>SQLで指示>接続を切断し、
2、データベースにデータを追加する
ためのコードとして
PHP上部の

$dsn ='mysql:dbname=phpkiso;host=localhost'; $user ='root'; $password =''; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8');

と下部の

$sql ='INSERT INTO anketo(nickname,email,goiken) VALUES("'.$nickname.'","'.$email.'","'.$goiken.'")'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null;

が、書かれていますが、この2箇所のコードを追加する前は
問題なく動作していましたが、
この2箇所のコードを記述するとエラーが表示され、データベースには何も反映されません。

###補足情報(言語/FW/ツール等のバージョンなど)
● 利用環境: MAC OSX / MAMP
● データベースに以下のテーブルを作成
イメージ説明

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

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

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

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

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

m.ts10806

2017/07/20 06:00

「真っ白になり」はphpがエラーをはいてそこで処理が終わってしまったことをさします。サーバーのエラーログをご確認ください。(現在の情報だけではどのような環境か分からないのでできればどのような環境かご明記ください)
yocotan

2017/07/20 06:07 編集

ありがとうございます! エラー表示を有効にしたところ、画面に以下のエラーが表示されました。 Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in /Applications/MAMP/htdocs/phpkiso/thanks.php:13 Stack trace: #0 /Applications/MAMP/htdocs/phpkiso/thanks.php(13): PDO->__construct('mysql:dbname=ph...', 'root', '') #1 {main} thrown in /Applications/MAMP/htdocs/phpkiso/thanks.php on line 13
yocotan

2017/07/20 06:10 編集

またphp_error.logでも13行目のエラーが表示されましたが、 #0 /Applications/MAMP/htdocs/phpkiso/thanks.php(13): PDO->__construct('mysql:dbname=ph...', 'root', '') #1 {main} thrown in /Applications/MAMP/htdocs/phpkiso/thanks.php on line 13 13行目の $dbh->query('SET NAMES utf8'); の記述自体のミスが自分ではわかりません(;;)
m.ts10806

2017/07/20 06:15

すみません。ここのコメントでは埋もれるのでお手数ですが質問本文に追記お願いします。
yocotan

2017/07/20 09:10

申し訳ありません。本文に追記いたしました。
guest

回答2

0

mysql接続に、rootユーザーは使わないよね。
データベースアクセス用のユーザーを別途作っておきますよふつうは。

レンタルサーバーであれば、
サーバー契約時にmysqlアクセス用ユーザーの情報ももらえるはず。
あるいは、コントロールパネルなどの類で確認できるはず。

投稿2017/07/20 07:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/07/20 08:20

$dbh->query('SET NAMES utf8'); とやってるようなサンプルなので、本自体で「root」を使用している可能性が高いんじゃないですかねぇ。。。 htmlspecialchars で変換後のデータを DB に登録しようとしたりしてるんで、個人的には本が悪い気がします。
guest

0

自己解決

・ html_entity_decodeを削除
・ パスワードを ""(空) → "root"に変更
でサンクス完了画面が表示され、ローカルでもphpmyadminからデータベーステーブルへの追加ができました。

ヒントをくださったみなさま、ありがとうございました。

投稿2017/07/21 00:12

yocotan

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問