Skip to content

90nenkai Posts

PHP_13 「掲示板をPHPで作ろう」

どんな掲示板?

ログインすることができ、投稿することができ、検索することができるシンプルな掲示板を作ってみましょう。

実現したい機能

  • ログイン機能
  • ログイン入力画面
  • 一覧を表示する機能
  • 書き込み画面
  • 書き込むする機能
  • ログインしてないと書き込めない機能
  • 検索機能

処理の流れ

ログイン機能

メールアドレスとパスワードでログインするシンプルなログイン機能を作ります。

まず、入力画面から入力したメールアドレスとパスワードを受け取ります。

// メールアドレスの取得
$email = "";
if (isset($_POST["email"])) {
    // もしemailが送られているなら変数の中に入れる
    $email = $_POST["email"];
} else {
    $message = "メールアドレスを入力してください。";
}
// パスワードの取得
$password = "";
if (isset($_POST["password"])) {
    // もしpasswordが送られているなら変数の中に入れる
    $password = $_POST["password"];
} else {
    $message = "パスワードを入力してください。";
}

そして、DBへの接続設定をして、メールアドレスとパスワードの組み合わせが一致するユーザーを探すSQL文を実行します。

// DBの設定をするオブジェクト
$pdo = new PDO(
    "mysql:dbname=bbs;host=db;charaset=utf8;unix_socket=/tmp/mysql.sock",
    "root", // ユーザー名
    "secret" // パスワード
);

// DBから特定の条件(メール, パスワード)
//   でデータがあるか調べる

$sql = "SELECT count(*) FROM user WHERE email=:email AND password=:password";

// WHERE ~ で条件を選択する
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
$flag = $stmt->execute();

実行後、値が存在するならセッションにメールアドレスを保存します。そして、一覧画面に飛ばします。

if ($flag) {
    // emailとpasswordの組み合わせがあってた場合
    // セッションの処理
    // ログイン状態を維持する
    $_SESSION["email"] = $email;

    // 一覧ページに飛ばす処理
    header("Location: ./list.php");
    exit();
} else {
    // emailかpasswordが間違ってた場合
    $message = "メールアドレスかパスワードが間違っています。";
}

セッションにメールアドレスが存在する状態がログイン状態と判断し、メールアドレスでユーザーを識別できます。メールアドレスの保存だけでログイン状態とユーザー識別という2つの意味があるので、セッションに保存する値が最小にできます。

処理の最中に別のページに飛ばす処理はリダイレクトといい、PHPでは下記のように書きます。

header("Location: 飛ばしたい先のURL");

そして、必ずHTMLタグの出力よりも先に書きましょう。エラーが発生します。

exit();

上記を書くと、そこでPHPの処理を抜けれます。リダイレクトした後など書きましょう。