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

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

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

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

WordPress

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1696閲覧

<script>にPHPの変数を代入したい

scrollman

総合スコア83

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

WordPress

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

3クリップ

投稿2018/08/30 19:50

編集2018/11/14 14:29

stripeでsubscriptionシステムを構築中でして、今は申し込みフォームを作っているのですが、
$emailが scriptのほうに代入されないみたいで困っております。

scriptに代入するには何か特別な方法が必要なのでしょうか?

何卒教えていただきたいと思います。

PHP

1function pay_test() { 2 require_once ('/home/users/1/main.jp-418544100b38ce51/web/hogehoge/wp-load.php'); 3 global $current_user; 4 get_currentuserinfo(); 5 $email = $current_user->user_email . "\n"; 6 var_dump($email); 7 echo "$email"; 8 echo ' 9 <form action="https://hogehoge.com/wp-content/themes/ALC/paysystem/checkout.php" method="POST"> 10 <script src="https://checkout.stripe.com/checkout.js" 11 class="stripe-button" 12 data-key="pk_test_hogehoge" 13 data-amount="903" 14 data-name="ほげほげプラン" 15 data-description="ホゲホゲサポート・ホゲホゲ代行" 16 data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 17 data-locale="auto" 18 data-currency="jpy" 19 data-zip-code="false" 20 data-allow-remember-me="false" 21 data-email="' . $email . '" 22 data-label="申し込む"> 23 </script> 24 </form>'; 25 } 26add_shortcode('pay_test', 'pay_test');

data-email="hogehoge@gmail.com"
としておくと、stripeのフォーム上だとしっかりメールアドレスが固定された状態になるのですが、

上記のように変数にするとメールアドレスが自由に記入できる状態、data-email=""がない時と同じ状態になるのです。

実験⇓

PHP

1function pay_test() { 2 require_once ('/home/users/1/main.jp-418544100b38ce51/web/hogehoge/wp-load.php'); 3 global $current_user; 4 get_currentuserinfo(); 5 $email = $current_user->user_email . "\n"; 6 var_dump($email); 7 echo "$email"; 8 $label = '申し込まない'; 9 echo ' 10 <form action="https://familialiber.com/wp-content/themes/ALC/paysystem/checkout.php" method="POST"> 11 <script src="https://checkout.stripe.com/checkout.js" 12 class="stripe-button" 13 data-key="pk_test_4yIXhjDfhtNf2LHWnMIcVIYH" 14 data-amount="903" 15 data-name="エコノミープラン" 16 data-description="チャットサポート・動画編集代行" 17 data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 18 data-locale="auto" 19 data-currency="jpy" 20 data-zip-code="false" 21 data-allow-remember-me="false" 22 data-email="' . $email . '" 23 data-label="' . $label . '"> 24 </script> 25 </form> 26 '; 27 } 28add_shortcode('pay_test', 'pay_test');

このようにしてみたところ、$labelの部分はしっかりと変数が代入されておりました。$emailは代入されません。謎です。

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

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

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

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

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

m.ts10806

2018/08/30 21:26

「みたい」では何が起きたのかわかりませんので、このコードを実行して得られた結果、「入っていない」という根拠を具体的に提示してください。
m.ts10806

2018/08/30 21:55

var_dumpやechoでデバッグされてますが、そこでは問題なく取得できているということですよね?
scrollman

2018/08/30 21:56

そうなんです。
m.ts10806

2018/08/30 22:44

念のため、ほかのdata属性の属性値についても変数埋め込み試していただいて良いですか?<form>タグの中とか全体を変数にしてみたり
scrollman

2018/08/30 22:45

やってみます。
scrollman

2018/08/30 22:51

試しにdate-labelの部分を変数代入式にしてみましたら、そこは無事に変数代入出来ているようです。(詳しくは質問を編集しておきましたので御覧ください。)
m.ts10806

2018/08/30 23:10 編集

($current_user->user_emailで正しく情報が取得できてる前提で)通常のPHPではちゃんと出ますが、もしかしたら付け足している. "\n" が原因かもしれません。改行コードなので、プラグイン側が正しく解釈できない不正な値として弾いてしまってるかも。
scrollman

2018/08/31 00:05

なんということでしょうか…"\n"を消したら本当にできてしまいました。なんとお礼を言ったら良いか…
guest

回答2

0

解決されたとのことですが、脆弱性が気になりましたのでコメントします。
$emailを出力する際にhtmlspecialcharsなどでエスケープしないとクロスサイトスクリプティング脆弱性になります。
メールアドレスとしてのバリデーションがあるのかもしれませんが、以下のような攻撃文字列は、メールアドレスとして妥当で、かつJavaScriptが起動します。

"><script>alert(1)</script>"@example.com

投稿2018/08/31 02:46

ockeghem

総合スコア11701

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

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

scrollman

2018/08/31 12:12

htmlspecialchars で エスケープですね…心得ておきます。
guest

0

自己解決

"\n" を消したらできちゃいました

投稿2018/08/31 00:05

scrollman

総合スコア83

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

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

m.ts10806

2018/08/31 00:08

JavaScript内ではそのまま改行はコードとしてNGなので(もちろんヒアドキュメントみたいなの使うとか文字列接続+とか使えばできますが) 文法的にNGな状態は弾くようにWordPress側でやっているのではないかと思われます。
scrollman

2018/08/31 00:09

勉強になりました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問