登録したデータを編集するプログラムを作ります。フォームで編集するためには「データをもとの状態に戻す」「CSVを配列で読み込み要素を置換する」の2点に気をつけます。
まずフォームからIDを送信し編集するデータを特定します。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。
僕が使っているサーバーとドメイン管理のレジストラーです。
§データを編集する。
登録したデータを編集するプログラムを作ります。
フォームで編集するためには「データをもとの状態に戻す」「CSVを配列で読み込み要素を置換する」の2点に気をつけます。
フォームで確認するために元の状態に戻す。
まずフォームからIDを送信し編集するデータを特定します。
<input size="10" type="text" name="id"><input type="submit" name="submit" value="確認">
</form>
次に編集用のフォームにデータの内容を表示させます。
このとき、ただ呼び出せばよいのではありません。
CSVに収められているデータは登録の際に加工しています。
元の状態に戻すよう再加工してからフォームに表示させます。
//編集するデータを抽出
$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属性などに再加工した変数を埋め込むことでデータの内容を表示させます。
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を配列としてすべて読み込み、該当する要素を差し替えます。
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に置換後の配列をすべて上書きします。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。