HOME > 簡易データベースを作ってみよう > 

§データを編集する。

登録したデータを編集するプログラムを作ります。
フォームで編集するためには「データをもとの状態に戻す」「CSVを配列で読み込み要素を置換する」の2点に気をつけます。

フォームで確認するために元の状態に戻す。

"まずフォームからIDを送信し編集するデータを特定します。

<form action=""<?=$_SERVER[ ""PHP_SELF"" ]?>""method=""POST"">
<input size=""10"" type=""text"" name=""id""><input type=""submit"" name=""submit"" value=""確認"">
</form>

次に編集用のフォームにデータの内容を表示させます。
このとき、ただ呼び出せばよいのではありません。
CSVに収められているデータは登録の際に加工しています。
元の状態に戻すよう再加工してからフォームに表示させます。
<?php
//編集するデータを抽出
$ID=$_POST[""id""];
$Data=file(""item.csv"");
for($i=0;$i<sizeof($Data);$i++){
$line=explode(""‚ ""‚ $Data[$i]);
if($line[0]==$ID){
$Cid=$line[1];

$ImageLink=DeleteEsc($line[2]); //解説(1)
$StrImageLink=htmlspecialchars($ImageLink); //解説(2)

$TextLink=DeleteEsc($line[3]);
$StrTextLink=htmlspecialchars($TextLink);

$Price=$line[4];

$Comment=str_replace(""<br />""‚ ""\n""‚ $line[5]); //解説(3)
$Comment=str_replace(""<br>""‚ ""\n""‚ $Comment);
break;
}
}
?>

解説(1)
登録の時サーバーによって付加されたエスケープ文字を取り除きます。
DeleteEscは自作関数です。解説はこちら。
自作関数は外部ライブラリ(common.php)から読み込みます。
解説(2)
HTMLタグはそのままでは表示できません。
htmlspecialcharsでタグを無効化すると文字列として扱えます。
解説(3)
改行タグ<br>または<br />を改行コードに戻します。

ここから編集用フォームです
各フィールドのvalue属性などに再加工した変数を埋め込むことでデータの内容を表示させます。
<form action=""<?=$_SERVER[ ""PHP_SELF"" ]?>"" method=""POST"">
ID<br>
<input size=""10"" type=""text"" name=""id"" value=""<?=$ID?>""><br>
カテゴリー<br>
<select name=""cat"">
<?php
//解説(4)
$Data=file('cat.csv');
for($i=0;$i<sizeof($Data);$i++){
$line=explode(""‚ ""‚ $Data[$i]);
$Selected="""";
if($Cid==$line[0]){
$Selected=""selected"";
}
?>
<option value=""<?=$line[0]?>"" <?=$Selected?>><?=$line[1]?></option>
<?php
}
?>
</select><br>
画像リンク<br>
<?=$ImageLink?><br>
<textarea cols=""40"" rows=""4"" name=""image""><?=$StrImageLink?></textarea><br>
テキスト<br>
<?=$TextLink?><br>
<textarea cols=""40"" rows=""4"" name=""text""><?=$StrTextLink?></textarea><br>
価格<br>
<input size=""10"" type=""text"" name=""price"" value=""<?=$Price?>""><br>
コメント<br>
<textarea cols=""40"" rows=""10"" name=""comment""><?=$Comment?></textarea><br>
<input type=""submit"" name=""edit"" value=""編集"">
</form>

解説(4)
登録カテゴリーはプルダウンメニューで表示させますが、デフォルトで表示させるにはoptionタグに「selected」を埋め込まなくてはいけません。
空の変数$Selectedを用意し、カテゴリーのIDが一致したときのみ$Selectedに「selected」の文字列が代入されるようにします。

3.フォームから送信されたデータを差し替え(削除し)CSVを上書きします。
編集の場合一旦CSVを配列としてすべて読み込み、該当する要素を差し替えます。
<?php
if($_POST[""edit""]){
//データの編集(editを受け取ったとき)解説(5)
$ID=$_POST[""id""];
$Cat=$_POST[""cat""];
$ImageLink=ShapeStr($_POST[""image""]‚0&sbquo0);
$TextLink=ShapeStr($_POST[""text""]‚ 0‚ 0);
$Comment=ShapeStr($_POST[""comment""]‚ 1‚ 1);
$Price=ShapeStr($_POST[""price""]‚ 0‚ 0);
//配列の格納後文字列へ変換
$lines=array(""$ID""‚ $Cat‚ $ImageLink‚ $TextLink‚ $Price‚ $Comment‚ """"‚ """"‚ """"‚ ""1"");
$lines=implode(""‚""‚ $lines);
$lines=$lines.""\n"";
//配列を入れ替え 解説(6)
$Data=file(""item.csv"");
for($i=0;$i<sizeof($Data);$i++){
$line=explode(""‚ ""‚ $Data[$i]);
if($line[0]==$_POST['id']){
array_splice($Data‚ $i‚1‚$lines);
}
}
//CSVファイルに書き込み 解説(7)
$fp=fopen(""item.csv""‚""w"");
flock($fp‚LOCK_EX);
foreach($Data as $item)fputs($fp‚$item);
fclose($fp);
}
?>

解説(5)
送信されたデータを改めて加工します。参照「CSVへの書き込み」

解説(6)
編集の場合は登録の場合と違い、CSVの途中の行を書きかえることになります。
ファイル操作ではポインタを任意の場所に置くことができないので、
CSVを配列に読み込む→配列の要素を編集したデータと入れ替える→配列をCSVに上書きする。
という手順になります。
要素の入れ替えにはarray_splice関数を使います。
array_splice(元の配列‚ 置換を開始する位置‚ 置換する要素数‚ 挿入する要素)

解説(7)
item.csvに置換後の配列をすべて上書きします。"

簡易データベースを作ってみよう

  1. 仕組みとファイル構成
  2. CSVとは
  3. トップページを作る
  4. カテゴリー別ページを作る
  5. アイテム別ページを作る
  6. フリーワード検索を作る
  7. 検索結果がゼロの場合の処理
  8. 絞込み検索(and検索)
  9. 1ページを10件表示に制限する
  10. 登録画面を作る。
  11. CSVへの書き込み
  12. データを編集する。
  13. データを削除する。

メイン・メニュー

  1. はじめに
  2. 入門者向け参考書
  3. PHPの基本
  4. ローテーション・バナーを作ってみよう
  5. 検索結果リンクを自動化しよう
  6. 簡易データベースを作ってみよう
  7. ホームページ制作のためのリンク集

PHPが使えるサーバー

僕が使っているサーバーです。

エックスサーバー
多くのアフィリエイターが支持するレンタルサーバー。
当サイトでも使用しています。

管理人のブログ

音楽サイトでアフィリエイトblog
音楽アフィリエイトとサイト運営の効率化を考えるブログ