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

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

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

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

2690閲覧

PHP PDOでmysqlの接続した際の継続接続

Yuzuriha

総合スコア13

MySQL

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2018/11/01 14:57

まず簡単なログイン画面をつくりました。そこから違うファイルを開いてMysqlのデータを取得したいのですが、うまくできません。
接続状態を維持すれば…などと思い継続接続できないか探していたのですが、できない状況です。

その方法、または他にいい方法などございますでしょうか?
ご回答お願いいたします…

現状まずFailed to load resource: the server responded with a status of 500 (Internal Server Error)で起動しません…

login.php

php

1<?php 2if(isset($_POST['login_username'])){ 3 if(isset($_POST['login_password'])){ 4 $login_name = $_POST['login_username']; 5 $login_pass = $_POST['login_password']; 6 try{ 7 $pdo = new PDO( 8 'mysql:host=localhost;dbname=testdb;charset=utf8', 9 $login_name, 10 $login_pass 11 ); 12 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 13 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 14 $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); 15 $connect_err = "false"; 16 }catch(PDOException $Exception){ 17 $login_pass = ''; 18 $login_name = ''; 19 $connect_err = "true"; 20 } 21 $errlog_json = json_encode($connect_err , JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); 22 } 23} 24?> 25<!DOCTYPE html> 26<html> 27<head> 28 <title>ログイン</title> 29</head> 30<body> 31 <center><p style="margin:30px;"><font size="7">ログイン</font></p> 32 <form method="post"> 33 <div style="width:500px;height:250px; border: solid 1px;"> 34 <p style="margin:20px;">ユーザーネーム<br><input type="text" name="login_username" size="40"></p><br> 35 <p style="margin:20px;">パスワード<br><input type="password" name="login_password" size="40"></p> 36 </div> 37 <input type="submit" name="login"> 38 </form> 39 </center> 40 <script type="text/javascript"> 41 var phperr_connect = JSON.parse('<?php echo $errlog_json; ?>'); 42 if(phperr_connect == "true"){ 43 alert("正しいユーザーネーム、パスワードを入力してください"); 44 }else{ 45 window.location.href = 'main.php'; 46 } 47 </script> 48 49</body> 50</html>

main.php

php

1<!DOCTYPE html> 2<html> 3<head> 4 <title>メニュー選択</title> 5</head> 6<body> 7 <center><font size="7">艦娘一覧</font></center> 8 <?php 9 $sql = "SELECT * FROM testdb.test"; 10 $stmh = $pdo->prepare($sql); 11 $stmh->execute(); 12 ?> 13 <table><tbody> 14 <tr><th>ID</th><th>商品名</th><th>価格</th></tr> 15 <?php 16 while($row = $stmh->fetch(PDO::FETCH_ASSOC)){ 17 ?> 18 <tr> 19 <th><?=htmlspecialchars($row['id'])?></th> 20 <th><?=htmlspecialchars($row['name'])?></th> 21 <th><?=htmlspecialchars($row['price'])?></th> 22 </tr> 23</tbody></table> 24</body> 25</html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

ログイン画面のIDとPASSがMySQLユーザーアカウントになるのはまずいです。

大体はPHPからMySQLに接続する用のMySQLアカウントを作成し、
ログイン画面のIDとPASSがMySQLのuserテーブルなどに存在するかチェックする動きをさせるべきです。

画面転移で情報保持するにはセッションというのが利用できます
http://php.net/manual/ja/session.examples.basic.php

投稿2018/11/01 15:12

rururu3

総合スコア5545

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

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

Yuzuriha

2018/11/01 15:37

ご回答ありがとうございます。 例えばuser=connect,password=passというアカウントでMySQLに接続して、入力したusername,passwordがmysql.userを参照してあればmain.phpに進む。 という感じですか?(なんか回答してもらったことと同じことを違う言い方で言っている感じになってしまっておりますが、確認で…お願い致します…) 画面推移に関して、ありがとうございます。 実践してみます。
rururu3

2018/11/01 15:42

MySQLのユーザー情報でログインユーザーを判断するべきではないです。 大体はMySQLにuserテーブルを作り、そこにidとpassのレコードを保存します。 ググってでてきた良さそうな参考サイト https://qiita.com/KosukeQiita/items/b56b3004413c999b9858
Yuzuriha

2018/11/01 15:52

ありがとうございます。 終わり次第またご返答させて頂きます。
Yuzuriha

2018/11/02 15:13

ただいま作業終わりまして思うように動きました。 なのでこの回答をベストアンサーとさせていただきます。 この度はありがとうございました。
guest

0

dbに問い合わせる部分を外部ファイルにして 最後にdbオブジェクトが入った変数 $pdoを返すようにしたらいいと思います。それから、この外部ファイル名をfunc_db_connect.phpとでも名付けてみます。

func_db_connect.php

PHP

1<?php 2 3function db_connect(){ 4 $obj = []; //変数のオブジェクト宣言 5 try{ 6 $pdo = new PDO( 7 'mysql:host=localhost;dbname=testdb;charset=utf8', 8 $login_name, 9 $login_pass 10 ); 11 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 12 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 13 $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); 14 $obj = $pdo; 15 }catch(PDOException $Exception){ 16 $login_pass = ''; 17 $login_name = ''; 18        $obj = json_encode($connect_err , JSON_HEX_TAG | JSON_HEX_AMP | 19 JSON_HEX_APOS | JSON_HEX_QUOT); 20 } 21 return $obj; 22} 23

そして、require_once()という関数があるので、これをmain.php読み込み直後に記述して、逐一読み込んだ方がいいです。Sessionを使ってオブジェクトを受け渡しても切れる恐れがありますので。

それから、PHPについてですが、なるべくhtml内でプログラムの演算処理は行わない方がいいですよ。パフォーマンスが低下するので、変数を出力させるだけにしてください。

main.php

PHP

1<?php 2require_once($_SERVER['DOCUMENT_ROOT']."/func_db_connect.php"); 3$pdo = db_connect(); //外部ファイルからdbオブジェクト構築の関数を読み込む 4 5 /*データベース処理*/ 6?> 7<html> 8 /*htmlの構築と処理した変数の吐き出し*/ 9</html>

最後に、肝心のログイン画面ですが、main.phpと同じように作ればいいです。$pdo内にはdbオブジェクトか、エラーメッセージのjsonオブジェクトのいずれかが入っている状態なので、プログラムから判別してください。

投稿2018/11/02 01:58

編集2018/11/02 02:37
FKM

総合スコア3633

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

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

Yuzuriha

2018/11/02 15:11

ご返答ありがとうございます。 一応先の方のやり方で思った通りの動きは致しましたので、そちらを優先させて頂きます。 ご教授いただいた内容はきちんとこの後実践してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問