###前提・実現したいこと
『いきなりはじめる 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
● データベースに以下のテーブルを作成
回答2件
あなたの回答
tips
プレビュー