• タイトル通りですが現在作業が滞っています

    add_action(‘admin_menu’, ‘c_admin_menu’);
    add_action(‘save_post’, ‘send_desc’);

    function c_admin_menu()
    {
    add_menu_page(“Send Data”, “Send Data”, ‘8’, __FILE__, ‘example’);
    }

    function send_desc()
    {
    global $wpdb;
    $wpdb->query(“INSERT INTO $wpdb->gps_events (gps_desc) VALUES(“.$_POST[‘gps_desc’].”)”);
    }

    function example()
    {
    ?>
    <div>
    <form method=”post” action=”options.php”>
    <?php wp_nonce_field(‘update-options’);?>
    <table>
    <tr>
    <th>内容</th>
    <td><input type =”text” name=”gps_desc” value=”<?php echo wp_specialchars($_POST[“gps_desc”]) ?>” /></td>
    </tr>
    </table>
    <input type=”hidden” name=”action” value=”update” />
    <input type=”hidden” name=”page_options” value=”key” />
    <p class=”submit”>
    <input type=”submit” class=”button-primary” value=”<?php _e(‘Save Changes ‘); ?>” />
    </p>
    </form>
    </div>
    <?php
    }
    ?>
    とりあえずフォームの作成を参考にして作ってみましたがテーブルを介しての方法については情報がなく とりあえずの感覚で操作をしてしまったので混乱しています
    どなたかご指摘 ご指導をお願いします

6件の返信を表示中 - 1 - 6件目 (全6件中)
    • save_post フックは記事の保存時に動作するアクションフックなので、このケースでは使えません。
    • form の action属性が、options.php となっていますが、options.php はoptions テーブルにデータを格納する際の送信先です。
    • この場合は、独自テーブルなので、form の action 属性は空として、example関数の冒頭にて保存処理を行うなどの必要があります。
    • 保存処理の際、送信データが適切なものであるか、check_admin_referer や current_user_can などのチェックを入れる必要があります。
    • POSTデータを直接SQL文に結合すると、SQLインジェクションなどのセキュリティホールに繋がります。wpdbクラスの insert メソッドを使うか、適切なエスケープ処理は必須です。
    トピック投稿者 gpabi

    (@gpabi)

    お返事ありがとうございます
    wordpress開発が全くの初心者なのでプログラミングやアクション等のapiが十分に扱えないことも重なりお世話になります・・・
    保存先も間違っているなど根本からのご指摘も数々実にありがたいです
    教えてくださる方がいるだけで安心になります
    理解を深めてまた作業を進めていきたいと思います

    トピック投稿者 gpabi

    (@gpabi)

    ご指導のもと書き加えや直しをしてみました

    add_action(‘admin_menu’, ‘c_admin_menu’);

    function c_admin_menu()
    {
    add_menu_page(“Send Data”, “Send Data”, ‘8’, __FILE__, ‘example’);
    }

    function example()
    {
    global $wpdb;
    if (!empty($_POST) && check_admin_referer(‘admin_menu’, ‘example’));
    $wpdb->query(“INSERT INTO $wpdb->gps_events (gps_desc) VALUES (“.$_POST[‘gps_desc’].”)”);
    ?>

    <div>
    <form method=”POST” action=””>
    <table>
    <tr>
    <th>内容</th>
    <td><input type =”text” name=”gps_desc” value=”<?php echo esc_attr($_POST[‘gps_desc’]) ?>” /></td>
    </tr>
    </table>
    <input type=”hidden” name=”action” value=”update” />
    <input type=”hidden” name=”page_options” value=”option” />
    <p><?php wp_nonce_field(‘admin_menu’, ‘example’); ?>
    <p class=”submit”>
    <input type=”submit” class=”button-primary” value=”保存” />
    </p>
    </form>
    </div>
    <?php
    }
    ?>

    おそらくcheck_admin_refererとwp_nonce_fieldの使い方がよくわかっていないせいだと思われますがそれ以外でも間違いなどがあればご指摘お願いします

    トピック投稿者 gpabi

    (@gpabi)

    どうやら調べていくと
    フォームの部分がおかしいような気がしてきました
    <form —から始まる部分をいじってみると入力した内容は送られませんでしたがテーブルにはidが1と入っており中身が無い状態のものになりました
    テーブルはそれぞれ gps_id auto increment gps_begin date gps_end date gps_title varchar gps_desc text gps_added timestampという構成になっており 今回はテストとしてgps_descに文字列のデータを入れたいと思って作業をしているところです
    疑問に思っているところはこの辺りなのでこれおかしくない?というところがあれば是非ご指摘をお願いします

    挿入処理の部分がおかしいです。

    // POST や GET のデータには、一律 addslashes がかかっているので、削除処理を行う。
    $post_gps_desc = isset( $_POST['gps_desc'] ) ? stripslashes_deep( $_POST['gps_desc'] ) : '';
    
    if ( ! empty( $post_gps_desc ) && check_admin_referer('admin_menu', 'example' ) ) {
    	// insert メソッドを用いて、挿入処理。自動的にエスケープ処理を行ってくれる。
    	$wpdb->insert( $wpdb->gps_events, array( 'gps_desc' => $post_gps_desc ), array( '%s' ) );
    }
    トピック投稿者 gpabi

    (@gpabi)

    jim912さん本当にありがとうございます・・・
    頼りっぱなしで面目ないです・・・
    wordpressって確かに基本はPHPなのですがapiがすごく多いんですね・・・
    codex見ただけでも目が回りそうでした
    書いてくださったソースを見るとまだわからない部分があったので勉強不足を感じました
    細かい部分までコメントも入れて下さり非常に助かります

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「投稿フォームから自作テーブルへデータを送信したい」には新たに返信することはできません。