web-dev-qa-db-ja.com

カスタムテーブルへのデータの挿入

Wpデータベースのカスタムテーブルにデータを送信するためのカスタム入力テーブルを作成しようとしています。自分のスクリプトに何かをさせることはできません。ユーザーは、ウォッカやウイスキーなどのお酒の種類を入力して説明を入力し、それをデータベースに送信します。ここで、ワードプレスデータベース内にカスタムテーブルがあります。私はWordPressのページにメインのWordPressフォルダにあるsetLiquorType.phpと呼ばれるファイルにHTMLコードとphpを持っています。

HTMLフォーム

<form method = "post" action = "setLiquorType.php">
Add a New Liquor Type</br></br>
<p>Name: <input type="text" name="name"/></p>
<p>Description <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Submit"/>
</form>
</br>

私のphpスクリプト

<?php 
$name = $_POST['name'];
$global $wpdb, $name, $description;
$table_name = $wpdb->prefix . "Liquor Type";
$wpdb->insert($table_name, array(
                            'lq_name' => $lq_name,
                            'description' => $lq_descrip
                            ),array(
                            '%s',
                            '%d')
    );
}
?>

任意の助けは素晴らしいだろう

4
Matthew

あなたはあなたのフォームがメインフォルダにあると言いましたか? action=""には適切なURLを設定する必要があると思います。あなたが試すことができます:

action="<?php echo site_url() . '/setLiquorType.php'; ?>"

フォームコードをfunctions.phpに入れてからformを離れることがベストプラクティスです。 action = "" 空の。その後、フォームが送信されたときにフォーム機能を起動できます。

あなたのフォームのHTML:

<form method = "post" action = ""> //edited form action

      <h3>Add a New Liquor Type</h3> //wrapped title with <h3> tags and removed <br> because h3 element will have padding that will separate it from form (if not provided in your style.css it will be assigned by the browser)
      <p>  //wraping field with paragraph to generate automatic space between them without styling it
         <label for="name">Name:</label>  //removed <p> element and used <label> instead
         <input type="text" name="name"/>
      </p>
      <p>
         <label for="description">Description</label>
         <input type="text" name="description"/>
      </p>
      <hr> //replaced unnecessary --- lines 
      <input type="submit" value="Submit" name="liquor_submit"/>  // added name attribute that will be used to check if the form is submitted
</form>
</br>

これで、functions.phpに次のようなものを追加することができます。

    //setting up the form
    function themename_add_new_liquor() {

      $name         = $_POST['name'];
      $description  = $_POST['description'];  //You forgot to collect data from "description" field

      global $wpdb; //removed $name and $description there is no need to assign them to a global variable
      $table_name = $wpdb->prefix . "liquor_type"; //try not using Uppercase letters or blank spaces when naming db tables

      $wpdb->insert($table_name, array(
                                'lq_name' => $name, //replaced non-existing variables $lq_name, and $lq_descrip, with the ones we set to collect the data - $name and $description
                                'description' => $description
                                ),array(
                                '%s',
                                '%s') //replaced %d with %s - I guess that your description field will hold strings not decimals
        );
      }
    }

//And now to connect the  two:  
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();

これが役に立つことを願っています。また、最初にデータベーステーブルを作成していなければ、これはうまくいきません(既存のテーブルにデータを挿入するには$ wpdb-> insert関数を使用します)。

乾杯! :)

6
Aleksej