2017-01-11 2 views
0

Je souhaite valider mon formulaire cf7 avec une liste personnalisée dans la base de données. Donc, si l'utilisateur entre une valeur dans le champ qui n'est pas dans ma liste, le formulaire échouera à la validation. C'est une longue liste de 60 000 entrées.CF7 - Validation du champ base de données

Merci pour votre aide!

+0

Je recommande de demander cela sur http://wordpress.stackexchange.com/ Et d'ajouter un peu d'informations sur la liste. Où/comment cette liste est-elle stockée? – janw

Répondre

1

Vous pouvez utiliser le crochet de validation personnalisé de cf7. Vous aurez besoin de faire quelque chose comme ceci:

add_filter('wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2); 

function custom_email_confirmation_validation_filter($result, $tag) { 
$tag = new WPCF7_FormTag($tag); 

if ('your-email-confirm' == $tag->name) { 
    $your_email = isset($_POST['your-email']) ? trim($_POST['your-email']) : ''; 
    $your_email_confirm = isset($_POST['your-email-confirm']) ? trim($_POST['your-email-confirm']) : ''; 

    if ($your_email != $your_email_confirm) { 
     $result->invalidate($tag, "Are you sure this is the correct address?"); 
    } 
} 

return $result; 
} 

Ceci est une validation personnalisée de base sur le champ e-mail, vous devez personnaliser comme ceci:

add_filter('wpcf7_validate_email*', 'custom_field_validation', 20, 2); 

function custom_field_validation($result, $tag) { 
$tag = new WPCF7_FormTag($tag); 

global $wpdb; 
$searchTerm = $wpdb->get_row('select * from ' . $wpdb->prefix . 'name_of_table where name_of_field = "' . $_POST['given_value'] . '"'); 

if(!$searchTerm) 
    $result->invalidate($tag, "Value doesn't match"); 

return $result; 
} 

vous pouvez également utiliser wpcf7_validate_text au lieu de wpcf7_validate_mail si vous utilisez le champ de texte

+0

Merci, c'est génial - mais il s'applique à tous mes formulaires maintenant. Existe-t-il un moyen de modifier le code ci-dessus pour qu'il s'applique uniquement à un formulaire CF &? – dmt

+0

pourriez-vous introduire un contrôle lorsque vous appelez le filtre add_action. Si vous souhaitez appliquer ce filtre uniquement à une page donnée, vous pouvez le faire: global $ post; if ($ post-> ID == 1) add_filter ('wpcf7_validate_email *', 'custom_field_validation', 20, 2); où 1 est votre ID de poste ou de page – mariobros

+0

Je cherchais à obtenir l'ID de poste si utilisé l'URL pour vérifier une chaîne. Puis enveloppé la fonction entière dans une instruction if. Merci de votre aide! – dmt