プロが教える店舗&オフィスのセキュリティ対策術

javascriptの変数をphpに渡すプログラムを、ネットを参考にして次のようなものを作りました。

●クライアント側 (index.html)
<html>
<head>
</head>
<body>
<script type="text/javascript" src="j2p.php?parm=1"></script>
</body>
</html>

●サーバー側 (j2p.php)
<?php
$parm = $_GET['parm'];
header("Content-type: application/x-javascript");
if ($parm == 1) {
echo "document.write('1ですよ')";
} else {
echo "document.write('1じゃないですよ')";
}
?>

上記は問題なく動作するのですが、サーバー側のプログラムを、次のように
変更し、直接$parmを出力しようとすると何も表示されません。

●サーバー側 (NG1)
<?php
$parm = $_GET['parm'];
header("Content-type: application/x-javascript");
echo "document.write('<?php echo $parm; ?>')";
?>

どこか、考え方が根本的に間違っているのかも知れませんが、この問題で
ずっと悩んでおり、先に進めない状態です。

上記プログラムのおかしな点、改善点など、アドバイスよろしくお願い
いたします。

A 回答 (3件)

echo "document.write('".$parm."')";

この回答への補足

アドバイスありがとうございます。

おかげさまで無事に表示することができました。
ただ、document.writeの中に記述された変数$parmの左右にピリオドが
付いており、それをダブルクォーテーションでくくっていることの
解釈がよくわからないでいます。
この点について解説いただければ幸いです。
よろしくお願いいたします。

補足日時:2009/09/18 15:26
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2009/09/19 12:20

>echo "document.write('".$parm."')";


PHPから出力する文字列を、変数と文字列で分けているだけです。
""で括られる部分はPHPから文字列として出力するのです。
つまり
document.write('
$parm
')
を結合しているという事です。
ちなみに、ピリオドは変数や文字列などを繋ぐ“結合演算子”で、JavaScriptで言えば“+”に匹敵します。
    • good
    • 0
この回答へのお礼

ありがとうございました。
おかげさまで良く理解できました。

お礼日時:2009/09/19 12:19

echo "document.write('<?php echo $parm; ?>')";



echo "document.write('$parm')";

ではどうだろう。

この回答への補足

アドバイスありがとうございます。

おかげさまで無事に表示することができました。
ただ、document.writeの中に、phpの変数$parmを直接記述することの
意味がよくわかりません。
私のNGの例の、<?php echo $parm; ?>ではうまくいかない理由について
ご説明いただければ幸いです。
(phpの中でphpを呼んでるのがまずいのでしょうか。。)

補足日時:2009/09/18 15:24
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2009/09/19 12:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!