前提・実現したいこと
WordPressのページでformに入力した内容でデータベースを更新したい。
更新したいテーブルは自分で作成したもので、ショートコードでで参照できることを確認済です。
wpdbクラスのインスタンスである$wpdbを使ってquery()関数のSQLで更新をかけようとしています。
ボタン等を押したページ遷移のタイミングでphpファイルを実行してデータベースを更新したいと思っています。
なにかいい方法やがあれば教えてください。
試したこと・発生している問題
サーバー側のフォルダにphpファイルを置いてそのページを呼び出してデータベースを操作しようとすると500エラーを吐いてしまい、実行できません。
また、テーマ内のフォルダに実行ファイルを置き、formのactionでフルパス指定して実行しても上記と同じことが起こります。
ほかにもfunctions.phpに.phpファイルを呼び出す関数を作り、ショートコードで呼び出すと問題なく操作できるが、formからの情報の取得方法がわからない。
###テスト用に作成したphpファイル
php
1<?php 2 3global $wpdb; 4 5//$get_dataにget_results(SQL->テーブル名)で呼び出したものを格納 6$get_data = $wpdb->get_results("SELECT * FROM $wpdb->user_test "); 7 8//foreach文で1つずつ取り出し出力 9 foreach($get_data as $data) { 10 11 //出力はechoで行う 12 echo '<p>[' .$data->name .',' . $data->age .',' . $data->sex .']</p>'; 13 } 14 15?>
###更新用のテストプログラム
php
1<?php 2global $wpdb; 3$res = $wpdb->query("UPDATE $wpdb->user_test SET name = 'jiro' WHERE name = 'taro'"); 4if($res){ 5 echo '<p>成功</p>'; 6}else{ 7 echo '<p>失敗</p>'; 8} 9?>
###呼び出すショートコードの中身
php
1function call_myphp( $atts = array() ) { 2 3 // パラメータに file がある場合に処理 4 if( $atts['file'] ) { 5 $phpfilename = $atts['file'] . '.php'; 6 7 // 呼び出しファイルのパラメータを設定(必要あれば) 8 if( isset( $atts['paramname'], $atts['paramval'] ) ) { 9 $paramnamelist = explode( ',', $atts['paramname'] ); 10 $paramvallist = explode( ',', $atts['paramval'] ); 11 $idx = 0; 12 foreach ($paramnamelist as $plist) { 13 if( isset( $plist, $paramvallist[$idx] ) ){ 14 $_GET[ $plist ] = $paramvallist[$idx]; 15 } 16 $idx++; 17 } 18 } 19 20 // 外部ファイル呼び出し(結果はそのまま画面に出力) 21 ob_start(); 22 // 呼び出しファイル格納先は wp-content フォルダ直下の php フォルダ内 23 include( WP_CONTENT_DIR . "/php/$phpfilename" ); 24 return ob_get_clean(); 25 } 26} 27 28// ショートコードとして登録 29add_shortcode('myphp', 'call_myphp');
補足情報(FW/ツールのバージョンなど)
PHP 7.x
WordPress 4.9.x
練習環境のため、テーマはTwenty Seventeen2.4です。
本番環境ではCocoonを使う予定です。
sqlインジェクション等の対策は操作方法が確立されてから行う予定なので今は考えずにお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/22 09:12 編集
2020/11/23 01:35