2017-12-22 6 views
0

Obwohl der folgende Code aus RSForm, das Tool, das ich derzeit für meine Formulare verwende, stammt, glaube ich, dass meine Frage mit reinem PHP-Kenntnisse gelöst werden kann, obwohl mein Kampf nicht von überall kommt Hier.Begrenzen Formularübergabe für Benutzer pro Seite

Gibt es eine Möglichkeit, den Benutzer zu begrenzen, die Form eine bestimmte Anzahl von Zeiten in bestimmten Seiten, wo meine Form zeigt zu beantworten?

Ich habe die gleiche Form auf vielen Seiten recycelt und ich wünschte, die Benutzer könnten nur einmal pro Seite beantworten. Ist das überhaupt möglich?

habe ich diesen Code, der bereits erfolgreich die Anzahl der Male begrenzt ich jeden Benutzer wünschen, das Formular senden zu können, aber wie kann ich sie nur einschränken, wenn sie die Form in bestimmten Seiten beantworten? Das Ergebnis, das ich wünsche, ist, dass sie das gleiche Formular nur einmal pro Seite beantworten können, wo sie das Formular finden.

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

Gibt es das überhaupt anpassen zu beschränken, wenn das Formular auf der gleichen Seite gestellt wird?


EDIT:

Diese Formen werden immer auf K2 Artikelseiten und ich dachte, dass ich die Artikel-ID mit diesem Code erhalten können:

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

Ich denke, ich kann Das ist die Bedingung, die ich vermisse. Ich könnte die Einreichung mit der K2 ID als eine andere Seite eingrenzen. Kann mir jemand helfen, dies zu tun? Wie würde ich diese Bedingung einfügen?

Antwort

0

Sie müssen einige PHP-Server-Variablen verwenden.

Ich würde ein verstecktes Feld in das Formular einfügen und es $ _SERVER ['REQUEST_URI'] als Wert in der Einreichung selbst protokollieren. Wenn Sie Abfragezeichenfolgen haben, müssen Sie möglicherweise auch $ _SERVER ['QUERY_STRING'] verwenden.

In Ihrem Code eine Variable gibt und es verwenden, wie sie in Ihrer WHERE für Ihre Anfrage Bewerbungen zurück zu kehren, wo von dieser URL.

+0

ich bearbeiten meinen Beitrag zu zeigen, dass ich K2 Artikel bin mit, die Vorlage zu begrenzen, könnte vielleicht im Skript verwendet werden. Glauben Sie, dass Sie mir helfen können, diese Informationen im "Wo" anzuwenden? Es tut mir leid, aber ich bin ein Anfänger mit PHP. –

0

Sie könnten IP als ein Feld umfassen in der Datenbank, dann, nachdem der Benutzer auf der Serverseite die Form Prüfung einreicht, ob das IP bereits etwas geschrieben. Speichern Sie das Datum der Einreichung und löschen Sie jede Einreichung, die älter als ein Tag ist.

Verwandte Themen