6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【第四回】コロナ禍だから何かできることをー 自宅療養者連絡ツール ー

Last updated at Posted at 2021-10-03

#前回までのあらすじ
【第三回】コロナ禍だから何かできることを

####実装イメージ図
LINEを利用して保健所の担当者の負担を軽減するとともに、自宅療養者はいつでもつながっている安心感を持たせるためのツールイメージです。
メイン.00_00_51_12.Still002.jpg

##取得したデータをもとに、データベースへの更新までの流れを考えよう
システム構成.jpg

今回は、体温や体調の報告の場合はユーザー状態をDBへ保存する処理を説明します。
データベースはMYSQLを使用します。
エラー時の時は、エラーだったことを返す処理の方が親切なんですが、ひとまず終了としときます。

###データベースへの接続方法

// 宣言
define("DATABASE_URL", 'mysql:host=アドレス;dbname=データベース名;charset=utf8');
define("DATABASE_USER", '接続ユーザー名');
define("DATABASE_PASS", '接続パスワード');

try{
    // 接続処理
    $dbh = new PDO(DATABASE_URL, DATABASE_USER, DATABASE_PASS);
    // 静的プレースホルダを指定
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    // エラー発生時に例外を投げる
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $ex){
    exit;
}

###ユーザー情報の取得方法

//LINE IDを利用して、ユーザーが存在するかチェックを行う
try{
    $SQL =
    <<<EOM
        SELECT
            USER_ID,
            USER_NAME
        FROM
            LINE_USER
        WHERE
            LINE_ID		= :line_id
    EOM;
    $stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->bindParam('line_id', $line_id, PDO::PARAM_STR);
    $stmt->execute();
}catch(PDOException $ex){
    exit;
}

//ユーザーIDとユーザー名を取得しておく。
if($stmt->rowCount()>=0){
    $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
    $user_id = $row[0];
    $user_name = $row[1];
}

###データの登録方法
LINE_ACCESSのテーブルはLINEでアクションがあったときの履歴保存用(いつ、だれが、どんなメッセージを送ってきたか)
LINE_USERは登録ユーザーの情報(ユーザーIDとLINE IDとユーザー名と最後にアクションがあった日時)

    //トランザクション処理を開始
    $dbh->beginTransaction();
    try {
        $SQL =
        <<<EOM
            INSERT INTO LINE_ACCESS(
                USER_ID,
                ACCESS_DATE,
                MESSAGE
            )VALUES(
                :user_id,
                NOW(),
                :message
            )
        EOM;
        $stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
        $stmt->bindParam(':user_id', $user_id, PDO::PARAM_STR);
        $stmt->bindParam(':message', $message_text, PDO::PARAM_STR);
        $stmt->execute();

        $SQL =
        <<<EOM
            UPDATE LINE_USER
            SET
                LAST_ACCESS = NOW()
            WHERE
                USER_ID     = :user_id
        EOM;
        $stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
        $stmt->bindParam(':user_id', $user_id, PDO::PARAM_STR);
        $stmt->execute();

        //コミット
        $dbh->commit();
    }catch(Exception $ex){
        //ロールバック
        $dbh->rollback();
    }

これを見て2点、気づいたかたもいるかもしれません。
#####1.LINE IDをユーザーIDになんでしてないの?LINE IDだけでいいんじゃないの?
LINEを利用していない自宅療養者もいるため、敢えて別ユーザーIDを作成しています。

#####2.ユーザー登録はどうやるねん!
ということで、次回はユーザー登録の実装(LIFF)について説明します。

#コロナ禍だから何かできることをー 自宅療養者連絡ツール ー
【第一回】実装イメージ図と動画
【第二回】LINEからデータを取得して返すまでの流れ
【第三回】LINEからデータベースまでの流れ
->>【第四回】データベースへの更新までの流れ
【第五回】ユーザー登録の仕組み-LINEbotの設定部分
【第六回】ユーザー登録の仕組みLIFFで表示する画面の開発
【第七回】データベースの構造
【第八回】WEB画面上でできる機能
【第九回】まとめ

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?