Formular simplu care salvează în baza de date

12 sept. 2013, 19:55:40
Vizualizări: 27.8K
Voturi: 4

Folosesc un serviciu terț care verifică baza mea de date pentru intrări noi într-un tabel specific. Cu toate acestea, nu am reușit să găsesc un plugin simplu pentru formulare care să trimită date în baza de date WordPress într-un tabel care să nu afecteze funcționalitatea WordPress. Motivul este că furnizorul meu de hosting îmi permite doar o singură bază de date.

Am nevoie să folosesc un formular în WordPress care:

  1. Captează numele, telefonul și emailul trimis de utilizatorul final
  2. Salvează în baza de date
  3. Redirecționează utilizatorul către o pagină de confirmare

Nimic elaborat de fapt și deși ar fi grozav să văd rezultatele în administrarea WordPress, nu este neapărat necesar deoarece pot folosi phpMyAdmin.

Pe scurt:

Am nevoie de un formular simplu html/php, unde pot doar să lipesc codul HTML al formularului pe o pagină prin intermediul administrării WordPress prin vizualizarea html/cod pentru pagini. Când un utilizator trimite formularul, acesta salvează datele în baza de date WordPress și apoi redirecționează utilizatorul către o pagină de "mulțumire".

5
Comentarii

Îmi pare rău, nu înțeleg exact ce dorești. Poți să adaugi mai multe detalii?

s_ha_dum s_ha_dum
12 sept. 2013 20:39:13

@s_ha_dum Am editat postarea mea, sper că e mai clar acum. Tot ce am nevoie este un procesor de formular care să salveze în baza de date WordPress. Deci, practic, să pot pune cod HTML pe orice pagină, utilizatorul trimite datele, iar acestea sunt salvate în baza de date WordPress într-un tabel unic.

Damainman Damainman
12 sept. 2013 21:03:53

dacă vrei să le salvezi în tabela WordPress. Încearcă acest tutorial Se integrează cu plugin-ul contact form 7

Sisir Sisir
12 sept. 2013 21:15:20

Kaiser, până acum nu am încercat nimic. Majoritatea plugin-urilor de formulare fie generau formulare cu un aspect specific, fie trimiteau rezultatele prin email, iar eu am vrut ceva care să salveze în baza de date, cu posibilitatea de a personaliza formularul să arate așa cum aleg. Sisir, îți mulțumesc pentru sugestie, o voi analiza.

Damainman Damainman
12 sept. 2013 21:32:30

Aici poți găsi un tutorial pentru a crea un formular simplu de înscriere la newsletter. Cred că este foarte simplu, poți învăța $wpdb pentru a-l face să funcționeze pentru tine, http://www.kvcodes.com/2016/02/simple-subscribe-form-wordpress/

Kvvaradha Kvvaradha
7 feb. 2016 08:22:39
Toate răspunsurile la întrebare 2
5

Din câte înțeleg, deja ai tabelul în baza ta de date.

Nu știu cum l-ai denumit, dar o practică recomandată (pentru mine, una obligatorie) este să-l numești cu același prefix de tabel ca în WordPress, acela setat în wp-config.php.

De asemenea, nu menționezi cum este structurat acest tabel, dar presupun că arată cam așa:

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

Poți adăuga un shortcode care să afișeze formularul. În fișierul tău functions.php adaugă:

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);
  ?>

  Toate câmpurile tale din formular (nume, email, telefon) merg aici.  

<?php
  submit_button('Trimite Date');
  echo '</form>';
}

Acum creează un articol sau o pagină în panoul de administrare WordPress și pur și simplu adaugă [userform]: formularul va fi afișat magic în pagină.

După cum poți observa, nu am adăugat atributul action la formular, astfel formularul trimite datele POST către aceeași pagină.

Acum trebuie să salvezi datele. Adaugă o acțiune într-un hook timpuriu, verifică $_POST, verifică nonce-ul și salvează datele:

add_action('template_redirect', function() {
   if ( ( is_single() || is_page() ) &&
        isset($_POST[user_info_nonce]) &&
        wp_verify_nonce($_POST[user_info_nonce], 'user_info')
    ) {
      // ar trebui să faci validarea înainte de a salva datele în baza de date.
      // Nu voi scrie funcția de validare, este în afara domeniului acestui răspuns
      $pass_validation = validate_user_data($_POST);
      if ( $pass_validation ) {
        $data = array(
          'name' => $_POST['name'],
          'email' => $_POST['email'],
          'phone' => $_POST['phone'],
        );
        global $wpdb;
        // dacă ai urmat sugestia mea de a denumi tabelul folosind prefixul WordPress
        $table_name = $wpdb->prefix . 'my_custom_table';
        // următoarea linie va insera datele
        $wpdb->insert($table_name, $data, '%s'); 
        // dacă vrei să obții valoarea ID-ului pentru rândul tocmai inserat, folosește
        $rowid = $wpdb->insert_id;
        // după inserare, trebuie să redirecționăm utilizatorul
        // Îți sugerez să creezi o altă pagină și să o intitulezi "Mulțumim"
        // dacă faci asta:
        $redirect_page = get_page_by_title('Mulțumim') ? : get_queried_object();
        // linia anterioară, dacă pagina intitulată 'Mulțumim' nu este găsită, setează pagina curentă
        // ca pagină de redirecționare. Următoarea linie obține URL-ul paginii de redirecționare:
        $redirect_url = get_permalink( $redirect_page );
        // acum redirecționează
        wp_safe_redirect( $redirect_url );
        // și oprește PHP
        exit();
      }
   }
});

Codul este simplist, dar ar trebui să fie un punct de plecare valid. Comentariile inline ar trebui să te ajute să înțelegi fluxul de lucru.

Asigură-te că citești documentația:

12 sept. 2013 21:20:41
Comentarii

Mulțumesc pentru răspunsul extrem de detaliat. E foarte mult de digerat, voi reveni cu rezultatele mele și vă mulțumesc din nou.

Damainman Damainman
12 sept. 2013 21:33:15

Întrebări rapide: 1. Dacă aș avea nevoie de mai mult de un formular, există vreo modalitate de a adăuga un nume la shortcode, cum ar fi [userform:FormA] sau [userform:Contact], care ar adăuga FormA la clasa ID a câmpului formularului HTML, precum și ar include FormA într-un câmp ascuns în formular? 2. Pentru al doilea bloc de cod, acesta ar trebui pus și în fișierul functions.php? 3. Ce parte din al doilea exemplu de cod face ca WordPress să știe să execute această funcționalitate doar pe formularele create prin această metodă? Nu văd nicio modalitate prin care să verifice dacă trimiterea formularului provine de la formularul creat prin shortcode.

Damainman Damainman
12 sept. 2013 22:32:36

(1) ceea ce ai nevoie este shortcode atts folosindu-le poți personaliza formularul după cum dorești, vezi documentația add_shortcode linkată în răspuns. (2) Da. Codul care începe cu add_filter sau add_action trebuie să-l incluzi într-un plugin sau în functions.php: depinde dacă vrei/poți pierde această funcționalitate la schimbarea temei. (3) motivul pentru wp_verify_nonce este exact acesta. Verifică o variabilă $_POST (creată de wp_nonce_field) care conține o valoare criptată generată dintr-un șir simplu, în acest caz 'user_info'. Consultă din nou documentația linkată la sfârșitul răspunsului. @Damainman

gmazzap gmazzap
12 sept. 2013 23:17:33

o întrebare rapidă, ai un tag de închidere php în partea de sus și un tag de deschidere php spre finalul funcției tale de shortcode. Poți verifica de ce este configurat astfel?

Damainman Damainman
13 sept. 2013 00:23:36

@Damainman "Toate câmpurile tale de formular (nume, email, telefon) merg aici." este menit să fie un substituent pentru partea de html a formularului, așa că închid tag-urile php înainte și le redeschid după pentru a evita o succesiune lungă și urâtă de echo. Pur și simplu scrie html acolo așa cum faci de obicei.

gmazzap gmazzap
13 sept. 2013 00:35:04
0

Un lucru de luat în considerare, NAME este un cuvânt rezervat în WordPress. Dacă folosești un câmp numit "name", atunci când vei trimite formularul, vei obține o eroare 404 - pagină negăsită.

30 iul. 2014 18:18:34