Form personalizzato che memorizza i dati nel database

26 dic 2012, 00:15:16
Visualizzazioni: 158K
Voti: 7

Non ho mai usato WordPress prima, ma ho molta esperienza di programmazione. La mia domanda è: come creare form personalizzati in WordPress?

Ho bisogno di creare un form dove un utente compila alcuni campi di input e al momento dell'invio i dati devono essere memorizzati nel database. Non ho bisogno di alcuna notifica al salvataggio.

Ho anche bisogno di interrogare i dati e ottenere l'output in una tabella HTML.

Grazie

1
Commenti

Ecco un esempio di dati utente.

fuxia fuxia
26 dic 2012 01:49:55
Tutte le risposte alla domanda 7
2

Ho trovato la soluzione al problema da solo. Vedi il codice qui sotto che farà esattamente quello che serve.

Inserisci il codice all'interno del tuo template personalizzato appena creato.

<?php
    if (!empty($_POST)) {
        global $wpdb;
        $table = wp_achord;
        $data = array(
            'name' => $_POST['yourname'],
            'chord'    => $_POST['chord']
        );
        $format = array(
            '%s',
            '%s'
        );
        $success=$wpdb->insert( $table, $data, $format );
        if($success){
            echo 'Dati salvati correttamente'; 
        }
    } else {
        ?>
        <form method="post">
            <input type="text" name="yourname">
            <textarea name="chord"></textarea>
            <input type="submit">
        </form>
        <?php 
    }  
?>
30 lug 2013 20:06:09
Commenti

Oh mio Dio. Non c'è nemmeno una singola forma di validazione.

Jürgen Paul Jürgen Paul
10 mag 2015 13:53:01

Questa soluzione è suscettibile ad attacchi di SQL injection. Per favore valida l'input.

Jon Winstanley Jon Winstanley
23 feb 2018 17:16:08
4

Il mio suggerimento:

Usa Contact Form 7 insieme a Contact Form DB. Puoi "progettare" il tuo form nel backend e inserirlo nel frontend tramite un semplice shortcode.

L'estensione Contact Form DB ti permette di salvare i dati nel database e ti offre shortcode per visualizzarli (oppure puoi interrogare direttamente il database se preferisci).

26 dic 2012 01:40:42
Commenti

Ho provato Contact Form 7 e sembra fantastico, ma ho alcune domande. È possibile aggiungere un identificatore incrementale come colonna alla tabella? Inoltre, ho bisogno di impostare i valori dei dropdown in base ai valori di una tabella. Non ho mai lavorato con un CMS prima d'ora e non so quanto si possa e si debba personalizzare da soli.

boje boje
26 dic 2012 22:48:44

@boje puoi farlo con l'estensione Post My CF7 Form, che riorganizza la tabella del dashboard di CF7, permettendoti di utilizzare le funzionalità standard di WP per aggiungere una colonna personalizzata alla tabella.

Aurovrata Aurovrata
17 ott 2016 11:25:52

Posso visualizzare i record di CF7 di un sito in un altro sito?

Mohammad Fareed Mohammad Fareed
29 mag 2017 13:30:01

Questa è ancora una soluzione valida. CFDB supporta ancora più plugin generatori di form.

mrmut mrmut
1 feb 2020 01:04:45
2

Ho intenzione di utilizzare questa soluzione, ma sembra essere molto personalizzata e questo potrebbe creare problemi con i temi e gli aggiornamenti?

27 dic 2012 00:48:07
Commenti

Secondo me, dovresti separare la logica dal file del template. Il metodo che gestisce i dati POST dovrebbe essere situato in functions.php e inizializzato da un hook di inizializzazione.

Per gestire solo i dati inviati per un template di pagina specifico, potresti verificare la presenza di un campo input nominato (opzionalmente nascosto) che sia unico per quel template. Potresti anche trarre vantaggio dall'uso di is_page_template()

estrar estrar
11 lug 2014 09:50:30

URL davvero utile

Rohit Rohit
3 gen 2020 08:26:33
6

Ci sono diversi modi. Per memorizzare i dati, come le opzioni nella tabella delle opzioni, l'API delle opzioni, è il posto giusto con una voce e un array come elemento di memorizzazione. Ma per memorizzare dati da utilizzare come post e ogni richiesta dal modulo è meglio salvarli anche come post. Anche qui ci sono diverse possibilità. Puoi salvare per diversi tipi di post. Il tipo predefinito è 'post' e puoi anche salvare in un tipo di post personalizzato. Utilizza la funzione wp_insert_post() per salvare per tutti i tipi di post dopo l'invio del modulo dagli utenti. Troverai risposte molto dettagliate qui su questa funzione, questo argomento e anche nella vastità del web. Puoi anche vedere un piccolo esempio in questa risposta 73653, che include allegati nel modulo.

