teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

修正

2018/04/12 06:25

投稿

aiueoaiueoaiue
aiueoaiueoaiue

スコア94

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ###実現したいこと
2
- MySQLで作成したユーザでIPアドレスを指定してPDO接続を行いたいのですが、上手く出来ません。ザ名がrootでホト名localhostだと上手くいきした。別途でkuronekoというユーザを作りホスト名を192.168.1.134(仮)と指定したときにデータベースエラーが出ま。どうすれば接続に成功するか分かる方回答お願いします。
2
+ MySQLで作成したユーザでIPアドレスを指定してPDO接続を行いたいのですが、上手く出来ません。以下のソースで新規登録ボタンを押してもエラー。別途でkuronekoというユーザを作りホスト名を192.168.1.134(仮)と指定したときにデータベースエラーが出ました。どうすれば接続に成功するか分かる方回答お願いします。
3
3
  ###ソースコード
4
4
  ```test.php
5
5
  <?php

2

修正

2018/04/12 06:25

投稿

aiueoaiueoaiue
aiueoaiueoaiue

スコア94

title CHANGED
File without changes
body CHANGED
@@ -1,44 +1,89 @@
1
1
  ###実現したいこと
2
- MySQLで作成したユーザでIPアドレスを指定してPDO接続を行いたいのですが、上手く出来ません。ユーザ名がrootでホスト名がlocalhostだと上手くいきました。別途でkuronekoというユーザを作りホスト名を192.168.1.134(仮)と指定したときにエラーが出ます。どうすれば接続に成功するか分かる方回答お願いします。
2
+ MySQLで作成したユーザでIPアドレスを指定してPDO接続を行いたいのですが、上手く出来ません。ユーザ名がrootでホスト名がlocalhostだと上手くいきました。別途でkuronekoというユーザを作りホスト名を192.168.1.134(仮)と指定したときにデータベースエラーが出ます。どうすれば接続に成功するか分かる方回答お願いします。
3
- ###エラー
4
- ```ここに言語を入力
5
- Error:SQLSTATE[HY000] [1045] Access denied for user 'kuroneko'@'192.168.1.134' (using password: YES)
6
- ```
7
3
  ###ソースコード
8
4
  ```test.php
9
- <html>
10
- <head><title>PHP TEST</title></head>
11
- <body>
12
-
13
5
  <?php
6
+ require 'password.php'; // password_hash()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
7
+ // セッション開始
8
+ session_start();
14
9
 
15
- $dsn = 'mysql:dbname=database;host=192.168.1.134';
10
+ $db['host'] = "192.168.1.134"; // DBサーバのURL
16
- $user = 'kuroneko';
11
+ $db['user'] = "kuroneko"; // ユーザー名
17
- $password ='tekitou';
12
+ $db['pass'] = "tekitou"; // ユーザー名のパスワード
13
+ $db['dbname'] = "database"; // データベース名
18
14
 
15
+ // エラーメッセージ、登録完了メッセージの初期化
19
- try{
16
+ $errorMessage = "";
20
- $dbh = new PDO($dsn, $user, $password);
17
+ $signUpMessage = "";
21
18
 
19
+ // ログインボタンが押された場合
20
+ if (isset($_POST["signUp"])) {
21
+ // 1. ユーザIDの入力チェック
22
+ if (empty($_POST["username"])) { // 値が空のとき
23
+ $errorMessage = 'ユーザーIDが未入力です。';
24
+ } else if (empty($_POST["password"])) {
22
- print('接続に成功しました<br>');
25
+ $errorMessage = 'パスワードが未入力です。';
26
+ } else if (empty($_POST["password2"])) {
27
+ $errorMessage = 'パスワードが未入力です。';
28
+ }
23
29
 
30
+ if (!empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && $_POST["password"] === $_POST["password2"]) {
31
+ // 入力したユーザIDとパスワードを格納
24
- $dbh->query('SET NAMES sjis');
32
+ $username = $_POST["username"];
33
+ $password = $_POST["password"];
25
34
 
35
+ // 2. ユーザIDとパスワードが入力されていたら認証する
36
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
37
+
38
+ // 3. エラー処理
39
+ try {
40
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
41
+
42
+ $stmt = $pdo->prepare("INSERT INTO userData(name, password) VALUES (?, ?)");
43
+
44
+ $stmt->execute(array($username, password_hash($password, PASSWORD_DEFAULT))); // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない)
45
+ $userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる
46
+
47
+ $signUpMessage = '登録が完了しました。あなたの登録IDは '. $userid. ' です。パスワードは '. $password. ' です。'; // ログイン時に使用するIDとパスワード
48
+ } catch (PDOException $e) {
49
+ $errorMessage = 'データベースエラー';
50
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
51
+ // echo $e->getMessage();
52
+ }
53
+ } else if($_POST["password"] != $_POST["password2"]) {
26
- $sql = 'select * from shouhin';
54
+ $errorMessage = 'パスワードに誤りがあります。';
27
- foreach ($dbh->query($sql) as $row) {
28
- print($row['id']);
29
- print($row['name'].'<br>');
30
55
  }
31
- }catch (PDOException $e){
32
- print('Error:'.$e->getMessage());
33
- die();
34
56
  }
35
-
36
- $dbh = null;
37
-
38
57
  ?>
39
58
 
40
- </body>
41
- </html>
59
+ <!doctype html>
60
+ <html>
61
+ <head>
62
+ <meta charset="UTF-8">
63
+ <title>新規登録</title>
64
+ </head>
65
+ <body>
66
+ <h1>新規登録画面</h1>
67
+ <form id="loginForm" name="loginForm" action="" method="POST">
68
+ <fieldset>
69
+ <legend>新規登録フォーム</legend>
70
+ <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
71
+ <div><font color="#0000ff"><?php echo htmlspecialchars($signUpMessage, ENT_QUOTES); ?></font></div>
72
+ <label for="username">ユーザー名</label><input type="text" id="username" name="username" placeholder="ユーザー名を入力" value="<?php if (!empty($_POST["username"])) {echo htmlspecialchars($_POST["username"], ENT_QUOTES);} ?>">
73
+ <br>
74
+ <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力">
75
+ <br>
76
+ <label for="password2">パスワード(確認用)</label><input type="password" id="password2" name="password2" value="" placeholder="再度パスワードを入力">
77
+ <br>
78
+ <input type="submit" id="signUp" name="signUp" value="新規登録">
79
+ </fieldset>
80
+ </form>
81
+ <br>
82
+ <form action="Login.php">
83
+ <input type="submit" value="戻る">
84
+ </form>
85
+ </body>
86
+ </html>
42
87
  ```
43
88
  ###kuroneko@192.168.1.134でログインしたときのデータベース一覧
44
89
  ```ここに言語を入力

1

2018/04/12 06:24

投稿

aiueoaiueoaiue
aiueoaiueoaiue

スコア94

title CHANGED
File without changes
body CHANGED
@@ -56,6 +56,6 @@
56
56
 
57
57
  ```
58
58
  ###試したこと
59
- mysql> grant all privileges on xxxdb.* to kataoka@"192.168.1.%"
59
+ mysql> grant all privileges on database.* to kuroneko@"192.168.1.%"
60
60
  -> identified by 'hoge' with grant option ;
61
61
  というコマンドで外部ホストからデータベースにアクセスできるようにしました。これでPDO接続も出きるかと思いきや出来ませんでした。