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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

PHP

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

Q&A

解決済

3回答

4918閲覧

PHPによるデータの受け渡し処理でエラーが発生しております

shinya.g

総合スコア14

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/03/30 00:38

ワードプレスの他者様作成のプラグインを改造しております。
使用しているプラグインはmts-simple-booking-cと言うものですが、既に開発者の方のWebは閉じられており、配布も行われておりません。
http://www.amagistudio.com/reservedemonstration/
上記サイトよりmts-simple-booking-cを改造されたものをダウンロードし、さらに改造しております。

現在、下記の処理の流れの中で、「予約フォーム内のデータを引用して確認メール送信」の箇所でエラーが発生しております。
予約フォームにデータ入力>>各種チェック>>データベースへ登録>>予約フォーム内のデータを引用して確認メール送信

表示エラー

Notice: Undefined property: MTSSSB_Simple_Booking::$booking_form in /Applications/MAMP/htdocs/test/wp-content/plugins/mts-simple-booking-guy_006/mtsssb-mail.php on line 47 Fatal error: Call to a member function getBooking() on null in /Applications/MAMP/htdocs/test/wp-content/plugins/mts-simple-booking-guy_006/mtsssb-mail.php on line 47

該当すると思われるファイル
/mts-simple-booking-guy_006/
┣mtsssb-simple-booking.php
┣mtsssb-booking-form.php
┗mtsssb-mail.php

mtsssb-simple-booking.php
下記、エラーが起きている箇所の処理の抜粋になります。
$mail = $this->_load_module('MTSSSB_Mail');の処理でエラーが発生しております。

