更新日:2021年12月11日
「PHPでデータベースと連携してショッピングカートを作成する方法」の記事では、データベースを使って簡易的なショッピングカートシステムを作成しました。ただデータベースって用意したり、連携したりって前段階が面倒くさいですよね。
今回の記事では、「PHPでデータベースと連携してショッピングカートを作成する方法」と同様の仕組みをデータベースを使わずにテキストファイルで再現してみます。
最終的な完成ファイル一式を公開していますので、ダウンロードすることですぐにテキストファイルを使ったカートシステムを実装出来ます。以下のリンクからダウンロードして下さい。
PHPでテキストファイルに書き込んでショッピングカートを作成する方法【完成ファイル】
デモはこちらです!
作成していくファイルは下記の6ファイルとなります。データベースを使うパターンより1ファイルだけ少なくなっています。この6ファイルを使ってテキストファイルで簡易的なショッピングカートシステムを作成していきます。
上のphpファイルから順に作成していきます。
まずは以下の情報を書き込んだテキストファイルを作成します。ファイル名はdata.txtにして下さい。
1 走れメロス 翌日 A4 5
2 人間失格 4営業日 B5 20
3 斜陽 3営業日 B6 100
4 パンドラの匣 2営業日 A4 30
注意点としては各キーワードはスペースではなくタブで区切られているということと、文字コードはUTF-8で保存して欲しいということです。
これでテキストファイルの準備は完了です。
以下にテキストファイルを用意しているので、こちらを使って貰っても大丈夫です!
shopping_carts_textfile_verのテキストファイル(右クリックから名前をつけてリンク先を保存がおススメです)
index.phpという名前のphpファイルを作成して、下記のように記述します。
これから作る他のphpファイルも全てindex.phpと同階層に作って下さい。data.txtも同じ階層です。
$data = file("data.txt");
でdata.txtの中身を読み込んでいます。
$data = array_reverse($data);
ではdata.txtの中身を逆順(新着順)になるようにしています。array_reverseは配列を逆順にする関数ですね。
$data = array_map("trim",$data);
ではtrim関数を使って文字列の先頭と末尾の空白を取り除く処理をしています。
for($i = 0;$i < count($data);$i++){
では先程の$dataの中身の列の数だけ繰り返し処理します。
間違えがちですが、実はテキストファイルが読み込まれた時、列ごとのデータがArrayに格納されるのです。
なので$dataの数を数えると、テキストファイル内の列の数が分かるということですね。
$row = $data[$i];
では$rowにテキストファイルの各列の情報を入れて、
$cell = explode("\t",$row);
では$cellにテキストファイルの各列の情報をタブで区切って、それぞれを配列に入れています。
そうすることで$cell[0]には「1」が、$cell[1]には「走れメロス」が入るようになる訳です。
これでテキストファイルに登録された情報一覧が表示されるようになりました。編集や削除もこの画面からリンクされているので、ホーム画面ということになります。
input.phpという名前のphpファイルを作成して、下記のように記述します。
入力画面になります。
お客様がこの画面に情報を入力するイメージになります。
入力された情報はinput_do.phpへ送信されます。
input_do.phpという名前のphpファイルを作成して、下記のように記述します。
POSTで送信された時、data.txtにinput.phpで送信された情報を追記するのですが、
列の冒頭にある数字を振る時に一工夫する必要があります。
要は連番になる必要があるので、最後の行の列より1大きい数字を、振ってあげればいいのです。
$last_line_array = file("data.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
でdata.txtを配列の各要素の最後の改行を省略しつつ、空行を読み飛ばした上で読み込みます。
$last_line = $last_line_array[count($last_line_array)-1];
ではdata.txtの最後の行を返しています。
$last_line = explode("\t",$last_line);
ではタブ区切りで配列に入れて、$last_line[0]で最後の行の冒頭にある数字を取得出来るような状態にしました。
そして$last_line[0]+1で1を足すことで、最後の行の冒頭にある数字に1を足した数字を新たに書き込むことに成功しました。
update.phpという名前のphpファイルを作成して、下記のように記述します。
for($i = 0;$i < count($data);$i++){ では$dataの中身の列の数だけ繰り返し処理します。
$cell = explode("\t",$data[$i]);
では各列毎にタブ区切りで配列に入れます。
if($cell[0]==$id){
では$cell[0]にはテキストファイルの冒頭にある数字が入っているので、その数字と$idが一致した場合に、
$row = $data[$i];
でその一致した列を$rowに入れます。
$cell = explode("\t",$row);
では$rowをタブ区切りで配列に入れています。
update_do.phpという名前のphpファイルを作成して、下記のように記述します。
今までと同じ要領で繰り返し処理をしていますが、少し違うのは以下の記述でしょうか。
if($cell[0]==$id){
$data[$i] = $new_row;
}
ここでは$idと一致した列を丸々$new_rowに上書きするという処理をしています。
$write_str = implode("\n",$data);
ではテキストファイルに書き込む為に、列(=改行)ごとにバラバラになったdata.txyの内容を戻す処理をしています。
そうした上でdata.txtに書き込みをしているとういう訳です。
delete.phpという名前のphpファイルを作成して、下記のように記述します。
DELETEのSQLを使い、データベースの情報を削除しています。このDELETEは必ずWHEREとセットで使う必要があり、WHEREにidをセットすることでどの情報を編集するのかを明確にしています。
if($cell[0]==$id){}else{
$data2[] = $data[$i];
}
ここでは$idと一致しなかった列を全て、$data2[]という空の配列に入れる処理をしています。
つまり$idと一致した列だけが削除されるという訳です。
これにて完成です!お疲れ様でした。
テキストファイルの操作もなかなかコツがいりますが、ご活用ください!