首页 > 解决方案 > 重力表单根据 mysql 表值验证字段条目值

问题描述

基本上,我有一张包含 800 万个促销代码的表格。参赛者将在重力表格上输入代码,然后将查询数据库以获取代码,一旦在那里,代码将被标记为已使用,并且应将参赛者重定向到参赛表格。如果不是,表格应该告诉用户代码无效。这是我从其他来源提取的代码,因为我不是编码员。但是,当我提交正确的代码时,它说不正确。任何帮助都将不胜感激,请记住我不是程序员

add_filter( 'gform_field_validation_4', 'validate_code' );
function validate_code($validation_result){
    $form = $validation_result['form'];
    foreach( $form['fields'] as &$field ) {
    if ( strpos( $field->cssClass, 'validate-code' ) === false ) {
        continue;
        }
    }
    $field_value = rgpost( "input_1" );
    $is_valid = is_code( $field_value );
    $validation_result['is_valid'] = false;
    $field->failed_validation = true;
    $field->validation_message = 'The code you have entered is not valid. Please enter another.';
    $validation_result['form'] = $form;
    return $validation_result;
}
function is_code($code){
    $info = 'mysql response';
require_once(ABSPATH . '/wp-config.php');
    $conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        echo 'Unable to connect to server, please use the back button in your browser and resubmit the form';
        exit();
    }
    $code = mysqli_real_escape_string($conn, $_POST['codes']);
    $sql_check = mysqli_query($conn, "SELECT * FROM entrycode WHERE codes = '$code' AND valid = 0");
    $sql_checkrows = mysqli_num_rows($sql_check);
    if ($sql_checkrows > 0) {
        $sql_update = "UPDATE entrycode SET used = 1 WHERE codes ='$code'";
        if (mysqli_query($conn, $sql_update)) {
            $info = mysqli_affected_rows($conn) . " Row updated.\n";
            $info = 'success';
            return true;
    } else {
        return false;
        }
        mysql_close($conn);
    }
}
add_filter('gform_confirmation_4', 'valid_invitation_confirmation', 10, 4);
function valid_invitation_confirmation($confirmation, $form, $lead, $ajax){
    // customize this URL - I send the code in the query string
    $success_url = 'https://sample.com/enter' . '/?code=' . $lead[1];
    $confirmation = array('redirect' => $success_url);
    return $confirmation;
    }

标签: mysqlwordpressgravityforms

解决方案


我仍然没有使用验证代码检查数据库,所有代码都返回无效代码消息

 add_filter('gform_validation_2', 'validate_code');
    GFCommon::log_debug( __METHOD__ . '(): The POST => ' . print_r( $_POST, true ) );
    function validate_code($validation_result){
        // this assumes the code is entered in field one on your form
        // change this input_ number if it's a different field
        if(!is_code_valid($_POST['input_1'])){
            $validation_result['is_valid'] = false;
            foreach($validation_result['form']['fields'] as &$field){
            // field 1 is the field where we want to show the validation message 
                if($field['id'] == 1){
                    $field['failed_validation'] = true;
                    $field['validation_message'] = 'The code you entered is invalid: please try again.';
                    break;
                }
            }
        }
        return $validation_result;
    }
    function is_code_valid($thiscode){
           GFCommon::log_debug( __METHOD__ . '(): The POST => ' . print_r( $_POST, true ) ); 
            global $wpdb;
            // Get match count (consider using transient ref table).
            
            $matched_codes = $wpdb->get_var(
                $wpdb->prepare(
                    "
                        SELECT sum(meta_value)
                        FROM $wpdb->entrycode
                        WHERE codes = %s
                        AND valid = 0
                    ",
                    $thiscode
                )
            );
        
            // If matches found , update table count?.
            if ( !empty ( $matched_codes ) ) {
                $wpdb->query( $wpdb->prepare( 
                    "
                        UPDATE $wpdb->entrycode 
                        SET used = %d
                        WHERE codes = %s
                    ",
                    1, 
                    $thiscode
                ) );        
                return true;
            }
        
            return false;
        
    }
    
    // doing this here because the redirect URL does not support variables or shortcodes
    // change the 70 here to your form ID
    add_filter('gform_confirmation_2', 'valid_invitation_confirmation', 10, 4);
    function valid_invitation_confirmation($confirmation, $form, $lead, $ajax){
        // customize this URL - I send the code in the query string
        $country = ($_POST['input_3']);
        $success_url = 'https://sample.com/enter' . '/?code=' .$lead[1] .'&country=' .$country;
        $confirmation = array('redirect' => $success_url);
        return $confirmation;
    }

推荐阅读