pagetop

BLOG

【php】CSVを読んで同じユーザーが何人いるかをカウントする

  • HOME

  • BLOG

  • 【php】CSVを読んで同じユーザーが何人いるかをカウントする

Article

【php】CSVを読んで同じユーザーが何人いるかをカウントする

PHP

クライアントから、同じユーザーがアクセスできる回数制限を設けた申込フォームを構築してほしいとリクエストがあったので、ちょっとメモします。

 

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を利用するのが一般的です。

今回は申込数上限制御が目的でしたが、アクセス回数によりユーザーステータスをかえるなど、応用できそうです。

Spread the love