2017-12-22 53 views
0

다음 코드는 RSForm에서 가져온 것이지만 현재 양식에 사용하고있는 도구이지만 순수한 PHP 지식으로 해결할 수 있다고 생각합니다. 이리.제한 양식 제출 페이지 당 사용자 수

양식이 표시되는 특정 페이지에서 특정 횟수만큼 양식에 응답하도록 사용자를 제한 할 수있는 방법이 있습니까?

많은 페이지에서 동일한 양식이 재생되며 사용자가 페이지 당 한 번만 대답 할 수 있기를 바랍니다. 그게 가능합니까?

각 사용자가 양식을 제출할 수 있기를 원하는 횟수를 이미 성공적으로 제한 한이 코드가 있는데 특정 페이지의 양식에 응답하는 경우 어떻게 제한합니까? 내가 원하는 결과는 양식을 찾은 페이지 당 한 번만 같은 양식에 응답 할 수 있다는 것입니다.

// 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.'; 
} 

는 양식이 같은 페이지에서 제출 한 경우에만이 제한 적응 어쨌든이 있나요?


편집 :

이 양식은 항상 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를 제출 한 경우 사용자가 서버 측에서 양식 검사를 제출 한 후에 사용할 수 있습니다. 제출 날짜를 저장하고 하루 이상 지난 모든 제출을 지 웁니다.