$mtsssb_simple_booking = new MTSSSB_Simple_Booking(); class MTSSSB_Simple_Booking { /** * 予約登録・メール送信処理内部ディスパッチャー * */ public function internal_dispatcher() { $action = isset($_POST['action']) ? $_POST['action'] : ''; if (is_page(self::PAGE_BOOKING_FORM)) { if ($action == 'confirm') { $booking_form = $this->_load_module('MTSSSB_Booking_Form'); if ($booking_form->front_booking()) { $mail = $this->_load_module('MTSSSB_Mail'); …

mtsssb-mail.php
下記、エラーが起きている箇所の処理抜粋になります。
$booking = $mtsssb_simple_booking->booking_form->getBooking();の行でエラーが出ております。

<?php class MTSSSB_Mail { /** * 予約登録のメール * */ public function booking_mail() { global $mtsssb_simple_booking; $booking = $mtsssb_simple_booking->booking_form->getBooking(); // 予約IDの生成 $reserve_id = date('ymd', $booking['booking_time']) . substr("00{$booking['booking_id']}", -3); // 予約者情報 $adda = array($booking['client']['name'], $reserve_id); // メールテンプレートの読込み $template = get_option($this->domain . '_reserve'); // メール文生成 $body = $this->_booking_content($booking, $template); // クライアント $subject = $template['title']; $client_content = $this->_replace_variable($template['header'], $adda) . $body . $this->_replace_variable($template['footer'], $adda); $client_to = $booking['client']['email']; if (!empty($client_to)) { $client_ret = wp_mail($client_to, $subject, $client_content, $this->fromshop); } } }

mtsssb-simple-booking.php
下記、今回のエラーで該当するであろう部分を抜粋しております。
少し長くなり申し訳ございません。

<?php if (!class_exists('MTSSSB_Booking')) { require_once(dirname(__FILE__) . '/mtsssb-booking.php'); } class MTSSSB_Booking_Form extends MTSSSB_Booking { const PAGE_NAME = 'mtsssb_booking-form'; /** * フォーム入力予約登録処理 * */ 中略 // 予約データを正規化し、登録データを取得する $this->booking = $this->normalize_booking($_POST['booking'], $this->article['count']); 中略 // 予約を新規登録する $booking_id = $this->add_booking(); if (!$booking_id) { $this->err_message = $this->_err_message('ERROR_ADD_BOOKING'); return false; } $this->booking['booking_id'] = $booking_id; return $booking_id; } /** * ステータス別予約フォーム処理 * */ public function booking_form($content) { // 予約登録処理実行の後処理 $action = isset($_POST['action']) ? $_POST['action'] : ''; if ($action == 'confirm') { if (empty($this->err_message)) { echo 'ご予約ありがとうございました。'; } return $this->_out_errorbox(); } 中略 // 予約データを正規化し、登録データを取得する $this->booking = $this->normalize_booking($_POST['booking'], $this->article['count']); 中略 /** * お客様入力フォームの表示 * */ protected function _input_form() { global $current_user; $url = get_permalink(); $client = $this->booking['client']; 中略 // ログイン中であればログインユーザー情報をセットする if (is_user_logged_in() && empty($client['name']) && empty($client['email'])) { get_currentuserinfo(); 中略 $client['name'] = $current_user->last_name . ' ' . $current_user->first_name; $client['email'] = $email2 = $current_user->user_email; 中略 } ob_start(); ?> <?php /** * 予約入力確認フォームの表示 * */ protected function _confirming_form() { $url = get_permalink(); $client = $this->booking['client']; // オプション追加選択の処理 if ($this->article['addition'] == 1) { $options = get_option($this->domain . '_option'); } ob_start(); ?> <div id="mtsssb_booking-form" class="content-form"> <form method="post" action="<?php echo $url ?>"> <fieldset id="booking-confirm-fieldset"> <legend><?php echo apply_filters('booking_form_confirm_title', 'ご予約内容の確認') ?></legend> <table> <tr> <th>ご宿泊日</th> <td><?php echo esc_html($this->article['name']) ?><br /> <?php echo apply_filters('booking_form_date', date('Y年n月j日 ', $this->booking['booking_time']), $this->booking['booking_time']) ?><br /><?php echo apply_filters('booking_form_date', date('H時 i分', $this->thetime), $this->thetime) ?> チェクイン可 </td> </tr> 中略 <?php echo nl2br(esc_html($this->booking['note'])) ?> <input type="hidden" name="booking[note]" value="<?php echo esc_textarea($this->booking['note']) ?>" /> </td> </tr> </table> </fieldset> <div id="action-button" style="text-align: center"> <?php echo apply_filters('booking_form_submit_button', '<button type="submit" name="reserve_action" value="validate">予約する</button>'); ?> </div> <input type="hidden" name="nonce" value="<?php echo wp_create_nonce("{$this->domain}_" . self::PAGE_NAME) ?>" /> <input type="hidden" name="booking[article_id]" value="<?php echo $this->article_id ?>" /> <input type="hidden" name="booking[booking_time]" value="<?php echo $this->thetime ?>" /> <input type="hidden" name="action" value="confirm" /> <input type="hidden" name="booking[user_id]" value="<?php echo esc_html($this->booking['user_id']) ?>" /> </form> </div> <?php return ob_get_clean(); } /** * 対象予約品目の参照を戻す * */ public function getArticle() { return $this->article; } /** * 各種条件設定パラメータの参照を戻す * */ public function getControls() { return $this->controls; } }

$booking_formやgetBookingの記載がないことが原因かと思われます。
クラスや関数を用いたコードの記載がほとんどないため、どの部分にどのように追記すれば良いのか、
または、$booking = $mtsssb_simple_booking->booking_form->getBooking();の記載方法が正しいのか、
四苦八苦しております。
アドバイスをいただけないでしょうか、よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

メール送信、無事にできるようになりました。
ありがとうございます。

投稿2017/03/30 02:31

shinya.g

総合スコア14

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

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

haniwa123

2022/09/10 23:37

コメント失礼します。 私も、simple bookingで、「予約する」を押したあと メールの送信に失敗しました。電話での予約確認お願いしますと表示され困っています。 予約は、ちゃんとされています。 this-> をどこに挿入して解決されましたでしょうか?
guest

0

ベストアンサー

Notice: Undefined property: MTSSSB_Simple_Booking::$booking_form in /Applications/MAMP/htdocs/test/wp-content/plugins/mts-simple-booking-guy_006/mtsssb-mail.php on line 47

Fatal error: Call to a member function getBooking() on null in /Applications/MAMP/htdocs/test/wp-content/plugins/mts-simple-booking-guy_006/mtsssb-mail.php on line 47

このエラーメッセージから、

  • MTSSSB_Simple_Booking には $booking_form というプロパティに値が定義されていない
  • ので、MTSSSB_Simple_Booking->booking_form なんてのはないので null になる
  • ので、MTSSSB_Simple_Booking->booking_form->getBooking() は、nullオブジェクトからの呼び出しになるから、そんなものはない!で怒られる

ということが分かります。

PHP

1class MTSSSB_Simple_Booking { 2 /** 3 * 予約登録・メール送信処理内部ディスパッチャー 4 * 5 */ 6 public function internal_dispatcher() { 7 8 $action = isset($_POST['action']) ? $_POST['action'] : ''; 9 10 if (is_page(self::PAGE_BOOKING_FORM)) { 11 if ($action == 'confirm') { 12 $booking_form = $this->_load_module('MTSSSB_Booking_Form'); 13 if ($booking_form->front_booking()) { 14 $mail = $this->_load_module('MTSSSB_Mail');

これだと $booking_form がローカル変数になっていて、このクラスのインスタンスのプロパティである booking_form にはなりません。
$this->booking_form にしないと。
※たぶん $mail も同じ

投稿2017/03/30 01:08

tacsheaven

総合スコア13703

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

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

shinya.g

2017/03/30 02:03

アドバイスありがとうございます。 おっしゃっている内容は何となく理解できるので、調べつつ努力してみます。
guest

0

コメント失礼します。
私も、simple bookingで、「予約する」を押したあと メールの送信に失敗しました。電話での予約確認お願いしますと表示され困っています。
予約は、ちゃんとされています。
this-> をどこに挿入して解決されましたでしょうか?

投稿2022/09/10 23:36

haniwa123

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問