質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2519閲覧

wordpress上でPHPを使用しデータベースの操作を行うページの動作について

milk0719

総合スコア1

さくらのレンタルサーバ

さくらのレンタルサーバとは、格安サーバーで知られるさくらインターネット社の提供する共有レンタルサーバー。Webサイトの構築から簡単なプログラミングまで幅広く利用することができ、プランが多いことも特徴です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/07/11 05:01

前提・実現したいこと

wordpress上で、phpを使用しデータベースの値を操作するホームページを作成しております。
ボタンを押したらデータベースの値が更新されたり、その結果が表示されたりする機能です。

$wpdb->get_resultsを使用してデータベースの内容を表示することはできるのですが、
insertが動いてくれず、データベースへ値を挿入することができません。
色々調べたのですがエラーウィンドウも出ない状態で、どうしたら良いのかご教授いただければ幸いです。

発生している問題・エラーメッセージ

1.さくらのレンタルサーバにてwordpressをインストール。
2.「phpMyadmin」にてテーブル作成、テストデータを直接入力した。
3.DB構造は、以下のようになっております。
イメージ説明

XYZPHPCODEというプラグインを使用してphpを動作させました。
以下は固定ページ上のソースです。

<section class="section"> <div class="section-inner"> [xyz-ips snippet="dbhyoujinew"] </div> </section> 以下はXYZPHPCODEというプラグインに書いたソースです。 <?php global $wpdb; $rows = $wpdb->get_results("SELECT * FROM $wpdb->things"); foreach ($rows as $row ) { echo "nameは" . $row->name ."です。"; echo "商品名は" . $row->code_name ."です。"; echo '<br>'; } ?>

ここまでは動作しているので、DBとの接続などは問題ないと思っております。

該当のソースコード

以下はaddinsert01.phpに記述した内容です。

<?php header('Content-Type: text/html; charset=UTF-8'); ?> <?php global $wpdb; $sql = $wpdb->prepare("INSERT INTO $wpdb->things (id, name, code,code_name,code_price,time) values (%d, %s, %d, %s, %d ,%d)", null, 'おおおお', 2323, '商品名です' ,'5800', ); $wpdb->query($sql); ?>

試したこと

固定ページからボタンを押して、上記のPHPファイルを動作するようにしました。
画面遷移をしないように(DB追加処理を画面遷移させないように行いたいので)id="AjaxForm03を追加しています。
以下が固定ページのソースです。

<form action="/addinsert01.php" method="post" id="AjaxForm03"> <input type="hidden" name="name" value="testAUTO">  <input type="submit" value="ご注文ボタン" class="submit"> </form> <div id="result03">「phpを実行」ボタンを押すとここに実行結果が表示されます。</div> ↓AjaxForm03の内容です。固定ページに書いております。 <div> <script> jQuery('#AjaxForm03').submit(function(event) { // HTMLでの送信をキャンセル event.preventDefault(); var jQueryform = jQuery(this); var jQuerybutton = jQueryform.find('.submit'); jQuery.ajax({ url: jQueryform.attr('action'), type: jQueryform.attr('method'), data: jQueryform.serialize(), timeout: 10000, // 単位はミリ秒 // 送信前 beforeSend: function(xhr, settings) { // ボタンを無効化し、二重送信を防止 jQuerybutton.attr('disabled', true); jQuery("#result03").text("") }, // 応答後 complete: function(xhr, textStatus) { // ボタンを有効化し、再送信を許可 jQuerybutton.attr('disabled', false); }, // 通信成功時の処理 success: function(result03, textStatus, xhr) { // 入力値を初期化 jQueryform[0].reset(); jQuery("#result03").append(result03); }, // 通信失敗時の処理 error: function(xhr, textStatus, error) { alert('エラー暫くたってからお試しください。'); } }); // … }); </script> </div>

ボタンを押すと、エラー処理のルートに入り、「エラー暫くたってからお試しください。」が表示されます。
PHPの記述でinsertされていないのでは??と思っておりますが、ご教授のほど、何卒よろしくお願い致します。
PHPの記述の仕方で別のやり方を試しましたがやはり動作しませんでした。

$result = $wpdb->insert( $wpdb->things, array(
'id' => 1,
'name' => 'ここは名前',
'code' => 12345678,
'code_name' => '商品の名前入力',
'code_price' => 6800,
'time' => ,
), array('%d', '%s', '%d','%s','%d','%d',) );

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

addinsert01.phpに直接アクセスするということはWordPressを介さず動くということなので、定義していない$wpdbにはアクセスできません。

投稿2020/07/11 05:09

kei344

総合スコア69606

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

milk0719

2020/07/11 08:18

迅速に回答していただき、誠にありがとうございます。 ボタン送信によるphp呼び出しはwordpress関係ないということが分かりませんでした。 ありがとうございました。
guest

0

kei334様に教えて頂きまして解決しました。
私のように困っている人向けにソースを残しておきます。

wordpressのプラグインである「XYZphpCode」を適用します。
イメージ説明

その中で、

<?php global $wpdb; $sql = $wpdb->prepare("INSERT INTO $wpdb->things ( name, code,code_name,code_price,time) values (%s, %d, %s, %d, %d)",'おおおお',2323,'商品名です',5800,8888); $wpdb->query($sql); ?>

を書きます。ソース名はaddinserttestです。

wordpress上固定ページソース内に、以下を記述します。

<div> [xyz-ips snippet="addinserttest"] </div>

この記述があるページがリロードされる度にデータベースthingsへ行が登録されていきます。

投稿2020/07/11 08:24

milk0719

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問