- Home
- Categorie
- Coding e Sistemistica
- WordPress
- Contact Form 7 con verifica invio
-
Contact Form 7 con verifica invio
Ciao a tutti.
Vorrei salvare tutti i dati inviati tramite form CF7 in un database SQL e per questo ho visto che c'è il plugin Flamingo di CF7.
Ho la necessità di impedire l'invio del form se viene inserito in un campo (testo) una stringa che è già presente nel database.In pratica gli utenti possono inserire nel form il valore ABC e questo verrà salvato in una colonna del mio DB SQL tramite Flamingo.
Se arriva un altro utente non deve poter inserire ABC come valore perchè è già stato utilizzato da un altro utente in precedenza.Ho visto che con la seguente stringa posso andare ad agire sulla tipologia di campo di CF7:
[PHP]add_filter( 'wpcf7_validate_email', 'custom_email_validation', 10, 2 );[/PHP]Io vorrei agire invece solo su un campo text preciso del mio form.
Ho sempre utilizzato questo codice per fare il controllo del nome:
[PHP]
add_filter( 'wpcf7_validate_text*', 'custom_name_validation', 10, 2 );
function custom_name_validation( $result, $tag ) {$type = $tag['type']; $name = $tag['name'];
if($type == 'text*' && $_POST[$name] != ''){ if(!preg_match('/^[A-Za-z. ]+$/', $_POST[$name])){ $result->invalidate( $name, 'Il nome inserito non è valido. Controlla.' ); } } return $result;}[/PHP]Come potrei adattarlo per agire sul campo singolo e non sulla tipologia text ed inoltre come potrei cambiare il controllo della funzione preg_match con un controllo nel database SQL sulla tabella di Flamingo (che devo ancora individuare).
Grazie mille
-
Ciao
io per salvare i messaggi di "Contact Form 7" uso "Contact Form CFDB7" di Di Arshid, fammi sapere se risolve il tuo problema. La seconda parte del tuo post non l'ho capita.
-
Ciao igorredaelli,
quello che stai chiedendo di sicuro non è impossibile, ma neanche così semplice.
Per prima cosa dovresti escludere ulteriori plugin oltre a CF7 che personalmente non utilizzerei neanche per ciò che devi fare. Bypassando cosa farei io, l'approccio alla tua soluzione è la seguente:- Intercetti il submit di CF7 tramite apposito codice js (lo trovi nella guida sul rispettivo sito)
- Dal js, prima mandarlo in completa esecuzione esegui il tuo controllo:
- Il contenuto ABC esiste?
- Fermo l'esecuzione e scrivo un alert per l'utente
- Non esiste?
- Scrivo nel database
Come realizzare tale processo? Purtroppo devi scrivere parecchio codice e fare diversi test. Devi crearti due funzioni in PHP:
- Scrivo nel database
- Il contenuto ABC esiste?
- La funzione di check
- La funzione di scrittura
Le funzioni devono essere richiamate tramite POST HttpRequest via Ajax.
Ti lascio tutte le guide del caso, poi inizi a realizzare il tutto e se qualcosa non ti torna, vieni qui e chiedi che vediamo che si può fare
Wordpress Ajax in plugins https://codex.wordpress.org/AJAX_in_Plugins
Riferimento alla variabile globale $wpdb per le connessioni al database: https://codex.wordpress.org/it:Riferimento_classi/wpdb
Riferimento al redirect after sent di CF7 che puoi rielaborare a piacere: https://contactform7.com/redirecting-to-another-url-after-submissions/Fammi sapere