送信されたデータをCSVに書き込むプログラムです。
フォームから送信された文字列には、そのままでは使えない文字が含まれる可能性があります。また、改行を自動的に<br>に置き換えられたら便利ですね。これら一連の処理は、繰り返し使いますので自作関数にまとめておきましょう。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。
僕が使っているサーバーとドメイン管理のレジストラーです。
§CSVへの書き込み
送信されたデータをCSVに書き込むプログラムです。
文字列を整形してから書き込む。
フォームから送信された文字列には、そのままでは使えない文字が含まれる可能性があります。
また、改行を自動的に<br>に置き換えられたら便利ですね。
これら一連の処理は、繰り返し使いますので自作関数にまとめておきましょう。
$Str=str_replace("‚ "‚ ""‚ $Str);//解説(1)
if($Br==1){
$Str=nl2br($Str); //解説(2)
}
$Str=str_replace("\n"‚ ""‚ $Str);
$Str=str_replace("\r"‚ ""‚ $Str);
return $Str;//解説(3)
}
解説(1)
CSVファイル内では区切り文字として以外に「カンマ」は使えませんので削除します。
解説(2)
第二引数に「1」を指定したときは改行コードを<br />に置き換えます。
nl2br関数は文字列内の改行コード「\n \r」の前に<br />を自動的に挿入します。
挿入するだけで削除はされませんので、処理の後str_replace関数で改行コードを削除します。
解説(3)
返り値は処理後の文字列です。
次に登録するデータにIDを指定します。
IDは他のデータのIDと重複してはいけません。
item.csvに登録されているIDをすべて調べて一番大きい数字に「1」を足したものを新しいIDとします。
$Data=file("item.csv");
for($i=0;$i<sizeof($Data);$i++){
$line=explode("‚ "‚ $Data[$i]);
if($line[0]>=$ID) //解説(5)
$ID=$line[0]+1;
}
解説(4)
新しいIDを「0」としてitem.csvに登録されたIDと比較していきます。
解説(5)
登録済みIDが$IDより大きいまたは同じ場合、登録済みIDに1を足した数字に入れ替えます。
いちいち比較して入れ替えるという作業は一見遠回りな気もしますが、こうしておくことで仮にCSVをローカルで操作してIDの順番が入れ替わった場合なども対応できるようになります。
ここから受け取ったデータの処理です。
$ImageLink=ShapeStr($_POST["image"]‚ 0); //解説(6)
$TextLink=ShapeStr($_POST["text"]‚ 0);
$Comment=ShapeStr($_POST["comment"]‚ 1);
$Price=ShapeStr($_POST["price"]‚ 0);
//データを連結する。
$lines=array($ID‚ $Cat‚ $ImageLink‚ $TextLink‚ $Price‚ $Comment‚ ""‚ ""‚ ""‚ "1"); //解説(7)
$lines=implode("‚ "‚ $lines);
$lines=$lines."\n";
//CSVファイルに書き込み
$fp=fopen("item.csv"‚ "a"); //解説(8)
flock($fp‚ LOCK_EX);
fputs($fp‚ $lines);
fclose($fp);
解説(6)
自作関数「ShapeStr」をつかってPOSTで受けとった文字列をそれぞれ処理します。
解説(7)
CSVファイルに書き込むには「カンマで区切られた1行の文字列」にしなければいけません。
implode関数は配列を文字列に変換する関数です。explode関数とまったく逆ですね。
implode(区切り文字‚ 配列)
データを一旦配列に収めimplode関数で文字列に変換するようにしておくと後でデータを追加する場合など間違いが少なくなります。
配列の後半に「‚ ""‚ ""‚ ""‚ "1"」とありますが、これは後でフィールドを追加したくなったときのための予備です。
特になくても構いません。また「1」という数字に意味はありません。
解説(8)
item.csvを書き込みモードで開きます。「a」に指定するとポインタを最後尾に置きます。
書き込み処理中はflock関数で他者が読み書きできないようにしておきます。
前ページのフォームとこれらを組み合わせれば登録画面の完成です。
実際の運用には入室制限などのセキュリティーが必要です。
認証のプログラムはこちらで解説しています。
プログラムのご使用による損害は直接、間接に関わらず一切の責任をもちません。ご使用は自己責任でお願いします。