LoginSignup
2
7

More than 3 years have passed since last update.

PHPでの簡易掲示板の作成の際の考え方

Last updated at Posted at 2020-01-16

登録画面(register.php)

  • 入力欄が空の場合
    • 入力値($_POST)をチェックする
    • エラーメッセージ用の連想配列を用意
  • 重複登録を防ぐ(メールアドレス)
    • SELECT文で入力されたメールアドレスでSELECT文発行
    • 値が1件以上あればエラーメッセージを出す
  • 入力の手間を減らす
    • 入力値($_POST)をエスケープして出力
  • 確認画面への遷移
    • エラーメッセージ用の連想配列が空だったら実行する
    • 入力値($_POST)をセッション変数に格納する
    • header関数で確認画面へ遷移する
  • 書き直し
    • URLパラメータで書き直しかどうかを判断
    • セッション変数の値を$_POSTに戻す

確認画面(confirm.php)

  • 直に確認画面へアクセスされた場合
    • セッション変数が空だったら、登録画面へリダイレクト
  • 入力値を出力する
    • セッション変数から入力値を出力する(画像の場合はセッション変数から画像のパス名を出力)

画像のアップロード(register.php)

  • $_POSTは使わず、$_FILESを使う
  • HTML側
    • formタグのenctype属性にmultipart/form-dataを指定
    • inputタグのtype属性にfileを指定
  • 画像以外はアップロードできないようにする
    • ファイル名を取得($_FILE['image']['name'])
    • ファイル名の後ろ3文字(拡張子)を切り取って文字列チェック
  • アップロード
    • ファイル名を取得($_FILE['image']['name'])
    • move_upload_file関数でアップロードされたファイルを新しい位置に移動する
      • move_uploaded_file($_FILES['image']['tmp_name'],'保存先のファイル名含むパス);
    • セッション変数に画像のファイル名を格納する

確認画面(登録処理)(confirm.php)

  • prepareメソッドでSQL文の雛形を用意
  • executeメソッドで実際に格納する値をセッション変数から指定する
    • (パスワードはsha1関数でハッシュ化)
  • INSERT文発行後はセッション変数をunsetメソッドで破棄する
  • 完了画面へ遷移

ログイン機能(login.php)

  • ユーザからの入力値(メールアドレスとパスワード)をSELECT文に埋め込む
  • セッション変数にデータベースからの値(idや氏名など)を格納し、ページ遷移
  • 入力値が空の場合とデータベースとのミスマッチとでエラーメッセージを分ける。

次回からは自動でログインする機能(login.php)

  • セッションはブラウザを閉じた時に情報が消えてしまうのでクッキーを使用する
  • プログラムを書く場所はログインのチェックをしてメンバーの情報がヒットした後に記述する
  • 「次回からは自動でログインする機能」をONにした場合
    • メールアドレスの入力欄には\$_COOKIEか$_POSTのメールアドレスを出力する

メッセージ一覧画面(index.php)

  • 前提としてログインしている状態でないとアクセスできないようにする
    • セッション変数のチェック、セッションが有効期限かどうかをチェック
    • 上記の条件を満たしていない場合はログイン画面へリダイレクト
  • セッションの値から名前を取り出す
  • 投稿したメッセージは投稿者のidとメッセージ本体をDBに格納する
  • DBに格納した後はheader関数で同じページを呼び出す
    • これをしないと$_POSTに値が残ったままとなるため、入力欄が空であってもDBに値が格納されてしまう
  • メッセージ一覧を表示する
    • 必要な情報(名前、画像、メッセージ等)をSQLのSELECT文に組み込む
    • 取ってきた情報をループでHTML出力する

返信機能(index.php?res=メッセージID)

  • 表示するファイルはメッセージ一覧画面と同一で、パラメータが付与される
  • メッセージ一覧画面のURLパラメータに、返信先メッセージのidを付与する
  • 上記のパラメータがセットされていたらそのidをフィルターに、SELECT文を発行し、入力欄にそのメッセージと投稿者を入力欄に出力する
  • hiddenタイプで返信先メッセージid(=URLパラメータと同じもの)を仕込んでおく
  • 返信メッセージを投稿する時に、上記idもINSERT文に組み込む

メッセージ詳細画面(view.php?id=メッセージID)

  • 日付部分に詳細へのリンクを貼る(twitterでも同様)
  • URLパラメータにメッセージのidを付与し、それをSELECT文のフィルターとする
  • データがある場合はデータを出力、データがない場合はそれ用の文言を表示

メッセージの削除機能(delete.php?id=メッセージID)

  • $_SESSIONのidとメッセージ投稿者のidが一致したら削除のリンクを出す
  • 削除するプログラムに書く内容
    • URLパラメータをフィルターにしてDBから取得した投稿者のidとセッションのidが一致していたらDELETE文を発行する
    • DELETE文発行後は一覧画面へ遷移

ページネーション(index.php?page=ページ数)

  • URLパラメータにページ数を付与
  • SELECT文にLIMIT句を追記
  • いくつかの制約を設ける
    • ページ数が指定されていないとき
    • ページ数が1より小さいとき
    • ページ数の上限を超えたとき
  • リンクを貼る
    • 前ページ
      • href属性:現在指定されているパラメータからマイナス1
      • 条件:現在指定されているパラメータが1より大きい場合に出力する
    • 次ページ
      • href属性:現在指定されているパラメータからプラス1
      • 条件:マックスページ数に収まる場合に出力する

ログアウト機能(logout.php)

  • セッション変数を空の配列で上書き
  • session_destroy関数を実行
  • クッキーに保存していたメールアドレスも削除する
  • セッションで使用しているクッキーの値を空にする、有効期限を切る
if (ini_set('session.use_cookies')) {
    $params = session_get_cookie_params();
    setcookie(session_name() . '',time()-3600,$params['path'],$params['domain'],$params['secure'],$params['httponly']);
}
2
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
7