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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

496閲覧

XAMPP、PHP、mysqlユーザ登録(一日経ったらログインできない)

Yamada_Taka

総合スコア3

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

1グッド

0クリップ

投稿2024/08/06 01:37

実現したいこと

昨日は、ユーザ名とパスワードでログイン出来ていたのですが、一日経つと出来なくなったので理由を教えて欲しい。xamppとハッシュ化したパスワードを使用しています。

発生している問題・分からないこと

一晩たったらログインできない

エラーメッセージ

error

1SQLSTATE[HY000] [1045] Access denied for user 'phpuser'@'localhost' (using password: YES) 2と出てしまう

該当のソースコード

<?php session_start(); require_once __DIR__ . '/inc/functions.php'; include __DIR__ . '/inc/header.php'; ?> <form method='post' action='login.php' class='loginform'> <p> <label for="username">ユーザ名:</label> <input type='text' name='username'> </p> <p> <label for="password">パスワード:</label> <input type='password' name='password'> </p> <input type='submit' value='送信する'> </form> <?php if(!empty($_SESSION['login'])) { echo "ログイン済です<br>"; echo "<a href=index.php>リストに戻る</a>"; exit; } if((empty($_POST['username'])) || (empty($_POST['password']))) { echo "ユーザ名、パスワードを入力してください。"; exit; } try { $dbh = db_open(); $sql = "SELECT password FROM users WHERE username = :username"; $stmt = $dbh->prepare($sql); $stmt->bindParam(":username", $_POST['username'], PDO::PARAM_STR); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); if(!$result) { echo "ログインに失敗しました。"; exit; } if(password_verify($_POST['password'], $result['password'])){ session_regenerate_id(true); $_SESSION['login'] = true; header("Location: index.php"); }else{ echo 'ログインに失敗しました。(2)'; } } catch (PDOException $e) { echo "エラー!: " . str2html($e->getMessage()); exit; } header("Location: index.php");

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

パスワードはハッシュ化し、Phpmyadminから昨晩は設定しました

補足

特になし

CHERRY👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの内容はPHPからMySQLそのものへのアクセス権限がなくアクセスできないというエラーであり、おそらくdb_open()内で渡してると思われるユーザ名やパスワードが間違っているからだと思います。ハッシュ化がどうこうというのは、このエラー自体には何ら関係ありません。

1日経ったからログインできなくなったというのは第三者からだとこの情報だけでは原因が分かりませんが、なにかしら勘違いされているのではないでしょうか?

投稿2024/08/06 01:51

AbeTakashi

総合スコア4820

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

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

Yamada_Taka

2024/08/06 02:01

こんにちは、ご返事ありがとうございます。 しかし、ユーザ名もパスワードも変更していないのですが、本日Xamppを立ち上げログインしようとしたら、できませんでした。昨日は出来ました。Phpmyadminでuserの権限からパスワードを変更しても、ログインできませんでした。phpmyadminのパスワードはハッシュ化したものを入れました。
AbeTakashi

2024/08/06 02:59 編集

>phpmyadminのパスワードはハッシュ化したものを入れました phpMyAdminの画面にアクセスする際に聞かれるパスワードのことでしょうか? であればパスワードを入力する際にわざわざハッシュ化する必要はありません(MySQLのユーザ名とパスワードをそのまま入れてください)。ハッシュ化が必要なのは、コンテンツ(PHPプログラム)におけるユーザのパスワードになります。1日経った云々は質問文内の情報から読み取れる部分はなくてよく分かりません。おそらく何か根本的なところで勘違いされてると思います。今一度、そのあたりをご確認ください。
Yamada_Taka

2024/08/06 03:40

sample_dbにusersというテーブルがあり、それのユーザー名とパスワードでログインできていたのですができないのです。。。xamppは関係ないですよね?そしてsample_dbの権限もfunctions.phpに記載しており、正しいのです。
AbeTakashi

2024/08/06 03:59

質問文のエラーメッセージはMySQLそのものへのアクセスに関するユーザの権限がないという内容です(db_open関数内で指定してるのだと思いますが、それが間違ってると思います)。データベースのuserテーブル内にあるユーザ名とパスワードとは一切関係ないエラーです。MySQLそのものへのアクセスユーザとPHPとMySQLで構築したコンテンツへのアクセスユーザとは別だということを認識してください。もし、その辺をちゃんと認識されているのであれば、質問文の内容だと第三者には伝わらないと思いますので、その辺を整理して質問されると良いかと思います(質問文は編集ができますので、現状の質問文を追記するなり書き換えるなりしてください)。
Yamada_Taka

2024/08/06 05:03

ご丁寧にありがとうございます。ちょっと復習しなおしてみます。 初歩的で申し訳ないのですが、XAMPPをインストールしコマンドプロンプトでmysql -u rootで、ログインしていますが、その際のパスワード設定などしていませんが、そのアクセスこそがmysqlそのものへのアクセスですよね??すいません
AbeTakashi

2024/08/06 06:07 編集

そうですね、その方法におけるrootはMySQLそのもののユーザ名です。パスワードは設定してないのであれば、それは個人開発レベルであれば問題はないかと思います。質問文内のエラーメッセージはMySQLそのものへのアクセスが弾かれているので、rootとパスワードなしでログインしてみれば良いと思います。それで弾かれるのであれば、root / パスワードなし ではアクセス出来ないということなんでしょう(何かしらの処理でパスワードが設定されたのかもしれません)。この部分ではハッシュ化は一切関係ないというか、むしろ不要な要素です。 ハッシュ化が必要なのは、PHPで作り上げたコンテンツで使用するユーザ名やパスワード情報をデータベース(MySQL)に保存したり照合したりするときです。質問文内のエラーメッセージはこの部分は一切関係ないはずです。
Yamada_Taka

2024/08/06 09:23

ご丁寧にありがとうございます。 実は、xamppを再インストールし直し、データベース、テーブルなどを再度作り直し、 phpファイルなどをアップし直しましたら、 無事にユーザー名とパスワードでログイン・ログアウト出来るようになりました。 ただ、昨夜もここまでは、出来たのですが本日になりログインできなくなったのですが、 MysqlのMARIADBへのログイン、パスワードがあり、それはわかりました。 そして、データベース(ここではsample_dbという名前です)の権限のユーザー名・パスワードがあり、 (functions.php)に記載 また、sample_dbにログイン用のusersというテーブルがあり、それにユーザー名・パスワードがあり、 それでごちゃごちゃになっているのかなと思いました。 そしてphpmyadminとコマンドプロンプトを行き来しているのですが、どうも頭で具体化できていないみたいです。ハッシュ化など特に混乱しました。 一晩経ったらログインできないというのは、 セッションに関するphp、xamppやmysqlの何かのあらかじめ決められた設定時間だったのかとも 思いましたが、そういう設定も無さそうなので、明日もログイン・ログアウトできればいいなと思いました。 ちなみにfunctions.phpです↓ <?php function str2html(string $string) :string { return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } function db_open() :PDO { $user = "sampleuser"; $password = "firstpass"; //P172 で生成したパスワードを入力 $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false, ]; $dbh = new PDO('mysql:host=localhost;dbname=sample_db', $user, $password, $opt); return $dbh; } おそらく、データベースの権限情報とセッション時に必要なテーブルのusersのログイン情報、がどこかで誤ったのかなと思いました、phpmyadminとコマンドプロンプトの行き来の中で。。。 頑張ります。
Yamada_Taka

2024/08/07 01:11

無事ログインできています。 アドバイスありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問