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

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

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

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

PHP

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

MAMP

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

解決済

PHPでログインシステムの作成時に直接ログイン後のファイルにアクセルされた場合の対処法

tsukagon
tsukagon

総合スコア22

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

PHP

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

MAMP

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

1回答

0評価

0クリップ

445閲覧

投稿2022/07/04 03:55

バックエンドの仕組みを理解するためにMAMP環境でログインシステムをお試しで作成しています。
仕様は以下の通りです。
・MySQLにあらかじめユーザーのIDとパスワードを登録しておく。
・ログインフォームにIDとパスワードを入力して、MySQLのデータと一致したらホーム画面に遷移する。
・さらにホーム画面にいくつかメニューがありそれらをクリックすることで詳細ページへと遷移する。
・セッションを使用しておりログイン中のみ各ページ間の移動、閲覧は可能となっており、ログイン済みでないと各ページに直接アクセスしても内容は閲覧出来ない。

質問したいこと:
ログインしていない状態で、ログイン後のページに直接アクセスすると、ログイン画面に誘導するように作成していますがhome.php内のIf文の書き方が悪いのか、画面上に変数$idとはなんぞや、$passwordとはなんぞやというエラーがこのファイルのパスとエラーの行数などがブラウザに表示されてしまいます。21,22行目でログインフォームから送信されたidとpasswordを受け取って変数$idと$passwordに格納していますが、直接このファイルにアクセスした場合は何も送信していないのでこの行が原因でエラーが出てしまいます。閲覧者にこのエラーが見えてしまうのはまずいと感じ8行目の

ini_set('display_errors', 0);

でエラーが表示されないようにしたのですが根本的な解決にはなっていないように思います。そこで一般的にこのようなエラーは画面上に表示させなくするといった(半ば強制的な?)対処法で十分なのか、またはコードの書き方しだいでエラーそのものを取り除けるのかアドバイスをいただきたいです。これ以外の書き方が分かりませんでした。PHPごり押し勉強二日目の初心者ですので突っ込みどころが多いかと思いますがよろしくお願いします。以下はログインフォームから送信されたIDとpasswordを受け取ってMySQLの情報と一致しなければログインをやり直させる、一致したら詳細ページへのリンクを画面に示すようになっているhome.phpです。

<?php session_start(); $mysql = 'mysql:host=localhost:8889;dbname=test_db;charset=utf8'; $user = 'root'; $passwoad = 'root'; ?> <?php ini_set('display_errors', 0); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>home</title> </head> <body> <?php if(empty($_SESSION['userid'])) {?> <?php $id = $_POST['id']; $password = $_POST['password']; ?> <?php if (empty($id) || empty($password)) { echo 'IDとPasswordを入力してください'; ?> <p><a href='login.php'>ログインページに戻る</a></p> <?php } else { // 例外の可能性があればtry内に記述する // 例外が起こった場合はPDOExceptionをthrowする try { $db = new PDO($mysql, $user, $passwoad); $select = "SELECT * FROM test WHERE id = '$id' AND password= '$password'"; $res = $db->query($select); $res->execute(); // 例外が起こった場合にPDOExceptionを変数$eでキャッチする // 受け取ったエラーメッセージをgetMessageで取得しechoで表示する } catch (PDOException $e) { echo '接続エラー: ' . $e->getMessage(); echo '管理者にお問い合わせ下さい'; } if ($res->rowCount() < 1) { echo 'ログイン出来ませんでした'; ?> <p><a href='login.php'>ログインページに戻る</a></p> <?php } else { // SQL操作が正常完了していればどこからでも呼び出せる$_SESSION変数に各情報を入れておく $row = $res->fetch(); $_SESSION['userid'] = $row['id']; $_SESSION['familyname'] = $row['familyname']; $_SESSION['userpassword'] = $row['password']; $_SESSION['firstname'] = $row['firstname']; $_SESSION['birth'] = $row['birth']; $_SESSION['address'] = $row['address']; $_SESSION['phone'] = $row['phone']; echo 'ログイン中です'; ?> <p><a href='logout.php'>Logout</a></p> <p><a href='play.php'>play</a></p> <p><a href='setting.php'>setting</a></p> <p><a href='shop.php'>shop</a></p> <p><a href='userinfo.php'>userinfo</a></p> <?php } } ?> <?php } else { ?> <?php echo 'ログイン中です'; ?> <p><a href='logout.php'>Logout</a></p> <p><a href='play.php'>play</a></p> <p><a href='setting.php'>setting</a></p> <p><a href='shop.php'>shop</a></p> <p><a href='userinfo.php'>userinfo</a></p> <?php } ?> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

PHP

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

MAMP

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