サポート » 使い方全般 » 入力フォームとのデータ連携  $WPDB

  • 解決済 zin-

    (@zin-)


    基本的な質問となり申し訳ないのですが、よろしくお願いします。

    プラグインを使用しないで入力フォームを作成し、テーブルへ保存しようと考えています。
    (WordPressデータベースの中に入力フォーム用テーブルも作成します。)

    その際にはどのように作成すれば良いのでしょうか?

    ■やってみたこと■———————————————————————————————

    現在、EXEC-PHPを使用して、下記のような固定ページと[送信]時の実行プログラムinput_do.phpで作成しましたが、[送信]ボタンを押しても「ページが見つかりません」となってしまいます。

    ◆固定ページ◆

    <form id="form" method="post" action="input_do.php">
    <table>
    <label for="name">名前*</label>
    <input type="text" id="name" name="name" value="" />
    <input type="submit" value="送信" />
    </table>
    </form>

    ◆input_do.php

    <?php
    mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('データベース名');
    mysql_query('SET NAMES UTF8');
    $sql = sprintf('INSERT INTO company SET name="%s"',
    	mysql_real_escape_string($_POST['name']),
    );
    mysql_query($sql) or die(mysql_error());
    ?>

    ————————————————————————————————————————-

    もしかしたらWordpressを使用するときはWPDBクラスを使用するのかもしれないのですが、どのように固定ページを作成すればいいのかわかりません。
    (actionに$wpdb->insertを記載する???)

    検索にもかなりの時間費やしてみたのですが、wordpress内で固定ページで$wpdbの使用例をうまく探し出すことができませんでした。
    よろしくお願いします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    そんなに難しくしないでいいです。

    <?php
    /**
     * Template Name: copy
     *
     *
     *
     *
     *
     */
    ?>
    <?php
    //コード試していないので、おかしかったら直してくださいね
    //post nameはprefix付けるとワードプレスとかぶらない
    if($_POST['rd_hello']){
    	$val = esc_html( $_POST['rd_hello'] );
    	update_option('rd_hello', $val );
    }
    ?>
    <form action='<?php echo get_permalink();?>' method="post">
    <input type="text" id="rd_hello" name="rd_hello" />
    <input type="submit">
    
    </form>

    な、感じでいいです。

    投稿に依存するデータだとか、テーマに依存するデータだとか、いろいろセットできるので、
    http://tenman.info/labo/snip/?page_id=714

    いろいろ試してみてください

    値の取得は

    <?php echo get_option('rd_hello') ;?>

    nobita様、ご連絡ありがとうございます。
    教えて頂いた方法でやりたい動きは確認できました。
    ありがとうございます。

    ただ…前回、記載しておらず恐縮なのですが、今回WordpressをCMSとして使用するため投稿やテーマに依存したデータは扱わない予定となっております。
    そのため私の乏しい知識だとwpdbを使用する必要があるのではないかと思っています。

    質問内容がまとまっていなかったです。本当に申し訳ありません。

    当方がやりたいことを簡素化して記載すると下記のとおりです。

    会員番号(user_id)に沿って名前(cname)などを更新したい。
    但し会員番号や名前はワードプレスのユーザーIDなどとは異なるもので、
    ワードプレス標準テーブル以外の作成したテーブル(今回はmember)で管理したい。

    普通にMySQLで記載すると下記のようなことを行いたいです。

    UPDATE member SET cname = $_POST['cname']
    			WHERE user_id = $_POST['user_id']

    しかし、教えて頂いた方法を基にwpdbクラスを使用して下記のようにコードを記載してテストを何度か行っているのですが、テーブルに反映されません。。。

    <?php
    	if($_POST['cname']){
    		global $wpdb;
    		$wpdb->update
    			($wpdb->member,
    				array( 'cname'	 => $_POST['cname'] ),
    				array( 'user_id' => $_POST['user_id'] )
    			);
    		$wpdb->show_errors();
    	}
    ?>
    
    <form id="form" action='<?php echo get_permalink();?>' method="post">
    
    <label for="cname">名前*</label>
    <input type="text" id="cname" name="cname" />
    
    <label for="user_id">ユーザーID</label>
    <input type="text" id="user_id" name="user_id" />
    <input type="submit">
    
    </form>

    データベース処理エラーも出ていないので、もしかしたら根本的に間違っている可能性があるかと思うのですが間違っているところを教えていただけないでしょうか?
    よろしくお願いします。

    こんにちは

    テーブルの構成はこんな感じです
    http://wpdocs.sourceforge.jp/wiki/images/WP3.2.1-ERD.png

    今回WordpressをCMSとして使用するため投稿やテーマに依存したデータは扱わない予定となっております。

    テーマやAuthorと関連性が必要ないなら、ご自身で、自由にテーブル作って、そこに置いてもいいと思います。

    会員番号(user_id)に沿って名前(cname)などを更新したい。

    カスタム投稿タイプで OK◎

    nobita様

    ご連絡ありがとうございました。
    アドバイス頂いた通り、テーブルを作成し、置くことができました!

    wpdbの使い方は理解が十分にできなかったため下記のようになってしまいましたが、
    入力フォームとデータ連携に関しては解決です!
    ありがとうございました。

    1点だけ気になるのは現在、コードをすべて固定ページに書き込んでいることです。。。

    固定ページに書き込むコードを少なくする方法
    (SQL部分をinput_do.phpのように外部ファイルを読み込む方法)

    については別のスレッドで質問してみようと思います。
    本当にありがとうございました!

    kz様

    アドバイスありがとうございます。
    カスタム投稿タイプを一通り確認してみたのですが、今回、会員番号はWordpressのユーザー名管理ではないためカスタム投稿タイプでは対応できない気がしたのですが・・・なにぶんまだまだプログラム自体を触り始めて時間がたっていないために判断が曖昧です。
    あっていますか?

    <form id="form" method="post" action='<?php echo get_permalink();?>'>
    <table>
    
    <label for="cname">名前</label>
    <input type="text" id="cname" name="cname" value="cname" />
    
    <label for="user_id"></label>
    <input type="text" id="user_id" name="user_id" value="user_id" />
    
    <input type="submit" value="送信" />
    
    </table>
    </form>
    
    <?php
    if($_POST['cname']){
    
    mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('memberdb');
    mysql_query('SET NAMES UTF8');
    
    $sql = sprintf("INSERT INTO member VALUES ( '$_POST[user_id]',
    '$_POST[cname]')
    ON DUPLICATE KEY UPDATE
    cname = '$_POST[cname]'");
    
    $recordSet = mysql_query($sql);
    $data = mysql_fetch_assoc($recordSet);
    };
    ?>
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「入力フォームとのデータ連携  $WPDB」には新たに返信することはできません。