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が使えるサーバー

僕が使っているサーバーとドメイン管理のレジストラーです。

ロリポップ!
多くのアフィリエイターが支持する安くて安心の初心者向けレンタルサーバー。MySQLを使うなら↓のチカッパの方が軽いです。
チカッパ!
複数サイトの管理に便利なマルチアカウント、マルチドメイン対応。月額525円〜で500MBの大容量。
ムームードメイン
有料サーバー借りるなら独自ドメインは必須!「.com」「.net」なら年間数百円で取得可能です。ロリポ、チカッパの併用でDNS設定も超簡単!

管理人のブログ

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