0

これが私がやりたいことです: ユーザーは 1 日に 5 回までコメントできます (コードでは、60 秒を使用して結果をより速く表示します)。しかし、私は間違った比較をしているようです。なぜなら、今は常に真実を返すからです。そのため、カウンターが 5 を超えていても、そこで停止するのではなく (60 秒間) カウントアップします。どんな入力でも大歓迎です。以下は私が使用するコードです。

<?php
$DB_HostName = "";
$DB_Name = "";
$DB_User = "";
$DB_Pass = "";
$DB_Table = "";

$name = mysql_escape_string($_GET['name']);
set_time_limit(0);

$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die (mysql_error()); 
mysql_select_db($DB_Name,$con) or die(mysql_error()); 

 if ($name[CommentCounterReset] === 5) //or if ("CommentCounterReset === 5 WHERE Name = $name)? {
   echo "You already wrote five comments.";
   set_time_limit(60);  
   $sql = "UPDATE table SET CommentCounterReset = CommentCounterReset-5 WHERE Name = '$name'";
}  else {
 $sql = "UPDATE table SET CommentCounterReset = CommentCounterReset+1 WHERE Name = '$name'";
        echo "Comment accepted.";

 }

$res = mysql_query($sql,$con) or die(mysql_error());

   mysql_close($con);
if ($res) {
}else{
}// end else
?>
4

2 に答える 2

2

次のコマンドで待機時間の後にクエリを実行しようとしているようです。

 set_time_limit(60);  

これにより、スクリプトの最大実行時間が 60 秒になりますが、実際にはそれ以上のことはありません。スクリプトを最大 1 分間実行できるように設定を変更しますが、実際には実行しません。

あなたはそれを行うことができますsleepが、すべきではありません.1日実行したい場合、それはスクリプトが1日実行されることを意味します(システムコールであるため、スリープは「カウント」されません)。

データベースに特定の時間を書き込んで、それを確認することをお勧めします。ユーザーがコメントしたい場合は、チェックします

ユーザーのコメントが 5 つあるかどうかを確認します。

  1. はい?時間を確認する
    1.過去の場合は、コメントを投稿してカウンターをリセットします。
    1. 将来の場合は、コメントを投稿しないでください。
  2. いいえ?カウンターを増やしてコメントを投稿する
    1. 5まで上げた?次に、日付を +60 秒 (または +1 日) に設定します。
于 2012-09-22T15:43:12.153 に答える
0

ここで修正してください。

if ($name[CommentCounterReset] >= 5)
于 2012-09-22T14:46:03.820 に答える