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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

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

PHP

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

4270閲覧

掲示板[ログイン認証/SQL]

b1ackc0ffee

総合スコア267

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

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

PHP

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

teratail

teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2015/07/10 01:31

編集2015/07/10 05:23

イメージは2chとかチャットなどの掲示板にしたいのですが、
アカウント認証と、ログイン後の画面遷移でつまづいています。
ログインできず、理由がわかりません。
どこをどう直せばよいでしょうか。
お手数おかけしますが、宜しくお願い致します。

[必要なファイル]
●ログイン画面・・・login.php
●ログイン認証ページ・・・authorization.php
●ログイン後表示するページ・・・frameset.php(上/下段)
●bbs.datへ書き込むための裏で動くプログラムファイル guest_write.php
●BBS入力後、送信した情報を表示するページ・・・guest_read_ASC.php
●css・・・bbs.css
●関数・・・function.php
●BBSの入力情報を保存するファイル・・・bbs.dat
●画面分割・・・frameset.php
frameset.php
→上段 guest_input.php 投稿フォーム
→下段 guest_read_ASC.php 過去の書き込み一覧

[その他必要なもの]
●データベース newbbs
(テーブル)
▼ユーザー情報テーブル・・・account
→→id
→→mailaddress
→→name
→→pwd
![イメージ説明]WIDTH:553

[画面構成]
・ログイン画面 login.php
・ログイン後の表示画面 frameset.php
→上段(名前/本文入力フォーム/送信ボタン) guest_input.php
→→入力された情報をファイルに新しい順に保存する裏プログラム guest_write.php
→下段(過去の書き込み表示) guest_read_ASC.php

[画面遷移]
![イメージ説明]WIDTH:406

[現状]やりたいことと問題点
・ログインフォームにDBに登録されている(ログインできるはずの)値を入れても、画面遷移しない。
・登録されていない、メルアドとpwd入れてもdieにならない。
・authorization.phpの$auth->start();をコメントアウトするとdieが適用されているように思う。

[可能性]
・パスワードハッシュ化してないけど大丈夫?
DBはそのまま数字を入れてるけど、入力フォームのパスワードは送信するとどのようなかたちで送られるの?
・authorization.phpの
'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
辺りが怪しい。
・authorization.phpの
else{ require_once 'frameset.php'; }が怪しい。

[参考]
http://mylearning.jugem.jp/?eid=8

[その他不明点]
・header(hogehoge)って、phpの<head>的なやつ??
・$param=array(
'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs',
'table' => 'account',
'usernamecol' => 'id',
'passwordcol' => 'pwd');
の部分を配列にする意味がわかりません。そのままDB情報だけ配列にするのはだめなの??

login.php

lang

1<?php require_once './Encode.php'; ?> 2<!DOCTYPE html> 3<html> 4<head> 5 <meta charset="utf-8" /> 6 <title>ログイン(newbbs)</title> 7</head> 8<body> 9 <h2>ようこそ【NEW】BBSへ</h2> 10 <h3>ログインしてください</h3> 11 <hr> 12 <form method="POST" action="<?php print(e($_SERVER["PHP_SELF"])); ?>"> 13 <div> 14 <label for="mail">メールアドレス:</label><br> 15 <input type="text" id="mail" size="30" maxlength="30" /> 16 </div> 17 <div> 18 <label for="pass">パスワード:</label><br> 19 <input type="password" id="pass" size="20" maxlength="40" /> 20 </div> 21 <input type="submit" name="submit" value="ログイン" /> 22 </form> 23</body> 24</html>

.htaccess

lang

1# mysql内のnewbbsアプリにだけ認証機能を設定する 2<IfModule mod_php5.c> 3php_value auto_prepend_file "authorization.php" 4</IfModule>

authorization.php

lang

1<!--ログイン認証するためのページ--> 2<?php 3require_once 'Auth/Auth.php'; 4// ↓ログインページを表示させる関数 5function login(){ 6 require_once 'login.php'; 7} 8// ↓認証を実行する 9$param=array( 10 'dsn' => 'mysqli://newbbsuser:newbbspass@localhost/newbbs', 11 'table' => 'account', 12 'usernamecol' => 'mailaddress', 13 'passwordcol' => 'pwd'); 14 // ↓認証済みか判定し、していなければログインページに 15 // 決まった値 => DBに合わせる 16$auth = new Auth('MDB2', $params, 'login'); 17 // new Auth(ドライバー名, 認証に必要なパラメータ, ログイン関数); 18$auth->start(); 19// ↓未認証の場合は処理を終了 20if (!$auth->checkAuth()) { die(); } 21else{ require_once 'frameset.php'; }

