【PHP】TODOアプリの作成方法(CRUD) (Create, Read, Update, Delete)
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を使うとわかりやすいです。