web-dev-qa-db-fra.com

Formulaire simple qui enregistre dans la base de données

J'utilise un service tiers qui effectue un nettoyage de ma base de données pour les nouvelles entrées d'une table spécifique. Cependant, je suis incapable de trouver un simple plugin de formulaire qui soumet des données à la base de données wordpress à l'intérieur d'une table qui n'affectera aucune des fonctionnalités de wordpress. La raison est que mon fournisseur d'hébergement ne me permet qu'une seule base de données.

J'ai besoin d'utiliser un formulaire dans mon wordpress qui:

  1. Capture le nom, le téléphone, le courrier électronique envoyé par l'utilisateur final
  2. Enregistrer dans la base de données
  3. Rediriger l'utilisateur vers la page de confirmation.

Rien de vraiment compliqué et bien que ce soit génial de voir les résultats dans l’administration de wordpress, cela n’est pas forcément requis puisque je peux simplement utiliser myphpadmin.

En résumé:

J'ai besoin d'un formulaire html/php simple, où je peux simplement coller le formulaire html sur une page via l'administration wordpress via la vue html/code pour les pages. Lorsqu'un utilisateur soumet le formulaire, il l'enregistre dans la base de données wordpress, puis le redirige vers une page de remerciement.

4
Damainman

Pour ce que je peux comprendre, vous avez déjà la table dans votre base de données.

Je ne sais pas comment vous l'avez nommé, mais une bonne pratique (pour moi, une pratique incontournable) est de le nommer avec le même préfixe de table que wordpress, c'est celui défini dans wp-config.php.

Vous ne dites pas non plus comment cette table est structurée, mais je suppose que c'est quelque chose comme:

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

Vous pouvez ajouter un shortcode qui imprime le formulaire. Dans votre functions.php, ajoutez:

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>';
}

Créez maintenant un article ou une page dans le tableau de bord wp et ajoutez simplement [userform]: le formulaire est comme par magie / printend dans la page.

Comme vous pouvez le constater, je n'ai pas ajouté l'attribut d'action à la forme, le formulaire envoie ainsi les données de publication à la même page.

Maintenant, vous devez sauvegarder les données. ajoutez une action sur un hook précédent, cherchez le $_POST, vérifiez le nonce et sauvegardez vos données:

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();
      }
   }
});

Le code est approximatif, mais devrait constituer un bon point de départ. Les commentaires en ligne devraient vous aider à comprendre le flux de travail.

Assurez-vous de lire les documents:

6
gmazzap

Une chose à prendre en compte, NAME est une wordpress réservée Word, si vous utilisez un champ appelé nom, lorsque vous soumettez votre formulaire, vous obtiendrez une erreur 404 non trouvée.

1
Eivar Armero