【PHPでwebアプリを作る】投稿の変更と削除機能を作成する

keybord Webエンジニア

【PHPでwebアプリ】ログインユーザーのマイページと新規投稿機能編の記事でマイページからの新規投稿機能を作成しました。

今回はその投稿の変更機能と削除機能を作成してみたいと思います。

変更機能

まずは元の投稿に変更リンクを作成します。urlは例えばupdate.phpへのリンクとし、パラメーターで?post_id=xxxを追加しましょう。

投稿の取得時にpost_idを取っていなかったので以下のように取得部分を書き換えます。

$stmt = $db->prepare("select post_id, post_text, created_at from posts where user_id = ?");

バインド部分も合わせて調整します。

$stmt->bind_result($post_id, $post_text, $created_at);

あとはHTML部分を好きなように出力します。

echo '<div><a href="update.php?post_id=' . $post_id . '">変更</a></div>';

これで変更機能へのリンクが準備出来ました。

変更機能の実装

投稿フォーム自体は新規投稿のものと同様です。違うのは最初にその投稿の中身がデフォルトで入力された状態からの変更ということ。

なのでパラメーターで渡されたpost_idから投稿内容を取得します。

    $stmt = $db->prepare("select post_id, post_text, created_at from posts where user_id = ? and post_id = ?");
    $stmt->bind_param('ss', $_SESSION['user_id'], $_GET['post_id']);
    $stmt->execute();
    $stmt->bind_result($post_id, $post_text, $created_at);
    $stmt->fetch();
<form action="update_exe.php" method="post">
<input type="hidden" name="post_id" value="<?php echo $post_id;?>">
<div>変更</div>
<div><textarea name="post_text" rows="10" cols="50"><?php echo $post_text;?></textarea></div>
<div><input type="submit" value="送信"></div>
</form>

この他の部分はmypage.phpと同じなのでそちらを参考にしてください。あとは変更して送信を押すと受け取り側のupdate_exe.phpに飛びます。

update_exe.phpは例えば以下ような形で。

<?php
    session_start();
    
    define('DB_HOST', 'localhost');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '');
    define('DB_NAME', 'whateat');
    
    $db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    if ($db->connect_error){
        echo '接続失敗';
        exit;
    }
    $db->set_charset('utf8');
    
    $post_text = $_POST['post_text'];
    $post_id = $_POST['post_id'];
    
    if (!$post_text) {
        echo '入力されていません';
        exit;
    }
    
    $stmt = $db->prepare("update posts set post_text = ? where user_id = ? and post_id = ?");
    $stmt->bind_param('sss', $post_text, $_SESSION['user_id'], $post_id);
    $res = $stmt->execute();
    
    if (!$res){
        echo '変更失敗';
        exit;
    }
    
    $stmt->close();
    $db->close();
    
    header('Location: ../whateat/mypage.php');
    exit;
?>

これで変更機能は完成です。

削除機能

続いて削除機能です、変更リンクの横にでも同様な感じで削除リンクを置きましょう。

削除の方はクエリが以下のように変わるだけで他はほぼ同様の流れです。

    $stmt = $db->prepare("delete from posts where user_id = ? and post_id = ?");
    $stmt->bind_param('ss', $_SESSION['user_id'], $_GET['post_id']);
    $res = $stmt->execute();

削除の方は簡単に押せてしまうと誤動作で消してしまう可能性もあるので、javascriptでconfirmを使って確認ダイアログを挟むのも良いと思います。

まとめ

これで大方の機能は実装できました。あとはトップページでは全ユーザーの投稿が並ぶようにして、見た目やデザインを最低限調整すれば何とか形になると思います。

次回はその辺を調整したいと思いますので、よろしくお願い致します。