編集・削除機能をつくる

安藤(プログラマー)
演劇もやっていまする。

だいぶ更新が止まってしまいました。
どうも、安藤です。

掲示板に編集・削除機能を組み込んだので、それについて載せますー。
今まで使ってきたindex.phpは表示のみの機能にして、投稿・編集・削除機能はposting.phpに処理を分けることにしました!

posting.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
・・・
//処理先データの初期化
$target_data = array();

//処理メッセージの初期化
$success_msg = array();
$error_msgs = array();

//処理先データのidを取得
$id = isset($_POST['id'])? $_POST['id']: null;
//idに該当するレコードを取得
$statement = $com->prepare("SELECT * FROM 'posting' WHERE id = :id");
$statement->bindValue(':id',$id,PDO::PARAM_STR);
$statement->execute();
$target_data = $statement->fetch(PDO::FETCH_OBJ);

//編集・削除用パスワード
if($target_data) $target_pass = $target_data->password;

・・・
//ここに投稿機能
・・・

//編集機能
elseif(isset($_POST['edit']) === true)
{
    //入力内容
    $name = $_POST['name'];
    $comment = $_POST['comment'];
    $mail_address = $_POST['mail_address'];
    $password = $_POST['password'];

    ・・・
    //ここでバリデーション処理
    ・・・

    //パスが正しければ更新処理
    if($password === $target_pass)
    {
        $statement = $com->prepare("UPDATE 'posting' SET name=:name,comment=:comment,mail_address=:mail_address WHERE id = :id");
        $statement->bindValue(':name',$name,PDO::PARAM_STR);
        $statement->bindValue(':comment',$comment,PDO::PARAM_STR);
        $statement->bindValue(':mail_address',$mail_address,PDO::PARAM_STR);
        $statement->bindValue(':id',$id,PDO::PARAM_STR);
        $statement->execute();

        $success_msg['edit_result'] = '更新に成功しました。';
    }
    else
    {
        $error_msgs['not_match_edit_pass'] = 'パスワードが正しくありません。';
    }

    //処理したらページに戻す
    header("Location: http://127.0.0.1/index.php");
}

//削除機能
elseif(isset($_POST['delete']) === true)
{
    //入力内容
    $password = $_POST['password'];

    //パスが正しければ削除処理
    if($password === $target_pass)
    {
        $statement = $com->prepare("DELETE FROM 'posting' WHERE id = :id");
        $statement->bindValue(':id',$id,PDO::PARAM_STR);
        $statement->execute();

        $success_msg['delete_result'] = '削除に成功しました。';
    }
    else
    {
        $error_msgs['not_match_delete_pass'] = 'パスワードが正しくありません。';
    }

    //処理したらページに戻す
    header("Location: http://127.0.0.1/index.php");
}

//入力履歴をcookieに保存
if(isset($_POST['delete']) !== true)
{
    setcookie('posted_name',$name,time() + 60 * 60 * 24);
    if(! $success_msg)
    {
        setcookie('posted_comment',$comment,time() + 5);
    }
    setcookie('posted_mail_address',$mail_address,time() + 60 * 60 * 24);
}

//処理メッセージをsessionに保存
$_SESSION['success_msg'] = $success_msg;
$_SESSION['error_msgs'] = $error_msgs;
・・・

機能の部分だけピックアップすると、こんな感じです(・_・;)

処理の対象記事のidからレコードを引っ張ってきて、そのパスワードと入力されたパスワードが合致すれば、UPDATE or DELETE処理してトップページに戻すって流れですね。

この機能自体はあまり難しくありませんが、ここに返信機能を加えていくとなかなかややこしいことになってくるんですよね。。

まぁそれはまた次回にでも書こうかなと!!
そういえば、

Merry Christmas☆

1

でしたね(^^)
皆さんが良い日を過ごせたことを祈ります。笑

ではでは、また次回。