PHPを使用して、フォーム送信時にWordPressテーブルにデータを挿入する

mgrantnz

いくつかのフィールドを持つフォームと、フィールドに対応するwpdbテーブルがあります。フォームの送信ボタンがクリックされたときに、フォームのデータをテーブルに送信したいと思います。

フォームは次のとおりです。

function display_form(){
echo '
<form action="insertrow.php" method="post">
<p>Ticket id:  <br />
User id: <br /> 
Description: <textarea class="widget" rows="4" cols="1" 
name="ticket_description"></textarea>
Priority: <select name="ticket_priority" placeholder="Select">
<option value="critical">Critical</option>
<option value="urgent">Urgent</option>
<option value="important">Important</option>
<option value="standard" selected>Standard</option>
</select>
Status: <select name="ticket_status" placeholder="Select">
<option value="planned">Planned</option>
<option value="in progress">In Progress</option>
<option value="on hold">On Hold</option>
<option value="completed">Completed</option>
<option value="ready for invoice">Ready for Invoice</option>
<option value="to be invoiced as per attached">To be invoiced as per  
attached</option>
</select>
</p>
<input type="submit" name="submit" value="submit">
</form> 
';
}

フォームはinsertrow.phpファイルを呼び出します。

if(isset($_POST['submit']))
{
insert_row();
}

function insert_row()
{
global $wpdb;
require_once('../../../wp-config.php');
$tablename =  'st_support_ticket';

$data = array( 
'ticket_id' => '1', 
'ticket_user_id' => '1', 
'ticket_description' => $_POST['ticket_description'] ,
'ticket_priority' => $_POST['ticket_priority'],
'ticket_status' => $_POST['ticket_status'] );

$wpdb->insert($tablename, $data);
}

これを取得して、説明、優先度、およびステータスをst_support_ticketテーブルに入力しようとしています。

[送信]をクリックすると、URLサフィックスがinsertrow.phpに変更され、空白のページが表示されます。データはテーブルに入力されません(phpmyadminで開いて確認します)。

私は何かが足りないのですか?

random_user_name

これはWordPressの方法ではありません。いくつかの問題がありますが、高レベルから始めましょう。

注:この回答は、dasboardではなくフロントエンド作業していることを前提としています

まず、フォームタグは特定のファイルを指してはいけません。フォームを変更して、現在のページを指すようにする必要があります。これを行うための怠惰な(理想的ではない)方法は、フォームタグの「アクション」を空のままにすることです。これにより、フォームは表示されているのと同じページ/ URLにポストバックされます。

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

次に、テーマのfunctions.phpファイルまたはプラグインのメインファイルを見つけて、insertrow.phpファイルを「インクルード」します。

require_once "insertrow.php;

次に、「監視」を少し変更して、「送信」よりもはるかに一意の値になるようにする必要があります。フォームには、という名前のselectが含まれているのでticket_priority、次の点に注意することをお勧めします。

if(isset($_POST['ticket_priority']))
{
insert_row();
}

そして、私が提案している方法でこれを行う場合は、WPコードを含める必要はありません

// Comment the below line out.  Not necessary.
// require_once('../../../wp-config.php');

最後に、WPサイトでは、配置されているWordPressセキュリティツールを利用したいと考えています。NONCE入力を使用することは、フォームがスパム送信されるのではなく、合法的に投稿されたことを確認するために最低限必要です。wp_nonce_fieldwp_verify_nonceを確認してください

「WordPressの方法」でさらにインラインで実行すると、コードは次のようになります。

function display_form(){
    echo '
    <form action="" method="post">';
    // Add a nonce field
    wp_nonce_field('MyNonceAction', 'ticket_nonce');
    echo '
    <p>Ticket id:  <br />
    User id: <br /> 
    Description: <textarea class="widget" rows="4" cols="1" 
    name="ticket_description"></textarea>
    Priority: <select name="ticket_priority" placeholder="Select">
    <option value="critical">Critical</option>
    <option value="urgent">Urgent</option>
    <option value="important">Important</option>
    <option value="standard" selected>Standard</option>
    </select>
    Status: <select name="ticket_status" placeholder="Select">
    <option value="planned">Planned</option>
    <option value="in progress">In Progress</option>
    <option value="on hold">On Hold</option>
    <option value="completed">Completed</option>
    <option value="ready for invoice">Ready for Invoice</option>
    <option value="to be invoiced as per attached">To be invoiced as per  
    attached</option>
    </select>
    </p>
    <input type="submit" name="submit" value="submit">
    </form> 
    ';
}

また、以下のコードは、スタンドアロンファイルではなく、テーマ/プラグインコアファイルに含まれています。

if(isset($_POST['ticket_priority']))
{
    // Debugging output, since you are having troubles finding the issue.
    // If this doesn't fire, then you've got a problem with the select name or this code isn't included in your theme / plugin.
    echo "SAVING ENTRY";
    // Get the nonce value for validation
    $nonce = $_POST['ticket_nonce'];
    // If the nonce does not verify, do NOT process the form.
    if ( ! wp_verify_nonce($nonce, 'MyNonceAction')) {
         // If this spits out an error, that means the nonce failed
         echo 'Security error. Do not process the form.';
         return;
    }

    insert_row();
}

