it-swarm.com.de

Einfaches Formular, das in der Datenbank gespeichert wird

Ich verwende einen Drittanbieter-Service, der meine Datenbank nach neuen Einträgen in einer bestimmten Tabelle durchsucht. Es ist mir jedoch nicht gelungen, ein einfaches Formular-Plugin zu finden, das Daten an die WordPress-Datenbank innerhalb einer Tabelle sendet, die die WordPress-Funktionalität nicht beeinträchtigt. Der Grund ist, dass mein Hosting-Provider nur eine Datenbank zulässt.

Ich muss ein Formular in meinem WordPress verwenden, das:

  1. Erfasst den Namen, das Telefon und die E-Mail-Adresse, die vom Endbenutzer gesendet wurden
  2. Speichern Sie in der Datenbank
  3. Leiten Sie den Benutzer zur Bestätigungsseite weiter.

Eigentlich nichts Aufwändiges und obwohl es toll wäre, die Ergebnisse in der WordPress-Administration zu sehen, ist es nicht unbedingt erforderlich, da ich nur myphpadmin verwenden kann.

In Summe:

Ich benötige ein einfaches HTML/PHP-Formular, in das ich einfach das HTML-Formular über die WordPress-Administration in der HTML/Code-Ansicht für Seiten auf einer Seite einfügen kann. Wenn ein Benutzer das Formular absendet, speichert er es in der WordPress-Datenbank und leitet den Benutzer dann auf eine "Danke" -Seite weiter.

4
Damainman

Soweit ich weiß, haben Sie die Tabelle bereits in Ihrer Datenbank.

Ich weiß nicht, wie Sie es benannt haben, aber es ist eine bewährte Methode (für mich ein Muss), es mit demselben Tabellenpräfix von WordPress zu benennen, das in wp-config.php festgelegt ist.

Sie sagen auch nicht, wie diese Tabelle aufgebaut ist, aber ich denke, es ist ungefähr so:

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

Sie können einen Shortcode hinzufügen, mit dem das Formular gedruckt wird. Fügen Sie in Ihrem functions.php Folgendes hinzu:

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

  All your form inputs (name, email, phone) goes here.  

<?php
  submit_button('Send Data');
  echo '</form>';
}

Jetzt erstelle einfach einen Beitrag oder eine Seite in wp dashboard und füge einfach [userform] hinzu: das Formular ist magisch printend in der Seite.

Wie Sie sehen, habe ich dem Formular das Aktionsattribut nicht hinzugefügt. Auf diese Weise sendet das Formular Post-Daten an dieselbe Seite.

Jetzt müssen Sie Daten speichern. füge eine Aktion an einem frühen Haken hinzu, suche den $_POST, überprüfe die Nonce und speichere deine Daten:

add_action('template_redirect', function() {
   if ( ( is_single() || is_page() ) &&
        isset($_POST[user_info_nonce]) &&
        wp_verify_nonce($_POST[user_info_nonce], 'user_info')
    ) {
      // you should do the validation before save data in db.
      // I will not write the validation function, is out of scope of this answer
      $pass_validation = validate_user_data($_POST);
      if ( $pass_validation ) {
        $data = array(
          'name' => $_POST['name'],
          'email' => $_POST['email'],
          'phone' => $_POST['phone'],
        );
        global $wpdb;
        // if you have followed my suggestion to name your table using wordpress prefix
        $table_name = $wpdb->prefix . 'my_custom_table';
        // next line will insert the data
        $wpdb->insert($table_name, $data, '%s'); 
        // if you want to retrieve the ID value for the just inserted row use
        $rowid = $wpdb->insert_id;
        // after we insert we have to redirect user
        // I sugest you to cretae another page and title it "Thank You"
        // if you do so:
        $redirect_page = get_page_by_title('Thank You') ? : get_queried_object();
        // previous line if page titled 'Thank You' is not found set the current page
        // as the redirection page. Next line get the url of redirect page:
        $redirect_url = get_permalink( $redirect_page );
        // now redirect
        wp_safe_redirect( $redirect_url );
        // and stop php
        exit();
      }
   }
});

Der Code ist grob, sollte aber ein gültiger Ausgangspunkt sein. Inline-Kommentare sollen Ihnen helfen, den Workflow zu verstehen.

Lesen Sie unbedingt die Dokumente:

6
gmazzap

Eine zu berücksichtigende Sache, NAME, ist ein reserviertes WordPress-Wort. Wenn Sie ein Feld mit dem Namen name verwenden, erhalten Sie beim Absenden Ihres Formulars den Fehler 404 nicht gefunden.

1
Eivar Armero