Form semplice che salva nel database

12 set 2013, 19:55:40
Visualizzazioni: 27.8K
Voti: 4

Sto utilizzando un servizio di terze parti che effettua un controllo del mio database per le nuove voci all'interno di una tabella specifica. Tuttavia non sono riuscito a trovare un plugin per form semplice che invii i dati al database di WordPress all'interno di una tabella senza influenzare le funzionalità di WordPress. Il motivo è che il mio provider di hosting mi permette di avere un solo database.

Ho bisogno di utilizzare un form in WordPress che:

  1. Catturi nome, telefono, email inviati dall'utente finale
  2. Salvi nel database
  3. Reindirizzi l'utente a una pagina di conferma

Niente di elaborato in realtà e sebbene sarebbe ottimo vedere i risultati nell'amministrazione di WordPress, non è necessariamente richiesto dato che posso semplicemente usare phpMyAdmin.

In sintesi:

Ho bisogno di un semplice form HTML/PHP, dove posso semplicemente incollare il codice HTML su una pagina tramite l'amministrazione di WordPress usando la visualizzazione HTML/codice per le pagine. Quando un utente invia il form, questo salva i dati nel database di WordPress e poi reindirizza l'utente a una pagina di "ringraziamento".

5
Commenti

Scusa, non capisco esattamente cosa vuoi. Puoi aggiungere qualche dettaglio?

s_ha_dum s_ha_dum
12 set 2013 20:39:13

@s_ha_dum Ho modificato il mio post, spero che ora sia più chiaro. Tutto ciò di cui ho bisogno è un processore di moduli che salvi i dati nel database di WordPress. Quindi, in sintesi, inserire del codice HTML in qualsiasi pagina, l'utente invia i dati, che vengono salvati in una tabella unica del database WordPress.

Damainman Damainman
12 set 2013 21:03:53

Se vuoi salvarli nella tabella di WordPress, prova questo tutorial. Si integra con il plugin contact form 7

Sisir Sisir
12 set 2013 21:15:20

Kaiser, finora non ho provato nulla. La maggior parte dei plugin per moduli generavano moduli dall'aspetto specifico o inviavano i risultati via email e io volevo qualcosa che salvasse nel database con la possibilità di personalizzare il modulo per farlo apparire come desidero. Sisir, grazie per il suggerimento, ci darò un'occhiata.

Damainman Damainman
12 set 2013 21:32:30

Qui puoi trovare un tutorial per creare un semplice modulo di iscrizione alla newsletter. Immagino sia molto semplice, puoi imparare $wpdb per farlo funzionare per te, http://www.kvcodes.com/2016/02/simple-subscribe-form-wordpress/

Kvvaradha Kvvaradha
7 feb 2016 08:22:39
Tutte le risposte alla domanda 2
5

Da quello che posso capire, hai già la tabella nel tuo database.

Non so come l'hai chiamata, ma una buona pratica (per me una pratica obbligatoria) è nominarla con lo stesso prefisso delle tabelle di WordPress, quello impostato nel file wp-config.php.

Non dici neanche come è strutturata questa tabella, ma immagino sia qualcosa del tipo:

ID (integer,primary,autoincrement) | name (varchar) | phone (varchar) | email (varchar)

Puoi aggiungere uno shortcode che stampi il form. Nel tuo functions.php aggiungi:

add_action('init', function() {
  add_shortcode('userform', 'print_user_form');
});

function print_user_form() {
  echo '<form method="POST">';
  wp_nonce_field('user_info', 'user_info_nonce', true, true);
  ?>

  Tutti i tuoi campi del form (nome, email, telefono) vanno qui.  

<?php
  submit_button('Invia Dati');
  echo '</form>';
}

Ora crea semplicemente un articolo o una pagina nel pannello di controllo di wp e aggiungi [userform]: il form viene magicamente stampato nella pagina.

Come puoi vedere non ho aggiunto l'attributo action al form, in questo modo il form invia i dati POST alla stessa pagina.

Ora devi salvare i dati. Aggiungi un'azione su un hook early, controlla la presenza di $_POST, verifica il nonce e salva i tuoi dati:

