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

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

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

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

JavaScript

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

Q&A

3回答

3159閲覧

PHPで取得した値をJavascriptへ送りたい

horikomaru

総合スコア10

PHP

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

JavaScript

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

0グッド

3クリップ

投稿2018/10/31 17:06

編集2018/10/31 17:10

###実現したいこと
PHPで取得した値をjavascriptに送り、送られてきた値をHTMLに表示したい。

自分はPHPを初めたばかりでPHPからjavascriptへ値が送るよい方法がわかりません。自分なりに調べてみて試してみたのですができませんでした。教えてほしいです。

該当のソースコード

PHP

1<?php 2$a = 20; 3 4$php_json = json_encode($a);//JSに送りたい値($a) 5 6 //JQuery読み込み 7<script src="jquery-3.3.1.js" type="text/javascript"></script> 8 //外部javascript呼び出し 9 //ここでid属性を記述して、スクリプトタグに変数を埋め込みます 10<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a);?>'></script> 11 12

javascript

1var $script = $('#script'); 2var result = JSON.parse($script.attr('data-param')); 3//確認 4console.log(result);

補足情報

まずはPHPからjavascriptへ値を送るところまでをできるようにしたいのでjavascriptではコンソールに表示させています。

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

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

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

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

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

guest

回答3

0

これで出ませんか?

PHP

1<?php 2$a = 20; 3 ?> 4<script> 5var a = JSON.parse( <?php echo json_encode( $a );?> ); 6console.log( a ); 7</script>

投稿2018/10/31 17:28

kei344

総合スコア69458

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

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

horikomaru

2018/11/01 01:40

ご回答ありがとうございます。 var a = JSON.parse( <?php echo json_encode( $a );?> ); のところでUncaught SyntaxError: Unexpected token <エラーが出てしまいました。
kei344

2018/11/01 01:47

ブラウザにそのままドラッグアンドドロップするのではなく、PHPが解釈できるサーバで試してください。 「PHP 開発環境」で検索するか、書籍等で調べられることをお勧めします。
horikomaru

2018/11/01 01:58

ありがとうございます。
ockeghem

2018/11/01 02:04

JSON.parseいらないんじゃないですか? あるいは シングルクォートで囲って文字列リテラルにするかしないと、型が合わないような気がします
kei344

2018/11/01 02:11

To: ockeghemさん JSON.parse( 20 ) になるだけなので問題ないかと思います。
kei344

2018/11/01 02:28

(文字列にしても問題ないと思うが・・・)
ockeghem

2018/11/01 02:44 編集

文字列は大丈夫ですね。せっかくJSONにしているので、配列等を渡すとどうでしょうか?…と思ったけど、文字列もダメですね。JSON.parse("abc") などだと、abcという文字列をJSONとしてパースしようとしてエラーになりますね。JSON.parse('"abc"') なら大丈夫かと
kei344

2018/11/01 02:43

To: ockeghemさん JSON処理を入れているのは質問者が入れているので使用しています。質問内容が「値を送りたい」なので特にJSONにこだわらずに回答しています。
ockeghem

2018/11/01 02:44

いや、前のコメントを編集してしまいましたが、文字列もダメでした
kei344

2018/11/01 02:57

To: ockeghemさん 'use strict';で試したらエラーになりました、ご指摘感謝します。 マイナス押して置いてください。
guest

0

PHPスクリプトをほんの少し修正すると動きましたよ

PHP

1<?php 2$a = 20; 3 4$php_json = json_encode($a);//JSに送りたい値($a) 5 6 //JQuery読み込み  ************* 以下に ?> を追加する ***************** 7?><script src="jquery-3.3.1.js" type="text/javascript"></script> 8 //外部javascript呼び出し 9 //ここでid属性を記述して、スクリプトタグに変数を埋め込みます 10<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a);?>'></script>

現在使われている方法は、カスタムデータ属性というもので、様々なデータを送る際にも対応しているとても優れた方法です。ぜひこの方針を保ってください。

失礼ながら他の方の回答ですと、数値ではなく文字列にすると動かなくなったり、クロスサイトスクリプティング脆弱性が入ったりして、汎用的ではありません。


kei344さんへのコメントを書いて思い出しましたが、jsonencodeの行を以下のように修正すると安全性が高まります。

<script id="script" type="text/javascript" src="main.js"data-param='<?php echo json_encode($a, JSON_HEX_TAG | JSON_HEX_AMP);?>'></script>

投稿2018/11/01 02:25

編集2018/11/01 04:21
ockeghem

総合スコア11701

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

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

kei344

2018/11/01 02:39

すみません、私の回答で$aが未知の値が入っている場合クロスサイトスクリプティング脆弱性が入る可能性があるのかを、後学のために教えていただけませんか?
ockeghem

2018/11/01 03:57

kei344さんの回答はXSS攻撃は受けないと思いますが、< や > はエスケープされないので、危なっかしい気はします。json_encodeの際に JSON_HEX_TAG 等を指定するべきかと思います。現状は / がエスケープされるので、かろうじて攻撃を受けない、という感じです。
kei344

2018/11/01 04:51

返信ありがとうございます。ちなみに「'」はエスケープする必要はないのでしょうか。
guest

0

PHPからjavascriptへ値が送る

この考え方でそのまま学習を進めると今後別の場面でつまずきます。

phpはサーバー側の言語でJavaScriptは基本的にクライアント側の言語です。
phpはWebサーバー上でないと動きませんが、JavaScriptはそうでなくても動きます。

phpは呼び出されたところに対して出力を行っているだけであり、それがhtmlなどでブラウザから参照しているからブラウザが解釈して表示してくれているだけです。

というのを念頭に置くと、
phpでブラウザが解釈できる文字列を出力したものをJavaScriptの変数に格納するようなコードを書いて、その変数をJavaScriptで参照する
という考え方でコードを組むことになります。

phpはechoやprintで出力を行いますが、それをブラウザに解釈させたいクライアント側の言語にするだけです。

php

1<?php 2$test = "a"; 3?> 4<script> 5console.log("<?php echo $test ?>"); 6</script>

php

1<?php 2$test = "a"; 3?> 4<script> 5var test= "<?php echo $test ?>"; 6console.log(test); 7</script>

もし外部jsファイルにセットしたければ、直に書くときと同じようにそのjsファイル読み込み記述より前にJavaScriptの変数を定義するように書き、その変数をjsファイルで使うだけです。
つまりブラウザ「ソースを表示」で確認できる内容にしてください。

投稿2018/10/31 23:01

編集2018/10/31 23:16
m.ts10806

総合スコア80861

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

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

horikomaru

2018/11/01 01:38

ご回答ありがとうございます。 試してみたのですが<?php echo $test ?>が出力されてしまいました。
m.ts10806

2018/11/01 01:40

まさかjsファイルに直接書いてませんか? それかphpではなくhtmlファイルに書いてるとか。
horikomaru

2018/11/01 01:54

phpに記述しています。。
m.ts10806

2018/11/01 02:03

サーバー上で実行されていないようですね。それだと単にphpの実行環境が整っていません。 ひとまずローカルでWebサーバーを実行できる環境を用意してください。XAMPPを入れるのが早いです。 今はhtmlを動かすクライアント感覚で動かそうとしています。 もしXAMPP導入済みならXAMPPコントローラからApacheを起動してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問