前回はユーザーが登録したデータだけを出力する処理を実装しました。
今回はユーザー連携の続きでレコードや選択項目の追加や編集、削除のユーザー連携の機能を実装していきます。
↓前回の記事はこちら
収支データをユーザー連携
まずはデータ追加と更新の際です。現在はSQLにuser_idを入れる用意がないので、この部分を修正します。
//冒頭に追加
include_once('./session.php');
//修正部分 21行目付近から
if (isset($_POST['record_create']) && $_POST['record_create'] === '登録') :
$sql = 'INSERT INTO records VALUES(0,?,?,?,?,?,?,?,?,?,?,?,?)'; //「?」追加
$stmt = $db->prepare($sql);
//第1引数の末尾に「i」を、最後の引数に「$user_id」を追加
$stmt->bind_param('ssiiiiiiissi', $date, $title, $amount, $spending_category, $income_category, $type, $payment_method, $credit, $qr, $memo, $input_time, $user_id);
elseif (isset($_POST['record_update']) && $_POST['record_update'] === '更新') :
$id = filter_input(INPUT_POST, 'record_id', FILTER_SANITIZE_SPECIAL_CHARS);
//WHERE部分に「AND user_id=?」を追加
$sql = 'UPDATE records SET date=?, title=?, amount=?, spending_category=?, income_category=?, type=?, payment_method=?, credit=?, qr=?, memo=?, input_time=? WHERE id=? AND user_id = ?';
$stmt = $db->prepare($sql);
////第1引数末尾に「i」を、最後の引数に「$user_id」を追加
$stmt->bind_param('ssiiiiiiissii', $date, $title, $amount, $spending_category, $income_category, $type, $payment_method, $credit, $qr, $memo, $input_time, $id, $user_id);
SQL文やbind_paramの値を修正することでユーザー情報と連携したデータを追加したり編集することができるようになります。
削除プログラムはファイルを選択項目と共有しているので最後に修正します。
選択項目のデータをユーザー連携
続いてカテゴリーや支払い方法など選択項目のデータを連携させます。
修正方法は収支データのときとほぼ同じです。
//冒頭に追加
include_once('./session.php');
//修正部分 13行目付近から
$sql = "INSERT INTO {$table_name} (name, user_id) VALUES(?,?)"; //カラムuser_idとVALUESに「?」追加
$stmt = $db->prepare($sql);
$stmt->bind_param('si', $name, $user_id); //第1引数末尾に「i」を最後の引数に「$user_id」を追加
↑上記は選択項目を追加するときのプログラムを記述したファイルの修正箇所です。
続いてすでに登録してある選択項目を編集するときのプログラムを修正します。
//ファイル冒頭に追加
include_once('./session.php');
//修正箇所 13行目付近
$sql = "UPDATE {$table_name} SET name=? WHERE id=? AND user_id=?"; //WHEREに条件を追加
$stmt = $db->prepare($sql);
$stmt->bind_param('sii', $name, $id, $user_id); //第1引数末尾に「i」を、最後の引数に「$user_id」を追加
以上の修正でデータを登録したり編集したりする際にユーザー情報と連携するようになりました。
削除処理のユーザー連携
最後に削除処理もユーザー連携修正をします。
この処理に関しては、ユーザー連携を行わなくても正常に削除することはできるのですが、不正な操作(デベロッパーツールから値を変更するなど)が行われるとログインユーザー以外のデータを削除することができてしまいます。
この操作を防ぐためにユーザー連携を行います。
//冒頭に追加
include_once('./session.php');
//修正箇所(レコード削除の条件文内)10行目付近から
$sql = 'DELETE FROM records WHERE id = ? AND user_id = ?'; //WHEREに条件追加
$stmt = $db->prepare($sql);
$stmt->bind_param('ii', $id, $user_id); //第1引数の末尾に「i」を、最後の引数に「user_id」を追加
//修正箇所(選択項目削除の条件文内)
$sql = "DELETE FROM {$table_name} WHERE id = ? AND user_id=?"; //WHEREに条件追加
$stmt = $db->prepare($sql);
$stmt->bind_param('ii', $id, $user_id); //第1引数に「i」を、最後の引数に「user_id」を追加
以上でユーザー情報と連携させた削除プログラムに修正できました。
最後に
今回はユーザー機能を追加したことによる、データ登録削除編集のプログラムを修正しました。
次回はアカウントページにユーザー情報を出力し、ユーザー情報を更新できるように実装していきます。
最後までお読みいただきありがとうございました。
スポンサーリンク
コメント