PHP+SQLiteでTwitterのようなアプリをつくる(2)の続きです。前回は投稿機能を実装したので、今回は投稿して「いいね」や削除ができる機能を追加します。

投稿にいいねができるようにする

前回定義した関数によって投稿の下には以下のようなHTMLタグが生成されます(一部省略しています)。XXXは記事のIDです。

またJavaScriptで以下のような処理がおこなわれます。

いいねをしようとするとfavorite.phpにリクエストが送られるというわけです。

app.js

favorite.phpにリクエストが送られたときの処理を示します。

favorite.php

FaboriteArticleByUser関数とその関連の関数を示します。

FaboriteArticleByUser関数は第二引数のユーザーIDをもつユーザーが第三引数のIDをもつ投稿に対していいねをしたり取り消す処理をおこないます。

USER_TABLEを調べればそのユーザーがどの投稿にいいねをしているかがカンマ区切りの文字列で取得できます。これを整数型の配列に分解して配列の要素内に第三引数が存在するか調べます。存在しない場合はいいねをしようとしているときであり、すでに存在するときはいいねを取り消そうとしているときです。

いいねの数を1増加または減少させます。この処理はUpdateFaboCount関数でおこないます。またそのユーザーがいいねしている投稿をカンマで連結した文字列も更新します。

functions.php

いいねの数を1増加または減少させる処理を示します。

これで、いいねをしたり取り消すことができるようになりました。

前回、後回しにしていたDoesFaborite関数を示します。この関数はログインしているユーザーがその投稿にたいしていいねをしているのか否かを返します。ログインしていないのであれば、この関数は常にfalseを返します。

投稿を削除できるようにする

削除ボタンをクリックすると /?delete=XXX に遷移して本当に削除をするのか確認する内容が表示されます。

削除ボタンをクリックするとdelete.phpにリクエストが送られます。delete.phpでは以下のような処理がおこなわれます。

delete.php

データベースから投稿を削除する処理を示します。

削除された投稿が別の投稿に対するRTの場合、対象の投稿のRTの数を減らさなければなりません。そこで$rt_targetに該当する投稿のIDがある場合は値を格納しておきます。

また削除された投稿に対するいいねの情報も削除したほうがいいのですが、残っていても問題はおきないので特に処理はおこなわないことにします(本当はしたほうがいいかもしれない)。

functions.php