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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2382閲覧

PHPデータベース接続出来ない

teityann1225

総合スコア158

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/03/08 08:34

###前提・実現したいこと
会員制掲示板の作成
新規登録機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ

SQLSTATE[28000] [1045] Access denied for user 'yokkikki_1'@'localhost' (using password: YES)

###該当のソースコード

PHP

1<?php 2// セッション開始 3session_start(); 4//DB名など 5$db['host'] = "mysql1.webcrow-php.netowl.jp"; // DBサーバのurl 6$db['user'] = "実際は書いてます"; 7$db['pass'] = "実際は書いてます"; 8$db['dbname'] = "yokkikki_users"; 9// エラーメッセージ、登録完了メッセージの初期化 10$errorMessage = ""; 11$signUpMessage = ""; 12 13// ログインボタンが押された場合 14if (isset($_POST["signUp"])) { 15 // 1. ユーザIDの入力チェック 16 if (empty($_POST["username"])) { // 値が空のとき 17 $errorMessage = 'ユーザーIDが未入力です。'; 18 } else if (empty($_POST["password"])) { 19 $errorMessage = 'パスワードが未入力です。'; 20 } else if (empty($_POST["password2"])) { 21 $errorMessage = 'パスワードが未入力です。'; 22 } 23 24 if (!empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && $_POST["password"] === $_POST["password2"]) { 25 // 入力したユーザIDとパスワードを格納 26 $username = $_POST["username"]; 27 $password = $_POST["password"]; 28 29 // 2. ユーザIDとパスワードが入力されていたら認証する 30 $dsn = sprintf('mysql:mysql1.webcrow-php.netowl.jp; dbname=yokkikki_users; charset=utf8', $db['host'], $db['dbname']); 31 32 // 3. エラー処理 33 try { 34 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 35 36 $stmt = $pdo->prepare("INSERT INTO userData(name, password) VALUES (?, ?)"); 37 38 $stmt->execute(array($username, password_hash($password, PASSWORD_DEFAULT))); // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない) 39 $userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる 40 41 $signUpMessage = '登録が完了しました。あなたの登録IDは '. $userid. ' です。パスワードは '. $password. ' です。'; // ログイン時に使用するIDとパスワード 42 } catch (PDOException $e) { 43 $errorMessage = 'データベースエラー'; 44//$e->getMessage() でエラー内容を参照可能(デバック時のみ表示) 45echo $e->getMessage(); 46 } 47 } else if($_POST["password"] != $_POST["password2"]) { 48 $errorMessage = 'パスワードに誤りがあります。'; 49 } 50} 51?> 52 53<!doctype html> 54<html> 55 <head> 56 <meta charset="UTF-8"> 57 <title>新規登録</title> 58 </head> 59 <body> 60 <h1>新規登録画面</h1> 61 <form id="loginForm" name="loginForm" action="" method="POST"> 62 <fieldset> 63 <legend>新規登録フォーム</legend> 64 <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div> 65 <div><font color="#0000ff"><?php echo htmlspecialchars($signUpMessage, ENT_QUOTES); ?></font></div> 66 <label for="username">ユーザー名</label><input type="text" id="username" name="username" placeholder="ユーザー名を入力" value="<?php if (!empty($_POST["username"])) {echo htmlspecialchars($_POST["username"], ENT_QUOTES);} ?>"> 67 <br> 68 <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力"> 69 <br> 70 <label for="password2">パスワード(確認用)</label><input type="password" id="password2" name="password2" value="" placeholder="再度パスワードを入力"> 71 <br> 72 <input type="submit" id="signUp" name="signUp" value="新規登録"> 73 </fieldset> 74 </form> 75 <br> 76 <form action="Login.php"> 77 <input type="submit" value="戻る"> 78 </form> 79 </body> 80</html> 81

###試したこと
パスワード、ユーザー名、データベース名、
サーバーのURL確認

###補足情報(言語/FW/ツール等のバージョンなど)
ログイン画面は、正常に動きます。
同じパスワード、ユーザー名、データベース名サーバーのURL、で動いています。
パスワードは、ハッシュ化していません。

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

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

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

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

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

guest

回答2

0

Before

php

1$dsn = sprintf('mysql:mysql1.webcrow-php.netowl.jp; dbname=yokkikki_users; charset=utf8', $db['host'], $db['dbname']);
After

php

1$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', $db['host'], $db['dbname']);

http://php.net/manual/ja/ref.pdo-mysql.connection.php

投稿2017/03/08 08:44

KiyoshiMotoki

総合スコア4791

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

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

teityann1225

2017/03/08 08:47

ありがとうございます❗やってみます❗
teityann1225

2017/03/08 08:56

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'yokkikki_users.userData' doesn't exist このエラーです。
KiyoshiMotoki

2017/03/08 09:02

> Table 'yokkikki_users.userData' doesn't exist 書いてある通りの意味です。
teityann1225

2017/03/08 09:20

テーブルが違うのですか?
KiyoshiMotoki

2017/03/08 11:28

その予想が正しいか否か、まずはご自分で確かめてみてください。
teityann1225

2017/03/08 12:22

Integrity constraint violation: 1062 Duplicate entry '0' for key 1 なぜでしょう?
KiyoshiMotoki

2017/03/08 13:49

これ以上、このページ上であなたのご質問に回答するつもりはありません。 すでに、当初のご質問の問題 「PHPデータベース接続出来ない」 は、解決済みだからです。 まずはご自分で調べてください。 その上で、どうしても解決できないようであれば、別途、ご質問を立ててください。
guest

0

ベストアンサー

php

1 $dsn = sprintf('mysql:mysql1.webcrow-php.netowl.jp; dbname=yokkikki_users; charset=utf8', 2 $db['host'], $db['dbname']); 3```なんか謎な感じですけど、DSNの書き方が間違えています。 4 5```php 6$dns = 'mysql:host=mysql1.webcrow-php.netowl.jp; dbname=yokkikki_users; charset=utf8'; 7```hostが無いので、localhostにつなぎに行っているのだと思いますよ。

投稿2017/03/08 08:43

shi_ue

総合スコア4437

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

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

teityann1225

2017/03/08 08:46

ベストアンサー間違えました。
shi_ue

2017/03/08 08:48

なんと!それ書かなくていい情報です(笑)
teityann1225

2017/03/08 08:54

invalid data source name 今度はこのエラーです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問