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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

2616閲覧

PHPでデバッグするにはどうしたらよいのでしょうか?

dog57

総合スコア131

PHP

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

1クリップ

投稿2017/12/06 04:46

PHPでログイン機能を作成しています。
ですが、画面が遷移しません。

login_form.php → login_check.php でエラーがなければ login_admin.phpへ エラーがあればlogin_form.php へリダイレクトする流れです。

原因がわからないのでエラーを出したいのですがどのようにデバッグしたらいいですか?

ご教授いただけると嬉しいです。

イメージ説明

login_form.php (画像の画面) htmlは一部抜粋

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6session_start(); 7header("Content-type: text/html; charset=utf-8"); 8 9// クロスサイトリクエストフォージュリ(CSRF)対策 10$_SESSION["token"] = base64_encode(openssl_random_pseudo_bytes(32)); 11$token = $_SESSION["token"]; 12 13// クリックジャッキング対策 14header("X-FRAME-OPTIONS: SAMEORIGIN"); 15 16$errors = ''; 17 18 19 ?> 20 21 22<!DOCTYPE html> 23<html lang="ja"> 24<head> 25 <meta charset="utf-8"> 26 <title>ログインフォーム</title> 27 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 28 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen"> 29 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> 30 31 32</head> 33<body> 34 35 36 37 <!-- パンくずリスト--> 38 <ol class="breadcrumb"> 39 <li><a href="http://192.168.33.15"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>トップ</a></li> 40 <li class="active">ログインフォーム</li> 41 </ol> 42 43 44 <div class="container"> 45 46 <?php if (count($errors) > 0): ?> 47 <?php foreach ((array)$errors as $value): ?> 48 <?php echo "<font color=RED>".$value."</font>"."<br>" ?> 49 <?php endforeach; ?> 50 <?php endif; ?> 51 52 <div id="loginbox" style="margin-top:50px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2"> 53 <div class="panel panel-info" > 54 <div class="panel-heading"> 55 <div class="panel-title">Sign In</div> 56 <div style="float:right; font-size: 80%; position: relative; top:-10px"><a href="#">Forgot password?</a></div> 57 </div> 58 59 <div style="padding-top:30px" class="panel-body" > 60 61 <div style="display:none" id="login-alert" class="alert alert-danger col-sm-12"></div> 62 63 <form id="loginform" class="form-horizontal" role="form" method="post" action="login_check.php"> 64 65 <div style="margin-bottom: 25px" class="input-group"> 66 <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 67 <input id="login-username" type="text" class="form-control" name="username" value="" placeholder="username or email"> 68 </div> 69 70 <div style="margin-bottom: 25px" class="input-group"> 71 <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> 72 <input id="login-password" type="password" class="form-control" name="password" placeholder="password"> 73 </div> 74 75 76 77 <div class="input-group"> 78 <div class="checkbox"> 79 <label> 80 <input id="login-remember" type="checkbox" name="remember" value="1"> Remember me 81 </label> 82 </div> 83 </div> 84 85 86 <div style="margin-top:10px" class="form-group"> 87 <!-- Button --> 88 89 <div class="col-sm-12 controls"> 90 <button name="login" id="btn-login" class="btn btn-success">Login</button> 91 <a id="btn-fblogin" href="#" class="btn btn-primary">Login with Facebook</a> 92 93 </div> 94 </div> 95 96 97 98 99 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 100 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 101 </body> 102 </html>