frameset.php

lang

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8" /> 5 <link rel="stylesheet" type="text/css" href="bbs.css"> 6</head> 7<frameset rows="15%,*"> 8 <frame src="guest_input.php" name="frame1"> 9 <frame src="guest_read_ASC.php" name="frame2"> 10</frameset> 11</html>

guest_input

lang

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8" /> 5 <title>NEW掲示板</title> 6</head> 7<body> 8 <h3>ようこそNEW掲示板へ</h3> 9 <form method="POST" action="guest_write.php" target="frame2"> 10 <div id="container"> 11 <label for="name">名前:<label> 12 <input type="text" id="name" name="name" size="20" maxlength="30" /> 13 </div> 14 <div id="container"> 15 <label for="body">本文:</label> 16 <input type="text" id="body" name="body" size="70" maxlength="255" /> 17 </div> 18 <input type="submit" value="送信" /> 19</form> 20</body> 21</html> 22

guest_read_ASC.php

lang

1<?php require_once './Encode.php'; ?> 2<!DOCTYPE html> 3<html> 4<head> 5 <meta charset="utf-8" /> 6 <!-- <meta http-equiv="refresh" content="3"> --> 7</head> 8<body> 9 <h3>過去の書き込み情報</h3> 10 <?php 11 $file = @fopen('bbs.dat', 'rb') or die('bbsファイルが開けませんでした'); 12 flock($file, LOCK_SH); 13 print('<dl>'); 14 /* ここから--ファイルを行単位に読み込み-- */ 15 while ($row = fgetcsv($file, 1024, "\t")) { 16 print('<dt>'.e($row[1])); 17 print('('.e($row[0]).')</dt>'); 18 print('<dd>本文:'.e($row[2]).'<hr /><dd>'); 19 } 20 print('<dl>'); 21 flock($file, LOCK_UN); 22 fclose($file); 23 ?> 24<body> 25</html>

guest_write.php

lang

1<?php 2// 一時ファイルに新しいデータを送り、そのファイルに既にあるデータを追記し、bbs.datにリネーム 3$old_file = fopen('bbs.dat', 'rb'); 4$new_file = fopen('bbs.tmp', 'wb'); 5flock($old_file, LOCK_SH); 6flock($new_file, LOCK_EX); 7fputs($new_file, date('Y年 m月 d日 H:i:s')."\t"); 8fputs($new_file, $_POST['name']."\t"); 9fputs($new_file, $_POST['body']."\n"); 10$name = ( isset($_POST['name']) && is_string($_POST['name']) )? $_POST['name'] : '' ; 11$body = ( isset($_POST['body']) && is_string($_POST['body']) )? $_POST['body'] : '' ; 12// fputs→一時(NEW)ファイルの先頭に新しい情報を書き込み 13// 日時<\t>名前<\t>本文<\n>が横並びになった行が一行ずつ改行され書き込まれていく 14while ($row = fgets($old_file)) { 15 fputs($new_file, $row); 16} 17// while→bbs.dat(OLD)の内容をbbs.tmp()に書き込み 古い情報を新しいファイルに追記 18// flock($new_file, LOCK_UN); セキュリティ対策のためコメントアウト 19// flock($old_file, LOCK_UN); 20fclose($new_file); 21fclose($old_file); 22unlink('bbs.dat'); 23rename('bbs.tmp', 'bbs.dat'); 24header('Location: http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/').'/guest_read_ASC.php');

Encode.php

lang

1<?php 2function e($str, $sharset = 'UTF-8'){ 3 return htmlspecialchars($str, ENT_QUOTES, $charset); 4}

※Auth/Auth.phpはライブラリです。

以上です。
最後までお読みいただき有難うございます。
お手数おかけしますが宜しくお願い致します。

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

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

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

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

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

orange0190

2015/07/10 05:08

Auth.phpやEncode.phpは自作ですか?
orange0190

2015/07/10 05:22

すみません。pearのファイルであることを確認しました。
b1ackc0ffee

2015/07/10 05:24

Encode.phpはエスケープ処理のためのもので、ユーザー定義関数用に自作しました。 Auth.phpはインストールしたライブラリです★
guest

回答3

0

ベストアンサー