26 dic 2012 01:39:57
Commenti

utilizzando 'wp_insert_post()' non è solo per i commenti. E se non lo è, perché è bene usarlo? Non capisco l'idea della tabella options. Una rapida ricerca su Google non mi aiuta :(

boje boje
26 dic 2012 22:59:09

La funzione wp_insert_post() non è per i commenti, è per il contenuto dei post, crea un nuovo post. Ho aggiornato la mia risposta ora, ero da mobile; non è proprio facile su WPSE. L'altra risposta con il suggerimento sui plugin è la stessa, Contact Form 7 o altri creano nuovi post, ma hai i requisiti di un plugin. Se vuoi controllare questo, anche il codice sorgente e hai abbastanza conoscenze di programmazione, allora un plugin personalizzato per creare post è la soluzione migliore.

bueltge bueltge
27 dic 2012 14:29:27

Grazie per il tuo aiuto finora Bueltge. La mia comprensione di wp_insertpost è che è una funzione di aiuto per inserire qualcosa in modo rapido e sicuro in una tabella del database. Se ho una tabella(nome=Corso) con queste colonne(id, nomecorso, partecipante, datainizio, datafine). Dove definisco il nome della tabella? Forse ho capito completamente male. Esempio di codice link

boje boje
28 dic 2012 11:50:09

No, la funzione crea dati nelle tabelle predefinite di WordPress; almeno in _posts e se hai allegati o metadati del post anche nelle altre tabelle, che sono in relazione con il post. Ma tu chiedi di salvare dati da un form in WordPress e penso che questo sia il modo migliore. Hai senza lavoro un'interfaccia utente con molte soluzioni per modificare e mantenere gli elementi del form. Se guardi il codice dal link del mio comportamento, allora vedi la soluzione.

bueltge bueltge
28 dic 2012 13:41:04

Grazie, penso di aver bisogno di leggere ancora un po' o trovare qualche tutorial per capire meglio l'impostazione

boje boje
28 dic 2012 14:02:56

Sì, come il mio link nell'altra risposta o un link dal web, come questo.

bueltge bueltge
28 dic 2012 14:27:08
Mostra i restanti 1 commenti
0

Potresti anche utilizzare l'ottimo plugin Contact Form 7 insieme all'estensione Post My CF7 Form che ti permetterà di salvare qualsiasi modulo personalizzato come post, incluse immagini come allegati in evidenza, e input di tipo select/checkbox/radio come tassonomie.

Il plugin Post My CF7 Form offre una ricca funzionalità che può essere sfruttata per personalizzare ulteriormente e modificare il modo in cui i tuoi moduli dovrebbero essere salvati. Esiste anche una sezione di documentazione dettagliata.

17 ott 2016 11:26:56
2
-1

La tua soluzione è buona e potrebbe funzionare molto bene. Tuttavia, ci sono alcune limitazioni. Ad esempio:

1) E per quanto riguarda la ricerca e l'ordinamento delle voci inviate tramite il tuo modulo? 2) Come si fa ad esportare i dati inseriti nel modulo in Excel, CSV o PDF? 3) E se volessi stampare i dati inseriti?

Tutto questo può essere ottenuto con i plugin Contact Form 7 + Save Contact Form 7.

Entrambi sono plugin gratuiti e ampiamente utilizzati: http://savecontactform7.com/ http://contactform7.com/

20 mag 2016 16:44:49
Commenti

Per favore dichiara la tua affiliazione e rendi la risposta specifica ai requisiti della domanda. Questo sembra più una pubblicità che una soluzione genuina.

Rarst Rarst
20 mag 2016 17:55:10

Concordo, questo sembra una pubblicità, e sono il proprietario di Save Contact Form 7. Ma la soluzione e la risposta si allineano perfettamente con i requisiti della domanda. Quindi, questo aiuterà sicuramente la persona che ha posto la domanda.

Nimblechapps Nimblechapps
22 mag 2016 10:34:37
0
-1
<?php
/**
Usa queste righe di codice, funzionano al 100%
 */
get_header();?> <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_contact;
            $data = array(
                'nome' => $_POST['aname'],
                'email'    => $_POST['aemail'],
                 'oggetto' => $_POST['asubject'],
                'messaggio'    => $_POST['amsg']
            );
            $format = array(
                '%s',
                '%s'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo 'dati salvati con successo' ; 
}
}
else   {
?>
        <form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
        <input type="text" name="aname" placeholder="Nome">
         <input type="text" name="aemail" placeholder="Email">
          <input type="text" name="asubject" placeholder="Oggetto">
        <textarea type="text" name="amsg" placeholder="Messaggio"></textarea>

        <input type="submit" value="Invia">
        </form>

       <?php }  ?>
7 feb 2017 14:55:43