add_action('template_redirect', function() {
   if ( ( is_single() || is_page() ) &&
        isset($_POST[user_info_nonce]) &&
        wp_verify_nonce($_POST[user_info_nonce], 'user_info')
    ) {
      // dovresti fare la validazione prima di salvare i dati nel db.
      // Non scriverò la funzione di validazione, è fuori dallo scopo di questa risposta
      $pass_validation = validate_user_data($_POST);
      if ( $pass_validation ) {
        $data = array(
          'name' => $_POST['name'],
          'email' => $_POST['email'],
          'phone' => $_POST['phone'],
        );
        global $wpdb;
        // se hai seguito il mio suggerimento di nominare la tua tabella usando il prefisso di wordpress
        $table_name = $wpdb->prefix . 'my_custom_table';
        // la prossima riga inserirà i dati
        $wpdb->insert($table_name, $data, '%s'); 
        // se vuoi recuperare il valore ID della riga appena inserita usa
        $rowid = $wpdb->insert_id;
        // dopo l'inserimento dobbiamo reindirizzare l'utente
        // Ti suggerisco di creare un'altra pagina e intitolarla "Grazie"
        // se lo fai:
        $redirect_page = get_page_by_title('Grazie') ? : get_queried_object();
        // la riga precedente se la pagina intitolata 'Grazie' non è trovata imposta la pagina corrente
        // come pagina di reindirizzamento. La prossima riga ottiene l'url della pagina di reindirizzamento:
        $redirect_url = get_permalink( $redirect_page );
        // ora reindirizza
        wp_safe_redirect( $redirect_url );
        // e ferma php
        exit();
      }
   }
});

Il codice è grezzo, ma dovrebbe essere un valido punto di partenza. I commenti inline dovrebbero aiutarti a capire il flusso di lavoro.

Assicurati di leggere la documentazione:

12 set 2013 21:20:41
Commenti

Grazie per la risposta estremamente dettagliata. C'è molto da digerire, ti terrò aggiornato sui miei risultati e grazie ancora.

Damainman Damainman
12 set 2013 21:33:15

Domande rapide: 1. Se avessi bisogno di più di un modulo, c'è un modo per aggiungere un nome allo shortcode come [userform:FormA] o [userform:Contact] che aggiungerebbe FormA alla classe ID del campo del form html oltre a inserire FormA in un campo nascosto nel form? 2. Per il secondo blocco di codice, andrebbe inserito anche nel file functions.php? 3. Quale parte del secondo esempio di codice fa sì che WordPress sappia di eseguire quella funzionalità solo sui form creati con questo metodo? Non vedo un modo per verificare che l'invio del form provenga dal form creato tramite lo shortcode.

Damainman Damainman
12 set 2013 22:32:36

(1) ciò di cui hai bisogno sono gli shortcode atts utilizzandoli puoi personalizzare il form come vuoi, vedi la documentazione di add_shortcode linkata nella risposta. (2) Sì. Il codice che inizia con add_filter o add_action devi creare un plugin per contenerlo o inserirlo in functions.php: dipende se vuoi/puoi perdere quella funzionalità quando cambi tema. (3) il motivo d'essere di wp_verify_nonce è proprio questo. Verifica una variabile $_POST (creata da wp_nonce_field) che contiene un valore cifrato creato a partire da una stringa semplice, in questo caso 'user_info'. Ancora una volta, vedi i link alla documentazione alla fine della risposta. @Damainman

gmazzap gmazzap
12 set 2013 23:17:33

domanda veloce, hai un tag di chiusura php in cima e un tag di apertura php verso il fondo della tua funzione shortcode. Puoi verificare perché è impostato così?

Damainman Damainman
13 set 2013 00:23:36

@Damainman "All your form inputs (name, email, phone) goes here." è pensato per essere un segnaposto per la parte html del modulo, quindi chiudo i tag php prima e li riapro dopo per evitare una lunga e brutta successione di echo. Scrivi semplicemente l'html lì come faresti normalmente.

gmazzap gmazzap
13 set 2013 00:35:04
0

Una cosa da tenere in considerazione, NAME è una parola riservata di WordPress, se utilizzi un campo chiamato name, quando invii il tuo modulo, otterrai un errore 404 pagina non trovata.

30 lug 2014 18:18:34