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

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

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

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

PHP

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

Q&A

1回答

1179閲覧

PHPでMySQLのデータベースに接続しようとしたら、ページが読み込まれなくなった。

dongurikun

総合スコア1

MySQL

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

PHP

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

0グッド

1クリップ

投稿2020/08/07 04:05

前提・実現したいこと

お問い合わせフォームを制作する初学者向けの本で学習中です。
お問い合わせフォームの骨組みを制作した後に、phpMyAdminでcontact_formというデータベースを作成しました。
その後、お問い合わせ完了画面のphpに、データベースに接続するためのコードを記述したのですが、ここで詰まりました。
環境はmacでMAMPを使用しております。

発生している問題・エラーメッセージ

順調に制作できておりましたが、お問い合わせ完了画面のPDO関係のコードを記述したら問題発生。 完了画面ページの1つ前の送信確認画面の「送信ボタン」をクリックすると、 「画面が切り替わらずタブ横のローディングがグルグル回転している状態から動かない」問題が発生しました。 この状態になると、MAMPをSTOP Serverしないと、ローディングが回転している状態が直りません。 (エラーコードは画面遷移しないため、表示されません。)

該当のソースコード

PHP

1//問い合わせ完了画面です。form3.phpとしています。 2<?php 3session_start(); 4 5if(isset( $_POST['token'], $_SESSION['token']) && ( $_POST['token'] === $_SESSION['token'] )){ 6 unset($_SESSION['token']); 7 8 $dsn = 'mysql:dbname=contact_form;host=localhost:8888;charset=utf8'; 9 $user = 'root'; 10 $password = ''; 11 12 $dbh = new PDO($dsn,$user,$password); 13 var_dump($dbh); 14 $dbh = null; 15 16}else{ 17 header('Loccation:http://localhost:8888/php/form1.php'); 18 exit(); 19} 20 21?> 22 23<!doctype html> 24<html> 25 <head> 26 <meta charset="utf8"> 27 <title>完了画面-お問い合わせ</title> 28 </head> 29<body> 30<p>お問い合わせありがとうございます</p> 31</body> 32</html>

php

1//入力確認画面です。form2.phpとしています。 2<?php 3session_start(); 4if(isset($_SESSION['name'])){ 5 $name = $_SESSION['name']; 6 $email =$_SESSION['email']; 7 $subject =$_SESSION['subject']; 8 $body =$_SESSION['body']; 9} 10 11$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48)); 12$token = htmlspecialchars($_SESSION['token'],ENT_QUOTES); 13 14?> 15 16<!doctype html> 17<html> 18 <head> 19 <meta charset="utf8"> 20 <title>確認画面-お問い合わせ</title> 21 </head> 22 23 <body> 24 <form action="form3.php" method="post"> 25 <input type="hidden" name="token" value="<?php echo $token ?>"> 26 <table> 27 <tr> 28 <th>お名前</th> 29 <td> 30 <?php echo $name; ?> 31 </td> 32 </tr> 33 <tr> 34 <th>メールアドレス</th> 35 <td> 36 <?php echo $email; ?> 37 </td> 38 </tr> 39 <tr> 40 <th>お問い合わせの種類</th> 41 <td> 42 <?php echo $subject; ?> 43 </td> 44 </tr> 45 <tr> 46 <th>お問い合わせ内容</th> 47 <td> 48 <?php echo nl2br($body); ?> 49 </td> 50 </tr> 51 <tr> 52 <td> 53 <input type="submit" name="submit" value="送信する"> 54 </td> 55 </tr> 56 </table> 57 </form> 58 <p><a href="form1.php?action=edit">入力画面に戻る</a></p> 59 </body> 60 61</html> 62

エラーメッセージがなく、手がかりがない状態に加え、MySQLという未学習の要素も絡んでるので、現状どうしたらいいか分からずお手上げ状態です。
こうなった時にまずチェックすること。などもご教示頂けましたら嬉しいです。よろしくお願いいたします。

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

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

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

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

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

Yasumichi

2020/08/07 04:35

mysql のポート番号が $dsn = 'mysql:dbname=contact_form;host=localhost:8888;charset=utf8'; 8888 となっているのは、実際の値ですか?
dongurikun

2020/08/07 05:10

はい。 他サイト様の情報から抜粋ですが、 >> MAMPインストール直後の初期設定は、http://localhost:8888/ にアクセスをすることで ドキュメントルート を参照できます。(https://sole-color-blog.com/blog/39/) とのことで、こちらも初期から設定しておりませんので、localhost:8888でテストできております。
Yasumichi

2020/08/07 05:17

mysql のポート番号 8889(?) を指定すべきだと思うのですが、設定と合っていますか?8888 は Apache のポート番号ですよね?
dongurikun

2020/08/07 05:31

本当に失礼しました。mysql のポート番号 8889でした。 実行後以下のようなエラーが表示されましたので、共有させて頂きます。 (この後自分でもエラーを読み解きたいと思います) Fatal error: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) in /Applications/MAMP/htdocs/php/form3.php:11 Stack trace: #0 /Applications/MAMP/htdocs/php/form3.php(11): PDO->__construct('mysql:dbname=co...', 'root', '') #1 {main} thrown in /Applications/MAMP/htdocs/php/form3.php on line 11 ------------ form3.php on line 11は この行です。 $dbh = new PDO($dsn,$user,$password);
Yasumichi

2020/08/07 05:36

上記エラーはポート番号を修正したこととともに質問に追記しておくと良いと思います。 'root'@'localhost' (using password: NO) でのアクセスが拒否されているようですね。 この辺は、mysql の方のユーザーに関する設定を見直した方が良いと思います。
Yasumichi

2020/08/07 05:39

あと、最終的には、mysql にアプリケーション用のユーザーを作成した方が良いと思います。
guest

回答1

0

気になるところは沢山あるのですけど
エラーハンドリングしてください。
エラーおよびエラー処理

あと「Loccation」なんてものはありません。
header()

投稿2020/08/07 04:36

編集2020/08/07 04:37
m.ts10806

総合スコア80875

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

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

dongurikun

2020/08/07 05:08

ありがとうございます。エラーハンドリングについて調べてみます。 あと、テラテイルを閲覧していると、あなた様の回答をよくお見受けしますが、 随分とトゲのある言い方が癖になっているようですね。 一言、スペルミスと書いて頂ければ良いと思いますが(笑)
m.ts10806

2020/08/07 05:11

>随分とトゲのある言い方が癖になっているようですね。 非常に大きなお世話です。必要なことだけを書いています。 それに「スペルミス」と決めつけでは言えません。解釈はなるべくすべきではないと考えています。 本当にそのつもりで書いたのか、間違ったのかは誰にも分かりませんので。 ただ「ない」のは事実なのでそのことだけを伝えています。 まぁ「公式ドキュメント確認すれば分かるじゃん」とは思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問