職業訓練生のためのPHPチュートリアル(4) リクエストPOSTで登録

POSTデータの処理

前回はHTTPリクエストメソッドがGETの場合、一覧表示をする部分を制作しました。
今回はリクエストメソッドがPOSTの場合はデータベースに登録する部分に取り掛かります。

職業訓練生のためのPHPチュートリアル(3) リクエストGETで一覧表示
前回は概要設計について説明しました。 各ファイルの使い方 今回から本格的にコードを書いていきます。 エディターに指定はありませんが、画面はVisualStudioCode(VSCode)を使用しています。 ダウンロードし...

POSTリクエスト時の処理

POSTリクエスト時の処理をコメントで記載してみました。

index.php

if($_SERVER['REQUEST_METHOD']==="POST"){
  //POSTリクエスト時の処理

  //POSTされたデータを取得

  //データのチェック(バリデーション)

  //データベースに登録

  //リダイレクト

}else{

POST送信されたデータを取得

フォームに入力されたデータは連想配列$_POSTに格納されます。
index.php内で取得して変数に格納しなおします。

index.php

//POSTされたデータを取得
  $user_name = htmlspecialchars($_POST['user_name']);
  $user_email = htmlspecialchars($_POST['user_email']);
  $main = htmlspecialchars($_POST['main']);

htmlspecialchars関数は引数内の特殊文字を HTML エンティティに変換してくれます。
フォームなどのユーザー入力からHTMLやJavaScriptを書き込まれるセキュリティリスク(スクリプトインサーション)を防ぐ効果があります。
入力データを受け取る時は必ず適用するようにしましょう。

htmlspecialchars

バリデーション

データベースに登録する前に入力値が空欄であったり、適切な書式になっているかなどチェックが必要です。こういったチェックをバリデーション(Validation)と呼びます。

バリデーション処理は次の記事に譲りますのでここはスキップして登録の項目に進みましょう。

データベースに登録する

index.php

//データベースに登録
  try{
    //DBに登録
    $pdo = new PDO(DSN, DB_USER, DB_PASS);
    $sql = 'INSERT INTO messages(user_name, user_email, main, created_at) values(:user_name, :user_email, :main, now())';
    $stmt = $pdo->prepare($sql);
    $stmt->bindValue(':user_name', $user_name, PDO::PARAM_STR);
    $stmt->bindValue(':user_email', $user_email, PDO::PARAM_STR);
    $stmt->bindValue(':main', $main, PDO::PARAM_STR);
    $stmt->execute();
  }catch(PDOEXception $e){
    print("DBに接続できませんでした。");
    die();
  }

リダイレクトする

登録が終了したら、自分自身にリダイレクトをします。

POSTのまま表示するのはユーザーが再読み込み操作などをして要らぬ誤動作を生む原因になりますのでユーザーへのビューはGETで返す方が良いでしょう。

リダイレクトすることによりGETでアクセスしますので再度データベースにアクセスして一覧を取得し表示します。

index.php

//リダイレクト
 header('Location:'.$_SERVER['SCRIPT_NAME']);
 exit();

投稿テスト

これで投稿が可能な状態まで来ました。
テストをしてみましょう。

投稿テスト

データを入力して投稿ボタンをクリックします。
値のチェックをかけていないので正しく入力してください。

テスト結果

データが先頭に追加されていればOKです。

次の記事ではバリデーションとエラー表示について説明します。

職業訓練生のためのPHPチュートリアル(5) valitronでバリデーションを行う
前回の記事で投稿、閲覧ができるようになりました。 今回は投稿内容のチェック(バリデーション)とエラーの表示を作成します。 バリデーションとは? Webアプリケーションではユーザーからの入力を受け付ける場面が多くあります。閲...
タイトルとURLをコピーしました