• 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


  • Moderatore

    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.


  • Moderatore

    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:
    • 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 🙂