web-dev-qa-db-ja.com

データベースに保存する簡単なフォーム

特定のテーブル内の新しいエントリに対してデータベースのスクラブを実行するサードパーティのサービスを使用しています。しかし、WordPressの機能に影響を与えないような、テーブル内のWordPressデータベースにデータを送信する単純なフォームプラグインを見つけることができませんでした。その理由は、私のホスティングプロバイダは私に1つのデータベースしか許可していないからです。

私のワードプレスでは、次のようなフォームを使う必要があります。

  1. エンドユーザーによって送信された名前、電話、電子メールをキャプチャします。
  2. データベースに保存する
  3. 確認ページにユーザーをリダイレクトします。

それほど詳細なことは何もありませんし、wordpress管理で結果を見るのは素晴らしいことですが、myphpadminを使用できるので必ずしも必要ではありません。

要約すれば:

私は単純なhtml/phpフォームが必要です、そこで私はちょうどページのためのhtml/codeビューを通してワードプレス管理を通してページにフォームhtmlを貼り付けることができます。ユーザーがフォームを送信すると、Wordpressデータベースに保存され、次に "ありがとう"ページにユーザーがリダイレクトされます。

4
Damainman

私が理解できるのは、あなたがすでにあなたのデータベースにテーブルを持っているということです。

名前の付け方はわかりませんが、ベストプラクティス(必ずしなければならないことです)は、wp-config.phpに設定されているものと同じwordpressというプレフィックスを使用して名前を付けることです。

また、このテーブルがどのように構成されているかも説明していませんが、次のようになると思います。

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

フォームを印刷するためのショートコードを追加することができます。 functions.phpに以下を追加してください。

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

Wpダッシュボードで投稿またはページを作成し、[userform]を追加するだけです。フォームはページの 魔法のように printendです。

ご覧のとおり、formにaction属性を追加していません。このように、フォームは投稿データを同じページに送信します。

今、あなたはデータを保存しなければなりません。早い段階でアクションを追加し、$_POSTを探し、ナンスをチェックしてデータを保存します。

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

コードは大まかですが、有効な出発点になるはずです。インラインコメントは、ワークフローを理解するのに役立ちます。

必ず文書を読んでください。

6
gmazzap

考慮すべき1つのことは、NAMEは予約語で、Wordという名前のフィールドを使用すると、フォームを送信するときに404 not foundエラーが発生することです。

1
Eivar Armero