login_check.php (チェック) html省略

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6session_start(); 7header("Content-type: text/html; charset=utf-8"); 8 9// クロスサイトリクエストフォージュリ(CSRF)対策のトークン判定 10 if ($_POST["token"] != $_SESSION["token"]) { 11 echo "不正アクセスの可能性あり。"; 12 exit(); 13 } 14 15// クリックジャッキング対策 16header("X-FRAME-OPTIONS: SAMEORIGIN"); 17 18// 変数の初期化 19$email = ''; 20 21// セッション変数の定義 22 23// エラーメッセージの配列の初期化 24$errors = array(); 25// セッション変数の初期化 26$_SESSION['errors'] = array(); 27 28// データベース接続 29require_once(__DIR__. '/db.php'); 30 31// 前後にある半角全角スペースを削除する関数 32function spaceTrim($str) { 33 34 // 行頭 35 $str = preg_replace('/^[ ]+/u', '', $str); 36 // 末尾 37 $str = preg_replace('/[ ]+$/u', '', $str); 38 39 return $str; 40} 41 42 43// POST時 44if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == "POST") { 45 46 // ログインボタンが押された場合 47if (isset($_POST["login"])) { 48 // 1. ユーザIDの入力チェック 49 if (empty($_POST["userid"])) { // emptyは値が空のとき 50 $errorMessage = 'ユーザーIDが未入力です。'; 51 } else if (empty($_POST["password"])) { 52 $errorMessage = 'パスワードが未入力です。'; 53 } 54 55 // POSTされたデータを各変数に入れる 56 $username = filter_input(INPUT_POST, 'username'); 57 $password = filter_input(INPUT_POST, 'password'); 58 59 // 前後にある半角全角スペースを削除 60 $username = spaceTrim($username); 61 $password = spaceTrim($password); 62 63 // アカウント入力判定 64 if (empty($_SESSION["username"])) { 65 $errors[] = "usernameもしくは、emailが入力されていません。"; 66 } 67 68 // パスワード入力判定 69 if (empty($_SESSION["password"])) { 70 $errors[] = "パスワードが入力されていません。"; 71 } elseif (preg_match('/^[0-9a-zA-Z]{1,7}$/', $password)) { 72 $errors[] = "パスワードは8文字以上で入力してください。"; 73 } else { 74 $password_hide = str_repeat('*', strlen($password)); 75 } 76} 77 78// エラーがなければ実行する 79if (count($errors) == 0) { 80 try { 81 // 例外処理を投げる(スロー)ようにする 82 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 83 84 // アカウントで検索 85 $statement = $dbh->prepare("SELECT * FROM users WHERE email=(:email)"); 86 $statement->bindValue(":email", $email, PDO::PARAM_STR); 87 $statement->execute(); 88 89 // アカウントが一致 90 if ($row = $statement->fetch()) { 91 $db_password = $row["password"]; 92 93 // パスワードが一致 94 if ($password == $db_password) { 95 96 // セッションハイジャック対策 97 session_regenerate_id(true); 98 99 $_SESSION["username"] = $username; 100 header("Location: login_admin.php"); 101 exit(); 102 } else { 103 $errors[] = "アカウント及びパスワードが一致しません。"; 104 } 105 } else { 106 $errors[] = "アカウント及びパスワードが一致しません。"; 107 } 108 109 if (count($errors) > 0) { 110 $errors = $_SESSION["errors"]; 111 foreach ($errors as $value) { 112 echo $error; 113 } 114 header("Location: login_form.php"); 115 } 116 117 // データベース切断 118 $dbh = null; 119 } catch (PDOException $e) { 120 print("Error:" .$e->getMessage()); 121 die(); 122 } 123} 124 125?>

遷移先 login_admin.php

php

1<?php 2// 開発時にこれを書かないのはNG 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6session_start(); 7header("Content-type: text/html; charset=utf-8"); 8 9$username = ''; 10 11 12// ログイン状態のチェック 13if (!isset($_SESSION["username"])) { 14 header("Location: login_form.php"); 15 exit(); 16} 17 18function h($string) { 19 return htmlspecialchars($string, ENT_QUOTES, "UTF-8"); 20} 21 22 ?> 23 24<!DOCTYPE html> 25<html lang="ja"> 26 <head> 27 <meta charset="utf-8"> 28 <title>ログイン</title> 29 </head> 30 <body> 31 32 <?php echo h($username)."さん、こんにちは!"; ?> 33 34 <a href="logout.php">ログアウトする</a> 35 36 </body> 37</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

そろそろちゃんと体系的に学習したほうが良いですよ。
一機能づつここで質問しても、ひどく学習効率が悪いです。

開発環境の構築はできていると思いますが、以下の点に記述のある入門書を一読されることをオススメします。
・自身の環境で作れる開発環境に対して記述があるモノ
・デバッグ環境の構築まで言及のあるモノ

上記の記述のある本は、ごく初歩的な入門書になると思いますが、現時点の学習が網羅的になっていない感が強いので、まずそこから復習も兼ねて見直してみるのが良いです。

また、入門書を卒業したら、フレームワーク(とかライブラリ)の使用を視野に入れてください。
自前のログイン機能(会員管理機能)は、実用上あまり良いものではありません。

投稿2017/12/06 04:58

編集2017/12/06 05:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問