
先日、クライアントから「くじ引きキャンペーンを予定しているが、その際のプレゼントがクーポンコードでエクセルにリストアップした1行1クーポンコードを順番にプレゼントしたい。」とご相談がありました。
くじ引きのプログラムはおいといて…、当たりがでたら(当たりページが表示されたら)エクセルのクーポンコードをどう管理するかということでメモです。
まず必要な事
1:エクセルをCSVにコンバートしcode.csvを作成する
2:当たりがでたら、上から順番にクーポンコードを消し込む
3:消し込んだら、行を上に移動する
こんな感じ。
code.csvを作成する
コンバートの方法はそれぞれなので省略するとして、以下の様な内容のCSVデータを作成する。
1111111111
2222222222
3333333333
4444444444
・
・
・
消し込みプログラムを書く
tousen.phpを用意しプログラムは以下のように記述。
CSVデータの中身をみる変数は$codeにする
$id_url = $_GET['id'];
//消し込み
$fp = fopen("csv/data.csv", "r+");
if (flock($fp, LOCK_EX)) { // 排他的ロックを行う
while (($data = fgetcsv($fp, 1024))!==FALSE) {
list($code) = $data;
if($id_url != $code){
$wk[] = "$code\n";
}
}
ftruncate ($fp, 0);//中味の削除
rewind($fp); //ポインタのリセット(巻き戻し)
foreach($wk as $data){
fwrite($fp, $data);
}
flock($fp, LOCK_UN); // ロックを解放する
} else {
echo "Couldn't lock the file !";
}
fclose($fp);
以下で該当ファイルの読み込みと書き込みを行う
$fp = fopen(“csv/data.csv”, “r+”);
if($id_url != $code){
部分の$id_urlはidtというGET引数としてクーポンコードが代入され、$codeとマッチングしています。
https://www.example.com/tousen.php?id=1111111111
つまり、消し込むクーポンコードをここで判断します。
あとは、消し込みし行を上に移動するプログラムです。
ざっくりだな〜
サーバーにアップロード
ファイルが用意できたら以下のディレクトリでサーバーにアップロードして動作確認
tousen.php
csv
|_data.csv
以下にアクセス。
https://www.example.com/tousen.php?id=1111111111
それでdata.csvの1111111111が消え2222222222が最上部にあればOKです。