【PHP】TODOアプリの作成方法(CRUD) (Create, Read, Update, Delete)

PHP

PHPを使ったTODOアプリの作成方法を紹介します。
簡単なCRUD (Create, Read, Update, Delete) のやり方ですが、
アプリを作成する上で土台となる内容です。

完成コード


<?php
session_start();
// $_SERVER['PHP_SELF']で現在のページのURLを取得できる
$self_url = $_SERVER['PHP_SELF'];
?>

<form action="<?php echo $self_url; ?>" method="POST">
    <input type="text" name="title">
    <!-- btn -->
    <input type="submit" name="btn" value="作成">
</form>
<!-- 
submitのname属性で切り分ける
$_SESSIONのtodosの配列に格納していくことができます。
 -->
<?php 

    // btnの切り分け
    if(isset($_POST['btn'])) {
        // 新規追加
        if($_POST['btn'] === '作成') {
            $_SESSION['todos'][] = $_POST['title'];
            echo "新しいTODO「{$_POST['title']}」が追加されました。";
        } else if($_POST['btn'] === '更新') {
            // idをループで付与しているのでそれを使うことで何番目のtitleかを指定できる
            $_SESSION['todos'][$_POST['id']] = $_POST['title'];
            echo "TODO「{$_POST['title']}」を変更しました。";
        } else if($_POST['btn'] === '削除') {
            // array_spliceで削除
            // 第一引数に削除対象の配列、第二に配列の番号、第三に何個削除するか
            array_splice($_SESSION['todos'], $_POST['id'], 1);
            echo "TODO「{$_POST['title']}」が削除されました。";
        }
    }
    // 配列にする場合初期化が必要
    if(empty($_SESSION['todos'])) {
        // 空のとき初期化
        $_SESSION['todos'] = [];
        echo 'TODOを入力してください。';
        // 処理を止める
        die();
    }
?>


<!-- 作成されたTODOを表示 -->
<ul>
    <?php for($i = 0; $i < count($_SESSION['todos']); $i++): ?>
    <li>
        <form action="<?php echo $self_url; ?>" method="POST">
        <!-- 削除対象を知るためにhiddenが必要 -->
            <input type="hidden" name="id" value="<?php echo $i; ?>">
            <input type="text" name="title" value="<?php echo $_SESSION['todos'][$i]; ?>">
            <input type="submit" name="btn" value="削除">
            <input type="submit" name="btn" value="更新">
        </form>
    </li>
    <?php endfor; ?>
</ul>

<?php 
    // var_dump($_SESSION['todos']);
?>

新規作成のときは、配列に格納します。
配列は初期化されている必要があるので、btnの切り分けのあとで、配列の初期化の処理を記述します。
更新と削除は、ループで付与したidの任意の番号を指定します。
削除は、array_spliceを使いますが、その方法は、【PHP】配列の値を変更する方法を参考にしてみてください。

現在のページのURLを取得する$_SERVER['PHP_SELF’]

$_SERVER['PHP_SELF’]で現在のページのURLを取得できます。

処理をとめる die()

die()でPHPの処理を止めることができます。
die()が呼ばれた時点で、それ以降のコードは実行されません。

ループ


<?php for($i = 0; $i < count($_SESSION['todos']); $i++): ?>
html
<?php endfor; ?>

上のように、ループするときにhtmlを挟む場合は、コロンで区切ることができます。

削除や更新を知るために隠しフィールドを設定


<input type="hidden" name="id" value="<?php echo $i; ?>">

上のように、inputのhiddenでvalueに値をセットすることで、どれの削除ボタン、または更新ボタンが押されたのかを把握することができます。

SESSIONの中身を確認するvar_dump()


<?php 
    var_dump($_SESSION['todos']);
?>

セッションの中身を確認したい場合、var_dumpを使うとわかりやすいです。

PHP

Posted by devsakaso