先日、クライアントから「くじ引きキャンペーンを予定しているが、その際のプレゼントがクーポンコードでエクセルにリストアップした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です。