|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PHPとMySQLを使った掲示板の作り |
参考URL |
https://biz.addisteria.com/bbs_creation1/ |
|
|
|
|
【データベースを作る】 |
|
|
|
目次 |
|
|
1. 要件定義を行う |
|
|
1) MySQLにデータベース作成 |
|
|
(1) phpMyAdminにログインする |
|
|
(2) MySQLにデータベースを作る |
|
|
(3) データベースの中にテーブルを作る |
|
|
ア. ユーザー情報用のテーブルを作る |
|
|
ア) データ型とは |
|
|
イ) 基本となるidの設定 |
|
|
2) 投稿情報用のテーブルを作る |
|
|
3. さいごに |
|
|
|
MySQLにデータベースを作る |
|
|
|
データベース名:test |
|
|
|
ユーザー情報用のテーブルを作る |
|
|
|
テーブル【members】を作る |
|
|
6種類の情報をいれたいので、カラム数は6としておきます。 |
|
|
id |
番号 |
|
|
name |
名前 |
|
|
email |
メールアドレス |
|
|
password |
パスワード |
|
|
created |
作成日時 |
|
|
modified |
更新日時 |
|
|
|
テーブル:members作成でコマンドプロンプト〜作る場合のコマンドは以下です。 |
|
|
CREATE TABLE members
(message_id INT AUTO_INCREMENT PRIMARY KEY ,name VARCHAR(30) ,email
VARCHAR(128) ,password varchar(255) not null ,created DATETIME NOT NULL
,modified DATETIME NOT NULL ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
掲示板作成講座、2回目 「PHPとHTMLを使った会員登録フォームの作り方」 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
目次 |
|
|
|
|
|
|
|
|
|
|
|
|
1. HTMLとPHPで会員登録フォームを作る |
|
|
|
|
|
|
|
|
|
|
|
|
1) ポイント@ 接続情報を設定する |
|
|
|
|
|
|
|
|
|
|
|
|
2) ポイントA POSTメソッドを選択する |
|
|
|
|
|
|
|
|
|
|
|
|
3) ポイントB inputタグの中にname属性を割り当てる |
|
|
|
|
|
|
|
|
|
|
|
4) ポイントC inputタグの中にvalue属性をPHPで設定する |
|
|
|
|
|
|
|
|
|
|
|
a HTMLの中でPHPのコードを埋め込む |
|
|
|
|
|
|
|
|
|
|
|
|
b
Value属性の中に$_POSTの値を入れる |
|
|
|
|
|
|
|
|
|
|
|
|
c
htmlspecialcharsでセキュリティ対策をする |
|
|
|
|
|
|
|
|
|
|
|
|
d Notice Undefined index
エラーを回避するためにダブルクエスチョンを入れる |
|
|
|
|
|
|
|
|
|
5 さいごに |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作成するサイトは次のようになります。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
コードは次のとおり。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1つめのコードは次のとおり。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
【test.php】 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★@ポイント★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
session_start(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require('dbconnect.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!empty($_POST) ){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$_SESSION['join']
= $_POST; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
header('Location:
test3.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exit(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<title>会員登録をする</title> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント2★「ユーザーが入力した情報をサーバーに送信する」 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<form
action="test2.php" method="post" enctype="multipart/form-data" class="registrationform"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント3★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント4★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>ニックネーム<input type="text" name="name" style="width:150px" value="<?php echo htmlspecialchars($_POST['name']??"", ENT_QUOTES); ?>"></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>email<input type="text" name="email" style="width:150px" value="<?php echo htmlspecialchars($_POST['email']??"", ENT_QUOTES); ?>"></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>パスワード<input type="password" name="password" style="width:150px" value="<?php echo htmlspecialchars($_POST['password']??"", ENT_QUOTES); ?>"></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>パスワード再入力<span class="red">*</span><input type="password" name="password2" style="width:150px"></p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<input type="submit" value="確認する" class="button"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</form> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MSQの接続情報を設定する |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2つ目のコードはMySQLに接続するための【dbconnect.php】というファイル作成します。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
【dbconnect.php】 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$db = new PDO ('mysql:dbname=データベースの名前;host=127.0.0.1; charset=utf8', 'root', ''); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (PDOException $e) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo 'DB接続エラー' . $e->getMessage(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作成講座B |
|
|
登録したフォームにエラーメッセージを表示させる |
|
|
詳しい内容につきましては以下のURL〜ご覧になれます。 |
|
|
https://biz.addisteria.com/bbs_creation3/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3回目
PHPとHTMLとMySQLを使った、こんな会員登録フォームの作り方 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
目 次 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 PHPで会員登録フォームにエラーチェック機能を追加する |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1) ポイント@
【値が入っていたら】というif条件式を入れる |
|
|
|
|
|
|
|
|
|
|
|
2) ポイントA
【フォームの要素が空っぽだったら】というif条件式を入れる |
|
|
|
|
|
|
|
|
|
3) ポイントB
パスワードは一定の文字数以上で入力してもらう |
|
|
|
|
|
|
|
|
|
|
|
4) ポイントC
確認用のパスワードの値を一致させる |
|
|
|
|
|
|
|
|
|
|
|
5) ポイントD
パスワードは入力中も見えないようにする |
|
|
|
|
|
|
|
|
|
|
|
2 さいごに |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PHPで会員登録フォームにエラーチェック機能を追加する |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
コードは次のとおり。 |
|
|
|
|
|
|
|
|
|
|
|
|
【test2.php】 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
session_start(); |
|
|
|
|
|
|
|
|
|
|
|
|
require('dbconnect.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント1★ |
|
|
|
|
|
|
|
|
|
|
|
|
if (!empty($_POST) ){ |
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント2★ |
|
|
|
|
|
|
|
|
|
|
|
|
if ($_POST['name'] == "" ) { |
|
|
|
|
|
|
|
|
|
|
|
|
$error['name'] = 'blank'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
if ($_POST['email'] == "" ) { |
|
|
|
|
|
|
|
|
|
|
|
|
$error['email'] = 'blank'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
if ($_POST['password'] == "" ) { |
|
|
|
|
|
|
|
|
|
|
|
|
$error['password'] = 'blank'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
if ($_POST['password2'] == "" ) { |
|
|
|
|
|
|
|
|
|
|
|
|
$error['password2'] = 'blank'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント3★ |
|
|
|
|
|
|
|
|
|
|
|
|
if (strlen($_POST['password'] )<
6 ) { |
|
|
|
|
|
|
|
|
|
|
|
|
$error['password'] = 'length'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント4★ |
|
|
|
|
|
|
|
|
|
|
|
|
if (($_POST['password'] != $_POST['password2']) &&
($_POST['password2'] != "")){ |
|
|
|
|
|
|
|
|
|
$error['password2']
= 'difference'; |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
if(empty($error))
{ |
|
|
|
|
|
|
|
|
|
|
|
|
$_SESSION['join']
= $_POST; |
|
|
|
|
|
|
|
|
|
|
|
|
header('Location:
test3.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
exit(); |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html> |
|
|
|
|
|
|
|
|
|
|
|
|
<html lang="ja"> |
|
|
|
|
|
|
|
|
|
|
|
|
<head> |
|
|
|
|
|
|
|
|
|
|
|
|
<title>会員登録をする</title> |
|
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
|
|
|
<form
action="" method="post" enctype="multipart/form-data" class="registrationform"> |
|
|
|
|
|
|
|
|
<p>ニックネーム<input type="text" name="name" style="width:400px" value="<?php echo htmlspecialchars($_POST['name']??"", ENT_QUOTES); ?>"> |
|
|
<?php if (isset($error['name']) && ($error['name'] == "blank")): ?> |
|
|
|
|
|
|
|
|
|
|
|
<p class="error">名前を入力してください"</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
<p>email<input
type="text"
name="email"
style="width:150px" value="<?php echo htmlspecialchars($_POST['email']??"", ENT_QUOTES); ?>"> |
|
|
<?php if (isset($error['email']) && ($error['email'] == "blank")): ?> |
|
|
|
|
|
|
|
|
|
|
|
<p
class="error">emailを入力してください</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
★ポイント5★ |
|
|
|
|
|
|
|
|
|
|
|
|
<p>パスワード<input
type="password"
name="password"
style="width:150px" value="<?php echo htmlspecialchars($_POST['password']??"", ENT_QUOTES); ?>"> |
|
|
<?php if (isset($error['password']) && ($error['password'] == "blank")): ?> |
|
|
|
|
|
|
|
|
|
|
<p
class="password">
パスワードを入力してください</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
<?php if (isset($error['password']) && ($error['password'] == "length")): ?> |
|
|
|
|
|
|
|
|
|
|
<p
class="error">
6文字以上で指定してください</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
<p>パスワード再入力<span class="red">*</span><input
type="password"
name="password2" style="width:150px"> |
|
|
|
|
|
<?php if (isset($error['password2']) && ($error['password2'] == "blank")): ?> |
|
|
|
|
|
|
|
|
|
<p
class="error">
パスワードを入力してください</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
<?php if (isset($error['password2']) && ($error['password2'] == "difference")): ?> |
|
|
|
|
|
|
|
|
|
<p
class="error">
パスワードが上記と違います</p> |
|
|
|
|
|
|
|
|
|
|
|
<?php endif; ?> |
|
|
|
|
|
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
<input type="submit" value="確認する" class="button"> |
|
|
|
|
|
|
|
|
|
|
|
</form> |
|
|
|
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
|
|
|
|
|
|
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作成講座C |
|
|
PHPとMySQLで登録機の付きの確認画面を作る |
|
|
詳しい内容につきましては以下のURL〜ご覧になれます。 |
|
|
https://biz.addisteria.com/bbs_creation5/ |
|
|
|
|
|
|
目次 |
|
|
|
|
|
|
|
|
|
|
|
|
1.
会員登録フォーム投稿後の確認画面を作成する |
|
|
|
|
|
|
|
|
|
|
|
|
1)
ポイント@ セッション情報を設定する |
|
|
|
|
|
|
|
|
|
|
|
|
2)
ポイントA パスワードをセキュアにする |
|
|
|
|
|
|
|
|
|
|
|
|
3)
ポイントB MySQLに入力されたデータを登録する |
|
|
|
|
|
|
|
|
|
|
|
4)
ポイントB 入力された値を表示させる |
|
|
|
|
|
|
|
|
|
|
|
|
5)
ポイントC 前のページに戻れる設定をする |
|
|
|
|
|
|
|
|
|
|
|
|
2.
さいごに |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
会員登録フォーム投稿後の確認画面を作成する |
|
|
【test3.php】 |
|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
session_start(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
require('dbconnect.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント1★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!isset($_SESSION['join'])) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
header ('Location:
test2.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exit(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント2★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$hash
= password_hash($_SESSION['join']['password'], PASSWORD_BCRYPT); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント3★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!empty($_POST)){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$statement = $db->prepare('INSERT INTO members SET name=?,
email=?, password=?, created=NOW()'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$statement->execute(array( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$_SESSION['join']['name'], |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$_SESSION['join']['email'], |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$hash)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unset($_SESSION['join']); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
header('Location: test4.php'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exit(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!DOCTYPE html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<html lang="ja"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<form action="" method="post"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<input
type="hidden" name="action" value="submit"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="label"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント4★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>ニックネーム |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="check"><?php echo (htmlspecialchars($_SESSION['join']['name'],
ENT_QUOTES)); ?></span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</p><br /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>email |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="check"><?php echo (htmlspecialchars($_SESSION['join']['email'], ENT_QUOTES)); ?></span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</p><br /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>パスワード |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="check">[セキュリティのため非表示] </span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</p><br /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ★ポイント5★ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<input
type="button" onclick="location.href='test2.php?action=rewrite'" value="修正する" name="rewrite" class="button02"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<input
type="submit" onclick="location.href='test4php'" value="登録する" name="registration" class="button"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</form> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作成講座D |
|
|
登録した情報を使ってログインする画面の作成 |
|
|
詳しい内容につきましては以下のURL〜ご覧になれます。 |
|
|
https://biz.addisteria.com/bbs_creation5/ |
|
|
|
前回は、会員情報の登録画面を作りました。 |
|
|
今回は、登録した情報を使ってログインする画面を作ります。 |
|
|
|
|
|
|
目次 |
|
|
1. PHPでログイン画面を作る |
|
|
1) ポイント@ MySQLのデータと今回の情報を照らし合わせる |
|
|
2) ポイントA MySQLのデータと今回の情報を照らし合わせる |
|
|
3) ポイントB 無事ログインできなかったときのエラーメッセージ表示 |
|
|
1. htmlでのエラーメッセージ表示設定 |
|
|
2. さいごに |
|
|
|
|
PHPでログイン画面を作る |
|
|
コードは次のとおり。 |
|
|
【test4.php】 |
|
|
<?php |
|
|
|
|
session_start(); |
|
|
|
require('dbconnect.php'); |
|
|
|
|
|
|
|
// ★ポイント1★ |
|
|
|
if(!empty($_POST)) { |
|
|
|
if(($_POST['email'] != '') && ($_POST['password'] !=
'')) { |
|
|
$login
= $db->prepare('SELECT * FROM members WHERE email=?'); |
|
|
$login->execute(array($_POST['email'])); |
|
|
|
$member=$login->fetch(); |
|
|
|
|
|
if(password_verify($_POST['password'],$member['password'])) { |
|
|
$_SESSION['id'] = $member['id']; |
|
|
$_SESSION['time']
=time(); |
|
|
header('Location:
test5.php'); |
|
|
exit(); |
|
|
} else { |
|
|
$error['login']='failed'; |
|
|
} |
|
|
} else { |
|
|
$error['login'] ='blank'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
?> |
|
|
<!DOCTYPE html> |
|
|
<html lang="ja"> |
|
|
<head> |
|
|
</head> |
|
|
<body> |
|
|
|
|
|
<form action='' method="post"> |
|
|
|
|
|
<p>email<input type="text" name="email" style="width:150px" value="<?php echo htmlspecialchars($_POST['email']??"", ENT_QUOTES); ?>"> |
|
|
<?php if (isset($error['login']) && ($error['login'] =='blank')): ?> |
|
|
<p class="error">メールとパスワードを入力してください</p> |
|
|
<?php endif; ?> |
|
|
|
|
|
<?php if( isset($error['login']) && $error['login'] =='failed'): ?> |
|
|
<p class="error">メールかパスワードが間違っています</p> |
|
|
<?php endif; ?> |
|
|
</p><br /> |
|
|
|
|
|
<p>パスワード<input type="password" name="password" style="width:150px" value="<?php echo htmlspecialchars($_POST['password']??"", ENT_QUOTES); ?>"> |
|
|
</p> |
|
|
|
|
|
<div
class="login2"><input type="submit" value="ログインする" class="button"></div> |
|
|
|
|
|
</form> |
|
|
|
|
|
</body> |
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
作成講座E |
|
|
ログイン後の投稿画面作成 |
|
|
詳しい内容につきましては以下のURL〜ご覧になれます。 |
|
|
https://biz.addisteria.com/bbs_creation6/#toc1 |
|
|
|
CSRF対策となるワンタイムトークンの設定方法や、投稿一覧画面作成 |
|
|
|
|
|
|
目次 |
|
|
1.
PHPで投稿画面を作る |
|
|
1)
ポイント@ ログイン状態をチェック |
|
|
2)
ポイントA CSRF対策のトークンを設定する |
|
|
(1)
セッションのトークン発行 |
|
|
(2)
今回送信するときのトークン発行 |
|
|
3). ポイントB MySQLに保存された投稿データ表示 |
|
|
2.
さいごに |
|
|
|
|
|
|
コードは次のとおり。 |
|
|
|
|
【test5.php】 |
|
|
|
<?php |
|
|
session_start(); |
|
|
require('dbconnect.php'); |
|
|
|
|
|
// ★ポイント1★ |
|
|
if (isset($_SESSION['id'])
&& ($_SESSION['time'] + 3600 >
time())) { |
|
|
$_SESSION['time'] = time(); |
|
|
|
|
|
$members=$db->prepare('SELECT
* FROM members WHERE id=?'); |
|
|
$members->execute(array($_SESSION['id'])); |
|
|
$member=$members->fetch(); |
|
|
} else { |
|
|
header('Location: test4.php'); |
|
|
exit(); |
|
|
} |
|
|
|
|
|
// ★ポイント2★ |
|
|
if (!empty($_POST)){ |
|
|
if (isset($_POST['token']) && $_POST['token'] ===
$_SESSION['token']) { |
|
|
$message=$db->prepare('INSERT
INTO posts SET created_by=?, message=?, created=NOW()'); |
|
|
$message->execute(array($member['id'] , $_POST['message'])); |
|
|
header('Location:
test5.php'); |
|
|
exit(); |
|
|
}else { |
|
|
header('Location:
test4.php'); |
|
|
exit(); |
|
|
} |
|
|
} |
|
|
|
|
|
// ★ポイント3★ |
|
|
$posts=$db->query('SELECT
m.name, p.* FROM members m, posts p WHERE m.id=p.created_by ORDER BY
p.created DESC'); |
|
|
|
|
|
|
|
|
$TOKEN_LENGTH = 16; |
|
|
$tokenByte = openssl_random_pseudo_bytes($TOKEN_LENGTH); |
|
|
$token = bin2hex($tokenByte); |
|
|
$_SESSION['token'] = $token; |
|
|
|
|
|
?> |
|
|
|
|
|
<!DOCTYPE html> |
|
|
<html lang="ja"> |
|
|
|
|
|
<body> |
|
|
|
|
|
<form action='' method="post"> |
|
|
<input
type="hidden" name="token" value="<?=$token?>"> |
|
|
<?php if (isset($error['login']) && ($error['login'] =='token')): ?> |
|
|
<p class="error">不正なアクセスです。</p> |
|
|
<?php endif; ?> |
|
|
<div class="edit"> |
|
|
<p><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、ようこそ</p> |
|
|
<textarea
name="message" cols='50' rows='10'><?php echo htmlspecialchars($message??"", ENT_QUOTES); ?></textarea> |
|
|
</div> |
|
|
|
|
|
<input
type="submit" value="投稿する" class="button02"> |
|
|
</form> |
|
|
|
|
|
<?php foreach($posts
as $post):
?> |
|
|
<div class="message"> |
|
|
<?php echo htmlspecialchars($post['message'], ENT_QUOTES); ?> |
|
|
<span
class="name"><?php echo htmlspecialchars($post['name'],
ENT_QUOTES); ?>
| <?php echo htmlspecialchars($post['created'], ENT_QUOTES); ?> | |
|
|
|
|
|
<?php endforeach; ?> |
|
|
</body> |
|
|
</html> |
|
|
|
|
|
|
|
|
|
|
作成講座F |
|
|
前回作成した投稿画面に、削除機能を追加する |
|
|
詳しい内容につきましては以下のURL〜ご覧になれます。 |
|
|
https://biz.addisteria.com/bbs_creation7/ |
|
|
|
目次 |
|
|
1.
PHPで投稿画面にログアウトと削除機能をつける |
|
|
1)
ポイント:削除機能をつける |
|
|
2.
さいごに |
|
|
|
PHPで投稿画面にログアウトと削除機能をつける |
|
|
前回解説したコードに、【ログアウト】と【削除】を加えました。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
コードは次のとおり。 |
|
|
【test5.php】 |
|
|
|
<?php |
|
|
session_start(); |
|
|
require('dbconnect.php'); |
|
|
|
|
|
|
|
|
if (isset($_SESSION['id'])
&& ($_SESSION['time'] + 3600 >
time())) { |
|
|
$_SESSION['time'] = time(); |
|
|
|
|
|
$members=$db->prepare('SELECT
* FROM members WHERE id=?'); |
|
|
$members->execute(array($_SESSION['id'])); |
|
|
$member=$members->fetch(); |
|
|
} else { |
|
|
header('Location: test4.php'); |
|
|
exit(); |
|
|
} |
|
|
|
|
|
|
|
|
if (!empty($_POST)){ |
|
|
if (isset($_POST['token']) && $_POST['token'] ===
$_SESSION['token']) { |
|
|
$message=$db->prepare('INSERT
INTO posts SET created_by=?, message=?, created=NOW()'); |
|
|
$message->execute(array($member['id'] , $_POST['message'])); |
|
|
header('Location:
test5.php'); |
|
|
exit(); |
|
|
}else { |
|
|
header('Location:
test4.php'); |
|
|
exit(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
$posts=$db->query('SELECT
m.name, p.* FROM members m, posts p WHERE m.id=p.created_by ORDER BY
p.created DESC'); |
|
|
|
|
|
|
|
|
$TOKEN_LENGTH = 16; |
|
|
$tokenByte = openssl_random_pseudo_bytes($TOKEN_LENGTH); |
|
|
$token = bin2hex($tokenByte); |
|
|
$_SESSION['token'] = $token; |
|
|
|
|
|
?> |
|
|
|
|
|
<!DOCTYPE html> |
|
|
<html lang="ja"> |
|
|
|
|
|
<body> |
|
|
<!-- ★ログアウト★
--> |
|
|
<header> |
|
|
<div class="head"> |
|
|
<h1>週末プラン投稿画面</h1> |
|
|
<span
class="logout"><a href="test4.php">ログアウト</a></span> |
|
|
|
|
|
</div> |
|
|
</header> |
|
|
|
|
|
<form action='' method="post"> |
|
|
<input
type="hidden" name="token" value="<?=$token?>"> |
|
|
<?php if (isset($error['login']) && ($error['login'] =='token')): ?> |
|
|
<p class="error">不正なアクセスです。</p> |
|
|
<?php endif; ?> |
|
|
<div class="edit"> |
|
|
<p><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、ようこそ</p> |
|
|
<textarea
name="message" cols='50' rows='10'><?php echo htmlspecialchars($message??"", ENT_QUOTES); ?></textarea> |
|
|
</div> |
|
|
|
|
|
<input
type="submit" value="投稿する" class="button02"> |
|
|
</form> |
|
|
|
|
|
<?php foreach($posts
as $post):
?> |
|
|
<div class="message"> |
|
|
<?php echo htmlspecialchars($post['message'], ENT_QUOTES); ?> |
|
|
<span
class="name"><?php echo htmlspecialchars($post['name'],
ENT_QUOTES); ?>
| <?php echo htmlspecialchars($post['created'], ENT_QUOTES); ?> | |
|
|
<!-- ★削除★ --> |
|
|
|
|
|
<?php if($_SESSION['id'] == $post['created_by']): ?> |
|
|
<a href="test6.php?id=<?php echo htmlspecialchars($post['message_id'], ENT_QUOTES); ?>">削除</a>]<?php endif;
?></span></p> |
|
|
<?php endforeach; ?> |
|
|
</body> |
|
|
</html> |
|
|
|
|
ポイント:削除機能をつける |
|
|
削除機能は、投稿内容を表示する【foreach】文の中に入れてあります。 |
|
|
|
|
|
|
<?php
if($_SESSION['id'] == $post['created_by']): ?> |
|
|
<a href="test6.php?id=<?php echo htmlspecialchars($post['message_id'], ENT_QUOTES); ?>">削除</a>]<?php endif;
?></span><p> |
|
|
|
「もしセッションIDが、投稿者のIDと同じであれば」「削除をクリックできる」となっています。 |
|
|
実際に【削除】を押すと、test6.php
に飛びます。 |
|
|
このファイルには、次のように記述しておきます。 |
|
|
【test6.php(削除実行用ファイル)】 |
|
|
|
|
|
<?php |
|
|
require('dbconnect.php'); |
|
|
|
|
|
if(isset($_SESSION['id'])) { |
|
|
$id = $_REQUEST['id']; |
|
|
$messages = $db->prepare('SELECT * FROM posts WHERE
message_id=?'); |
|
|
$messages ->
execute(array($id)); |
|
|
$message = $messages->fetch(); |
|
|
if ($message['created_by'] == $_SESSION['id'])
{ |
|
|
$del = $db->prepare('DELETE FROM posts WHERE
message_id=?'); |
|
|
$del->execute(array($id)); |
|
|
} |
|
|
} |
|
|
header('Location:
test5.php'); |
|
|
exit(); |
|
|
?> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|