ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

PHPプログラミングについて語るコミュのPHPで携帯の二重投稿防止の作り方

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ども初めまして、匠と申します。よろしくお願いします。

質問は記述の仕方です。(使う関数や考え方)
 

 9/1までに、携帯でも二重投稿防止の投票ホームを作りたいと思っています。

 仕様は

・一人一日一回まで投票できる。

これのみです。

 PCのほうは、クッキーでそのような仕組みを作ったのですが、携帯は携帯個別認識番号なるものを抜き出して、DBに登録しようと考えています。

以下はプログラムです。if文の条件部分がどのように書いたらいいのか迷っています。



//DB登録されている個別認識番号と一致するか

if(送られてきた認識番号がDBに登録されていなかったら){
$sql = "insert into block (`ip`, `time`) values('$ip', '$now_time')";

// データを取り出す
$sql = "SELECT * FROM touhyou ";
$res = mysql_query($sql, $conn) or die("データ抽出エラー");
while( $rec = mysql_fetch_array( $res, MYSQL_ASSOC ) ){
$r_a=$rec['a'];
}
//更新

switch ($post_vote) {
case "aに投票する":
$r_a= $r_a+1;
$sql = "update touhyou set a= $r_a";
mysql_query($sql, $conn);

break;

default :echo"dame";
}


exit;

}

else{
if(現在の時刻と前回訪問から24時間過ぎているを調べる){
認識番号はそのままで時間ののところだけ更新;
投票;
}
else{echo "一日一回しか投票できません";

}

}



 長々と読んでいただきありがとうございます。

是非、よろしくお願いいたします。

コメント(11)

「1日1回」ということでしたら、cron等で別途、毎日0:00にレコード一斉クリアするプロセスを起動する、というのはダメですか?
>けいたさん

回答ありがとうございます。
わからないところは「if文の条件部分」の書き方です。

1DBに既に登録されている番号と照らし合わせる
2現在の時刻と前回訪問から24時間過ぎているを調べる

の二つです。

認識番号というのは、AUで言えばサブスクライバIDと呼ばれているモノを指していました。言葉足らずですみません。
 この認識番号取得に関しては、そのままコードが使えるサイトを見つける事が出来ましたので、コードをコピペで使いました。
 
 そして、けいたさんがおっしゃられている1の登録時間から24時間たったレコードを削除をというコードはどんな関数を使うのでしょうか?

>westernさん

 cronとはどのうような仕組みなのでしょうか?
簡単には検索してみましたが、PHP関数ではないという事しかわかりませんでした。
  
 また、語弊が生まれるような書き方をしてしまい申し訳ありません。今回の仕様「一人一日一回」というのは「投票してから24時間経たないと再投票できません」という仕様のつもりで書きました。

 今回教えていただいた、cron技術。是非、もう少し詳しく勉強させていただきたいと思います。

 回答ありがとうございました。
 
 
9/1まで…ということは、もう開発終わってる頃でしょうか。

個体識別番号って、UserAgentに含まれるやつですか?
それだと、機種によっては対応できないような…
$now_time = date("YmdHi",time());
/*年月日時分を取得、2006年9月11日3時41分 == 200609110341
なので、丸一日後は200609120341。差し引き10000。
*/
if(!$result = mysql_query("select time FROM block WHERE ip =' .$ip. '")){
$sql = "insert into block (`ip`, `time`) values('$ip', '$now_time')";

〜中略〜


}else{
if((int)$result[0]-(int)$now_time > 10000){
//差し引き10000以上なら一日後。試してないからアレだけど一応キャスト

認識番号はそのままで時間のところだけ更新;
投票;
} else{
echo "一日一回しか投票できません";

}

}

こんな感じでしょうか......?
自己レスです。
すいません、$result[0]では一番最初の投稿をひっぱってきてしまいますね。
$i = count($result);
$i--;
if((int)$result[$i]-(int)$now_time > 10000) {
・・・・
こうでしょうか。
>たくver2.1さん

ああ、そうか。
それならresult[0]だけでいいわけですね。
ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

PHPプログラミングについて語る 更新情報

PHPプログラミングについて語るのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。