
クライアントから、同じユーザーがアクセスできる回数制限を設けた申込フォームを構築してほしいとリクエストがあったので、ちょっとメモします。
CSVの内容
ユーザーが申込フォームから申し込んだの内容をCSVに書き込みます。
書き込まれた内容例は以下です。
1,11111111,20221027,日本太郎 1,22222222,20221027,日本花子 1,33333333,20221027,東京花子 1,11111111,20221027,日本太郎 1,33333333,20221027,東京花子 1,11111111,20221027,日本太郎
先頭から「カウント用の値」「会員番号」「申込年月日」「名前」となります。
同一ユーザーマッチングの定義
同一ユーザーをマッチングするためには、ユニーク情報が必要なので会員番号とします。また、申込回数を上限3回までと定義します。
つまり、3回申し込んだ同一ユーザーは以降アクセスできないようにします。
CSVを読み込んで同一ユーザーの申込回数を算出
CSVはベーシック認証のかかったディレクトリにあることを前提とします。その上で以下のプログラムを実行します。
<?php
$number = $_GET['number'] ;
$webroot = $_SERVER['DOCUMENT_ROOT'];
mb_internal_encoding("utf-8");
$id = "sampleid";
$pass = "samplepass";
$domain = "sample.com";
$path_csv = "/csv/user.csv";
$url_csv = "https://" . $id . ":" . $pass . "@" . $domain."".$path_csv;
$buff = file_get_contents($url_csv);
$openfile_cnt = $buff;
$csv_cnt_gyo = split("\n", $openfile_cnt);
foreach($csv_cnt_gyo as $repeat_cnt) {
list($cnt,$num,$date,$name) = explode(",", $repeat_cnt);
if($number==$num){
$count_total += $cnt;
}
}
$count_ALL=$count_total;
?>
以下のように会員番号パラメータnumberが付与されているURLでアクセスした場合、numberをGETで取得し、CSV内の会員番号データ$numとマッチングさせ該当のユーザーの申込回数を算出します。
https://sample.com?number=11111111
$number = $_GET['number'] ;
CSVはベーシック認証がかかっているのでDOCUMENT_ROOTを使用してアクセスできるように設定します。
$webroot = $_SERVER['DOCUMENT_ROOT'];
mb_internal_encoding("utf-8");
$id = "sampleid";
$pass = "samplepass";
$domain = "sample.com";
$path_csv = "/csv/user.csv";
$url_csv = "https://" . $id . ":" . $pass . "@" . $domain."".$path_csv;
$buff = file_get_contents($url_csv);
CSVを読み込み$numberと$numをマッチングさせ、該当のユーザーの申込回数を$cntを足して算出します。
if($number==$num){
$count_total += $cnt;
}
それを変数に代入します。
$count_ALL=$count_total;
ここまでで、申込回数を取得できました。
同一ユーザーが後何回申し込めるか表示する
あと何回申し込めるかメッセージがあると、ちょっと親切です。
$count_ALLを使用して作成します。
$cnt_remaining=3-$count_ALL; $cnt_remaining_print="残りの申込可能数あと:".$cnt_remaining."回";
これで会員番号「22222222」のユーザーは
残りの申込可能数あと2回
と表示されます。
3回申し込んだユーザーをブロック
会員番号「11111111」のユーザーはすでに3回申し込んでいるので、アクセスしたら別のページにリダイレクトさせます。
$cnt_remainingの値が3-3=0となるので、以下のように処理します。
if($cnt_remaining==0){
header("location:err.php");
exit();
}
以上です。
ちなみに、今回は分かりやすいよう会員番号をGETで取得していますが、通常はPOSTを利用するのが一般的です。
今回は申込数上限制御が目的でしたが、アクセス回数によりユーザーステータスをかえるなど、応用できそうです。