• ベストアンサー

phpの変数について

phpの変数として<?= ~ ?>は設定できないのでしょうか? 例) $test = "<?= $smple ?>" <html> <body> <p>$test</p> </body> </html> 上の記述だと文字列として扱われてしまうので、以下のように表示されてしまいます。 <html> <body> <p><?= $smple ?></p> </body> </html> 変数を使用して、通常のphp構文のように使用することはできないのでしょうか? 若しくは、同じことを実現するためには別のやり方や関数などを用いなければならないのでしょうか? 基本的なことを質問している気がしますが、どなたかご教授願います。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

maenet1972です。 提示されたソースを見て、ようやく理解出来ました。 つまり、"smp01""smp01"を判別して出力方法を変えたい訳ですね。 単純に"<?=~?>"は必要ありませんので、そのまま変数を入れてください。 $smpnum01 = $_POST[smp01]; switch ( $smpnum01 ) { case 1: $str01 = "パターン01"; break; case 2: $str01 = "パターン02<select name='smp02' onChange='document.myform.submit();'><option value='1'" . ($smpnum02==1) ? " selected":"".">選択01</option> ・・・※以下略 </select><br>{$str02}<br>"; break; ・・・※以下略 なので、今回の件はincludeは全く必要としません。

minoru4891
質問者

お礼

maenet1972さん、有難うございます。 お陰様で希望通りの動作ができました。 tany180sxさんに掲示された記述とあわせて考えてみた後に、 クォーテーションの使い方を変更しました。 以下、ご参考までに。 <option value='1'" .( $smpnum02==1?' selected':'' ) .">test01</option> これでバッチリです。 殆どjsを使うことなくできそうです。

minoru4891
質問者

補足

早速試してみましたところ、正しく表示されませんでした。 問題となる『switch ( $smpnum01 ) { ~ の case2』の箇所ですが、 selectboxが全く表示されずに、$str02の変数部分だけに「selected」と表示されてしまいます。 これは、一体なぜでしょう??? よろしくお願いします。

その他の回答 (3)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

$sample = 'hoge'; $test = '<?= $sample ?>'; echo '<p>' . eval('?>' . $test) . '</p>'; とすればできなくもないですが。 > <option value='1'<?= ( $smpnum02==1?' selected':'' ) ?>>選択01</option> echo '<option' . ($smpnum02 == 1 ? ' selected' : '') . '>選択01</option>'; ではだめなんでしょうか。 SELECTは大概めんどくさいので関数なりライブラリ化しといた方がいいかも。 $select = form_select($name, $value, $collection, $attributes); あとは、根本的に長いHTMLはテンプレートとして別に切り出した方がいいかも。 それと $_SERVER['PHP_SELF'] はNG。

minoru4891
質問者

補足

<?= ?>の使用は強引過ぎて分かり難いですね。 >ではだめなんでしょうか。 ダメということはありません。慣れや使い勝手の問題でしょうか・・・。 >SELECTは大概めんどくさいので関数なりライブラリ化しといた方がいいかも。 そうですね。実際のoptionデータは別のファイルデータやDBからのデータをselet文で集めてHTML上には<option></option>内には変数1行しか書きません。 >それと $_SERVER['PHP_SELF'] はNG。 スイマセン。 本ちゃん用ではなく、ベースを作っていたので端折ってしまいました (汗 >あとは、根本的に長いHTMLはテンプレートとして別に切り出した方がいいかも。 “アドバイス”ではなく“回答”ということなので、テンプレート化したファイルを読み込む時の記述など簡単な例を挙げて頂けると助かります。 よろしくお願いします。

回答No.2

minoru4891さんがやりたい事は何となくわかりますが、HTML本文中にphpを実行する場合、基本的にphpからHTMLを出力した時点でphpは実行されません。ですが、そのHTML(<?= $smple ?>を含めた)をサーバーにファイルとして保存し、includeした場合は“$smple"はきとんとPHPの変数として評価されます。 ご理解されましたか?

minoru4891
質問者

補足

別の方の補足に詳細を明記したのですが、 補足のサンプルコードの場合、includeを使用するには、どの部分にどのように記述すればよいのでしょうか? 若しくは、どのように修正をすればよいのでしょうか? よろしくお願いします。

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

あなたが理想としている出力結果はどういう状態なんでしょうか。

minoru4891
質問者

補足

やはり、詳細を書かないと答えようがないですよね。 最終目的はswitch~case~を使ってリストボックスを連動させてページの表示をさせたいのです。JavaScriptを多用すればできるのですが、 あまり使いたくないので奮闘中でした。 以下、サンプルソースを掲示します。 <?php $smpnum02 = $_POST[smp02]; switch ( $smpnum02 ) { case 1: $str02 = "結果01"; break; case 2: $str02 = "結果02"; break; case 3: $str02 = "結果03"; break; default: break; } $smpnum01 = $_POST[smp01]; switch ( $smpnum01 ) { case 1: $str01 = "パターン01"; break; case 2: $str01 = "パターン02<select name='smp02' onChange='document.myform.submit();'> <option value='1'<?= ( $smpnum02==1?' selected':'' ) ?>>選択01</option>                       ↑ここ <option value='2'<?= ( $smpnum02==2?' selected':'' ) ?>>選択02</option>                       ↑ここ <option value='3'<?= ( $smpnum02==3?' selected':'' ) ?>>選択03</option>                       ↑ここ </select><br><?= $str02 ?><br>";             ↑ここ break; case 3: $str01 = "パターン03<select name='test'> <option value='1'>その他01</option> <option value='2'>その他02</option> </select>"; break; default: break; } ?> <html> <body> <form action="<?=$_SERVER[PHP_SELF]?>" method="POST" name="myform"> <select size="1" name="smp01" onChange="document.myform.submit();"> <option value='1'<?= ( $smpnum01==1?' selected':'' ) ?>>テスト01</option> <option value='2'<?= ( $smpnum01==2?' selected':'' ) ?>>テスト02</option> <option value='3'<?= ( $smpnum01==3?' selected':'' ) ?>>テスト03</option> </select><br> <?= $str01 ?><br> </form> </body> 以上ですが、↑でここと指している部分が悩みドコです。 もう一方のご指摘通りincludeも考えたのですが、どのように記述してよいか混乱してしまいました。他にも色々と試したのですが、 知識不足のためか解決できません。 何か良い方法はありますでしょうか? この方法ではやはり無理があるのでしょうか? よろしくお願いします。

関連するQ&A

専門家に質問してみよう