login.phpのinputタグにname属性が抜けているので、そもそもPHPに値が渡っていません。。。
それぞれのname属性にusernamecolとpasswordcolで指定した値を入れてみてください。

lang

1 <form method="POST" action="<?php print(e($_SERVER["PHP_SELF"])); ?>"> 2 <div> 3 <label for="mail">メールアドレス:</label><br> 4 <!-- ↓nameが抜けている。name="mailaddress"を追加 --> 5 <input type="text" id="mail" size="30" maxlength="30" /> 6 </div> 7 <div> 8 <label for="pass">パスワード:</label><br> 9 <!-- ↓nameが抜けている。name="pwd"を追加 --> 10 <input type="password" id="pass" size="20" maxlength="40" /> 11 </div> 12 <input type="submit" name="submit" value="ログイン" /> 13 </form>

あと一点気になったのが、e関数の引数が$sharset(誤字?)になっています。
htmlspecialcharsの第三引数には未定義の$charsetが渡されているので、NOTICEが発生するかと思います。

lang

1<?php 2function e($str, $sharset = 'UTF-8'){// ←$sharsetになっている 3 return htmlspecialchars($str, ENT_QUOTES, $charset); 4}

投稿2015/07/13 16:35

ShoheiTai

総合スコア897

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

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

b1ackc0ffee

2015/07/14 02:03

おおお~!すごいです★ 下記のサイトにも書いておりました。 http://php-memo.jimdo.com/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/pear/pear-auth-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E8%AA%8D%E8%A8%BC/ 「当然、Webサイトにあわせたデザインでかまわないが、大切なポイントは、ログインとパスワードの<input>タグのところで、nameをそれぞれ、usernameとpassword(またはAuthクラスのコンストラクタのオプションで指定した名称)にすること。」 だそうです。 htmlもphpも超初心者で、nameとvalueの関係、label forとidの関係などきちんと理解していなかったため省略してしましました。 すごく困っていたので、助かりました★有難うございました!
b1ackc0ffee

2015/07/14 02:45

ログアウト機能を追加する場合は、frameset.phpにsessionを書いていけばいいでしょうか? 宜しくお願い致します。
ShoheiTai

2015/07/14 16:34 編集

とりあえずはlogout.phpなどを作って、その中でログアウト処理を書くのがいいと思います。 そしてログイン後の画面に<a href="logout.php">ログアウト</a>といった感じでリンクを貼ってあげれば完成です。 調べてみたところ、ログアウト処理(logout.php)は require_once('Auth/Auth.php'); $auth = new Auth('MDB2'); if($auth->checkAuth()) { $auth->logout(); } といった感じで実装できそうです。 PearのAuthを使ったことがないので足りない箇所などあるかもしれませんが...
b1ackc0ffee

2015/07/14 17:11

回答ありがとうございます⭐️ 使ったことがないのに、すぐにわかってすごいですね。 ログアウトは無事に成功しましたー^^
guest

0

.htaccess でauto_prepend_file ... とかやったことないんで、外してるかもしれませんが、
そもそも authorization.php が呼ばれてるかどうかの確証がありますか?
authorization.php の先頭でなにか出力してみるとか、確かめてみる必要があるんじゃないでしょうか。

投稿2015/07/12 02:05

mthaichi

総合スコア10

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

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

b1ackc0ffee

2015/07/13 04:52 編集

有難うございます。 ログイン認証は、どのやり方が一番スタンダードなのでしょうか。 authorization.php は、URLの部分をframeset.phpにしても、ログインページにいくので呼ばれていると思うのですが、そういう事ではないでしょうか? ログインボタンの後に「認証されていません」とprintされています。
guest

0

すみません。すこし勘違いです。
また、あとで回答します。


ちょっとPEARは分からないですが、auth.phpのソースを見ると、頻繁にログを書いているようですので、確認してみてはいかがでしょうか。

投稿2015/07/10 05:03

編集2015/07/10 05:54
orange0190

総合スコア1698

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

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

b1ackc0ffee

2015/07/10 05:06

お忙しいところすみません、宜しくお願い致します^^
b1ackc0ffee

2015/07/13 01:16

有難うございます。 ログを見ましたが特にエラーは出ていませんでした。
b1ackc0ffee

2015/07/13 10:31

そもそも、DBに接続していないような気がするのですが、 new PDOとか、mysql_connectなどで、接続しないといけないでしょうか? 素人の質問でしたら申し訳ありません。 
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問