function insert_row()
{

    // You should use the WP table prefixes, so let's set that up....
    global $wpdb, $table_prefix;
    $tablename =  $table_prefix . 'st_support_ticket';

    $data = array( 
    'ticket_id' => '1', 
    'ticket_user_id' => '1', 
    'ticket_description' => $_POST['ticket_description'] ,
    'ticket_priority' => $_POST['ticket_priority'],
    'ticket_status' => $_POST['ticket_status'] );

    // Debugging: Lets see what we're trying to save
    var_dump($data);

    // FOR database SQL injection security, set up the formats
    $formats = array( 
        '%d', // ticket_id should be an integer
        '%d', // ticket_user_id should be an integer
        '%s', // ticket_description should be a string
        '%s', // ticket_priority should be an string
        '%s'  // ticket_status should be an string 
    ); 

    // Debugging: Turn on error reporting for db to see if there's a database error
    $wpdb->show_errors();
    // Actually attempt to insert the data
    $wpdb->insert($tablename, $data, $formats);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PHPを介して多言語HTMLフォームからMySQLテーブルにデータを挿入する

分類Dev

フォームの値をWordpressデータベーステーブルに挿入します:php

分類Dev

1つのフォームを使用して複数のテーブルにデータを挿入します

分類Dev

フォーム入力は、このデータを使用してテーブルに送信します

分類Dev

Laravelのajaxによる単純なフォーム送信後、送信されたフォームのデータを使用して既存のテーブルに新しい行を挿入します

分類Dev

mysqlテーブルにデータフォームを挿入します

分類Dev

フォームデータをmysqlテーブルに挿入します

分類Dev

フォームからテーブルにデータを挿入します

分類Dev

PHPを使用してHTMLフォームからMySQLデータベースにデータを挿入する

分類Dev

PHPを使用してHTMLフォームデータをMySQLデータベースに挿入する

分類Dev

参照テーブルを使用してRのデータフレームに行を挿入する方法は?

分類Dev

CREATE IDENTIFIER ---- phpを使用して2つのフォームデータを1つのテーブルに挿入します

分類Dev

ワードプレス 4.7 を使用してフォームの値をデータベース テーブルに挿入する

分類Dev

HTMLフォームを使用してデータベースに挿入する

分類Dev

データベーステーブルPHPにデータフォームを挿入しない

分類Dev

PHPを使用してmySQLのデータベース行にHTMLフォーム配列を挿入する方法

分類Dev

フォームを介して1つのテーブルから別のテーブルにデータを挿入する

分類Dev

デフォルト値を使用して、あるテーブルから別のテーブルにデータを挿入する

分類Dev

PHPは関数からユーザーのみを抽出し、フォアチを使用してデータベース通知テーブルに挿入します

分類Dev

POSTを使用して大量のフォームデータをPHPに送信する

分類Dev

Javaを使用してmySQLテーブルにデータを挿入する方法

分類Dev

mySQLiを使用してテーブルにデータを挿入する

分類Dev

Javaを使用してテーブルにデータを挿入する

分類Dev

クエリを使用して一時テーブルにデータを挿入する

分類Dev

フォームを介してFlaskメソッドにテーブルデータを送信する

分類Dev

このフォームデータを送信してデータベースに挿入します

分類Dev

PHPの入力フィールドを使用して、テーブルの行データを別のテーブルに送信する

分類Dev

Ajaxを使用してフォームを送信し、MySQLにデータを挿入しても機能しない

分類Dev

PHPを使用してMySQLテーブルにデータを挿入しようとする際の問題

Related 関連記事

  1. 1

    PHPを介して多言語HTMLフォームからMySQLテーブルにデータを挿入する

  2. 2

    フォームの値をWordpressデータベーステーブルに挿入します:php

  3. 3

    1つのフォームを使用して複数のテーブルにデータを挿入します

  4. 4

    フォーム入力は、このデータを使用してテーブルに送信します

  5. 5

    Laravelのajaxによる単純なフォーム送信後、送信されたフォームのデータを使用して既存のテーブルに新しい行を挿入します

  6. 6

    mysqlテーブルにデータフォームを挿入します

  7. 7

    フォームデータをmysqlテーブルに挿入します

  8. 8

    フォームからテーブルにデータを挿入します

  9. 9

    PHPを使用してHTMLフォームからMySQLデータベースにデータを挿入する

  10. 10

    PHPを使用してHTMLフォームデータをMySQLデータベースに挿入する

  11. 11

    参照テーブルを使用してRのデータフレームに行を挿入する方法は?

  12. 12

    CREATE IDENTIFIER ---- phpを使用して2つのフォームデータを1つのテーブルに挿入します

  13. 13

    ワードプレス 4.7 を使用してフォームの値をデータベース テーブルに挿入する

  14. 14

    HTMLフォームを使用してデータベースに挿入する

  15. 15

    データベーステーブルPHPにデータフォームを挿入しない

  16. 16

    PHPを使用してmySQLのデータベース行にHTMLフォーム配列を挿入する方法

  17. 17

    フォームを介して1つのテーブルから別のテーブルにデータを挿入する

  18. 18

    デフォルト値を使用して、あるテーブルから別のテーブルにデータを挿入する

  19. 19

    PHPは関数からユーザーのみを抽出し、フォアチを使用してデータベース通知テーブルに挿入します

  20. 20

    POSTを使用して大量のフォームデータをPHPに送信する

  21. 21

    Javaを使用してmySQLテーブルにデータを挿入する方法

  22. 22

    mySQLiを使用してテーブルにデータを挿入する

  23. 23

    Javaを使用してテーブルにデータを挿入する

  24. 24

    クエリを使用して一時テーブルにデータを挿入する

  25. 25

    フォームを介してFlaskメソッドにテーブルデータを送信する

  26. 26

    このフォームデータを送信してデータベースに挿入します

  27. 27

    PHPの入力フィールドを使用して、テーブルの行データを別のテーブルに送信する

  28. 28

    Ajaxを使用してフォームを送信し、MySQLにデータを挿入しても機能しない

  29. 29

    PHPを使用してMySQLテーブルにデータを挿入しようとする際の問題

ホットタグ

アーカイブ