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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

616閲覧

ユーザーと管理者権限の区別

sorito

総合スコア4

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/02/01 14:55

編集2021/02/01 17:48

前提・実現したいこと

現在研修でログイン機能の実装を行なっています。

ログイン画面でメールアドレスとパスワードを入力してもらい、データベースに登録済みの値と比較し合致していればログインできるという仕組みです。
ログインは問題なくできるようになりましたがアカウント登録時にユーザーもしくは管理者を選択しなければならず、仕様書には権限によってログイン後の画面でヘッダーの一部項目の表示、非表示を行うと記載があります
どのような方法で権限によって表示、非表示を設定できるのでしょうか。

セッションを使うのではないかと思っているのですが的外れでしょうか?
ご教授お願いします。

該当のソースコード

//login.php <?php $errorMessage = ""; if (isset($_POST["login"])) { if (empty($_POST["mail"])) { $errorMessage = 'ユーザーIDが未入力です。'; } else if (empty($_POST["password"])) { $errorMessage = 'パスワードが未入力です。'; } if (!empty($_POST["mail"]) && !empty($_POST["password"])) { $mysqli = new mysqli('localhost', '', ''); if ($mysqli->connect_errno) { print('<p>エラーが発生したためログイン情報を取得できません。</p>' . $mysqli->connect_error); exit(); } $mysqli->select_db(''); $mail = $mysqli->real_escape_string($_POST["mail"]); $query = "SELECT * FROM test WHERE mail = '".$mail."'"; $result = $mysqli->query($query); while ($row = $result->fetch_assoc()) $db_hashed_pwd = $row['password']; } if (password_verify($_POST["password"], $db_hashed_pwd)) { header("Location: top.php"); exit; } else { $errorMessage = "ユーザIDとパスワードを入力してください。もしくは入力に誤りがあります。"; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ログイン画面</title> <link rel="stylesheet" type="text/css" href=""> </head> <body> <header> <ul> <li>プロフィール</li> <li>問い合わせ</li> <li>その他</li> </ul> </header> <form action="" method="post"> <br><h3>ログイン画面</h3> <div class="login"> <p><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></p> <ul> <li> <label>メールアドレス</label> <input type="email" class="text" size="30" name="mail" maxlength="100" placeholder="" pattern="[/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/]"> </li> <br> <li> <label>パスワード</label> <input type="password" class="text" size="30" placeholder="" name="password" maxlength="10" pattern="^[0-9A-Za-z]+$"> </li> </ul> </div> <br> <p><input type="submit" class="submit" name="login" value="ログイン"></p> </form> <footer></footer> </body> </html>
//top.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href=""> </head> <body> <header> <ul> <li>プロフィール</li> <li><a href="">アカウント一覧</a></li> //表示、非表示の切り替えをしたい項目 <li><a href="">アカウント登録</a></li> //表示、非表示の切り替えをしたい項目 <li>問い合わせ</li> <li>その他</li> </ul> </header> <main> </main> <footer> </footer> </body> </html>

補足情報(FW/ツールのバージョンなど)

phpMyAdmin バージョン情報: 4.9.5
サーバの種類: MySQL

テーブル定義と項目
ID       カラム名「id」、データ型「int(100)」、主キー、自動採番
メールアドレス カラム名「mail」、データ型「varchar(255)」
パスワード   カラム名「password」、データ型「varchar(255)」、  
権限      カラム名「authority」、データ型「int(1)」、パラメータが0の場合は「ユーザー」で1の場合は「管理者」とする

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

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

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

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

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

guest

回答1

0

ログイン時にログインユーザの情報まとめてセッションに持っておけばよいのでは。
別にIDだけ持っておけば全部引けるので、アクセス度に取得しても良いですけど。

いずれにしても

セッションを使うのではないかと思っているのですが的外れでしょうか?

そこまでハイコストなことをやるわけではないので、
試してみては?
何をどこまで保持しておけるとか、PHPマニュアルだけで掴める感覚ではないでしょうし。

投稿2021/02/01 21:22

m.ts10806

総合スコア80875

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

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

m.ts10806

2021/02/02 01:34

>現在研修でログイン機能の実装を行なっています。 しかしながら、講師に聞くべき。
sorito

2021/02/02 03:43

回答ありがとうございます! セッションについてもう少し調べてみます。 講師の方にはセッションでも出来ると思うがもう少し調べてみてとのことでした。
m.ts10806

2021/02/02 03:49

調べてみた感 やってみた感 がないと、どこにもっていっても同じ指摘をされます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問