How do I allow only 1 form submission per IP address?

The Quform WordPress v2 documentation is not yet finished. Please post on the forums if you have any questions in the mean time.

Click here to visit the complete documentation for Quform 1.x

Add the following code to the theme functions.php file or create a plugin for it.

12
3
4
5
6
7
8
9
10
11
12
13
14
15
1617
18
19
20
21
22
add_filter('quform_pre_validate_1', function (array $result, Quform_Form $form) {    global $wpdb;
    $repository = Quform::getService('repository');
 
    $row = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM " . $repository->getEntriesTableName() . " WHERE ip = %s AND form_id = %d",
        Quform::getClientIp(),
        $form->getId()
    ), ARRAY_A);
 
    if (is_array($row)) {
        $result = array(
            'type' => 'error',
            'error' => array(
                'enabled' => true,
                'content' => 'Only one submission is allowed'            )
        );
    }
 
    return $result;
}, 10, 2);
add_filter('quform_pre_validate_1', function (array $result, Quform_Form $form) {
    global $wpdb;
    $repository = Quform::getService('repository');

    $row = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM " . $repository->getEntriesTableName() . " WHERE ip = %s AND form_id = %d",
        Quform::getClientIp(),
        $form->getId()
    ), ARRAY_A);

    if (is_array($row)) {
        $result = array(
            'type' => 'error',
            'error' => array(
                'enabled' => true,
                'content' => 'Only one submission is allowed'
            )
        );
    }

    return $result;
}, 10, 2);
  • On line 1, replace the number 1 with the form ID
  • On line 16 replace the text Only one submission is allowed with the error message you want to display
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1617
18
19
20
21
22
23
function my_check_submission_ip(array $result, Quform_Form $form) {
    global $wpdb;
    $repository = Quform::getService('repository');
 
    $row = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM " . $repository->getEntriesTableName() . " WHERE ip = %s AND form_id = %d",
        Quform::getClientIp(),
        $form->getId()
    ), ARRAY_A);
 
    if (is_array($row)) {
        $result = array(
            'type' => 'error',
            'error' => array(
                'enabled' => true,
                'content' => 'Only one submission is allowed'            )
        );
    }
 
    return $result;
}
add_filter('quform_pre_validate_1', 'my_check_submission_ip', 10, 2);
function my_check_submission_ip(array $result, Quform_Form $form) {
    global $wpdb;
    $repository = Quform::getService('repository');

    $row = $wpdb->get_row($wpdb->prepare(
        "SELECT * FROM " . $repository->getEntriesTableName() . " WHERE ip = %s AND form_id = %d",
        Quform::getClientIp(),
        $form->getId()
    ), ARRAY_A);

    if (is_array($row)) {
        $result = array(
            'type' => 'error',
            'error' => array(
                'enabled' => true,
                'content' => 'Only one submission is allowed'
            )
        );
    }

    return $result;
}
add_filter('quform_pre_validate_1', 'my_check_submission_ip', 10, 2);
  • On line 16 replace the text Only one submission is allowed with the error message you want to display
  • On line 23, replace the number 1 with the form ID

Still having trouble? Head over to the forums.

Forums