2017-12-22 28 views
0

以下のコードはRSForm(私のフォームに現在使用しているツール)から来ますが、私の苦労は純粋なPHP知識で解決できると思います。ここに。制限フォーム投稿ページごとにユーザーのために

フォームに表示される特定のページで特定の回数だけフォームに回答するようにユーザーを制限する方法はありますか?

多くのページで同じフォームがリサイクルされており、ユーザーがページごとに1回しか回答できないことを願っています。それはまったく可能ですか?

このコードでは、各ユーザーがフォームを送信できるようにする回数が既に制限されていますが、特定のページのフォームに回答する場合はどのように制限できますか?私が望む結果は、彼らはフォームを見つけるページの1回だけ同じフォームに答えるかもしれないということです。

// Define the maximum number of submissions. 
$max = 1; 

// Get the current logged in user. 
$user = JFactory::getUser(); 

// Get a database connection. 
$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 

// Setup the query. 
$query->select('COUNT('.$db->qn('Username').')') 
    ->from($db->qn('#__rsform_submissions')) 
    ->where($db->qn('FormId').'='.$db->q($formId)) 
    ->where($db->qn('Username').'='.$db->q($user->get('username'))); 
    // You can also count by User ID, just replace the above with: 
    // ->where($db->qn('UserId').'='.$db->q($user->get('id'))); 

$db->setQuery($query); 
$counter = $db->loadResult(); 

if ($counter >= $max){ 
    $formLayout = 'Sorry, you have reached the maximum number of submissions for this form.'; 
} 

フォームが同じページに提出された場合にのみ制限するために、これを適応するとにかくはありますか?


EDIT:

これらのフォームは、常にK2アイテムページになり、私はこのコードでアイテムIDを得ることができることを考え出し:

$K2Itemid = JRequest::getInt('id'); 

私は私が使用することができると思いますこれは私が行方不明になっている状態です。私は別のページとしてK2 IDで提出を制限することができます。誰かがこれを適用するのを手伝ってもらえますかどのようにこの状態を挿入しますか?

答えて

0

いくつかのPHPサーバー変数を使用する必要があります。

フォームに非表示のフィールドを作成し、サブミット自体の値として$ _SERVER ['REQUEST_URI']を記録するように設定しました。クエリ文字列がある場合は、$ _SERVER ['QUERY_STRING']も使用する必要があります。

あなたのコードで変数を設定し、WHEREのようにクエリを使用して、そのURLからどこに投稿を返すかを指定します。

+0

私はK2 Itemを使用しているので、スクリプト内で投稿を制限するために使用できる可能性があることを示すために投稿を編集しました。その情報を「どこで」適用するのを助けるかもしれないと思いますか?申し訳ありませんが、私はPHPの初心者です。 –

0

データベースのフィールドとしてIPを含めることができます。その後、ユーザーがすでにIPを送信していればサーバー側でフォームチェックを送信した後に、投稿の日付を保存し、1日以上経過したすべての投稿を消去します。

関連する問題