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

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

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

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

Q&A

解決済

5回答

2242閲覧

ヒアドキュメント

ryohasegawa

総合スコア437

PHP

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

0グッド

0クリップ

投稿2017/03/31 16:53

編集2017/04/04 06:42

PHPでサイトの作成での勉強で、ログインのモーダルウインドウを表示するようにしたんですが、全ページにつけるとなると結構たいへんで、後にデザイン変更する時も大変になるのでと思い。管理する関数を作りヒアドキュメントで管理するようにしました。
ですが、echo <<< EOT EOT;内でセッションを使っている箇所があり、エラーが出てしまいます。
このような場合は、もっと他の方法があったりしますか?

###追記
体調を崩してしまい追記が遅れましたすいません。

php

1 <!-- ログインしていなかったら --> 2 <?php if(!$app->login){ ?> 3 <section> 4 <div id="open2" class="btn" style="margin-top: 20px;">ログイン <br> or <br> 新規登録</div> 5 </section> 6 7 <section id="modalwindow"> 8 <div id="mask" class="hidden"></div> 9 10 <div id="window" class="hidden"> 11 <div id="close" class="hidden">☓ 閉じる</div> 12 <br> 13 <div id="box"> 14 <form action="" method="post" id="login2"> 15 <p> 16 <input type="text" name="email" placeholder="メールアドレス" value="<?= isset($app->getValues()->email2) ? h($app->getValues()->email2) : ''; ?>"> 17 </p> 18 <p> 19 <input type="password" name="password" placeholder="パスワード"> 20 </p> 21 <p class="err"><?= h($app->getErrors('login')); ?></p> 22 <div class="btn" onclick="document.getElementById('login2').submit();">ログイン</div> 23 <input type="hidden" name="token" value="<?= h($_SESSION['token']); ?>"> 24 <input type="hidden" name="posttype" value="login"> 25 <hr> 26 <p class="btn"><a href="./signup.php">新規登録はこちら</a></p> 27 </form> 28 </div> 29 <!-- <script src="./javascript/tabmenu.js"></script>--> 30 </div> 31 </section> 32 33 <!-- ログインしていたら --> 34 <?php }else{ ?> 35 省略 36 <?php } ?> 37

ログインしていなかったら、モーダルウインドウを表示するようにしたいのですが、これを全ページに付けたく、

php

1public function modalwindow(){ 2 echo <<< EOT 3<section id="modalwindow"> 4 <div id="mask" class="hidden"></div> 5 6 <div id="window" class="hidden"> 7 <div id="close" class="hidden">☓ 閉じる</div> 8 <br> 9 <div id="box"> 10 <form action="" method="post" id="login2"> 11 <p> 12 <input type="text" name="email" placeholder="メールアドレス" value="<?= isset($app->getValues()->email2) ? h($app->getValues()->email2) : ''; ?>"> 13 </p> 14 <p> 15 <input type="password" name="password" placeholder="パスワード"> 16 </p> 17 <p class="err"><?= h($app->getErrors('login')); ?></p> 18 <div class="btn" onclick="document.getElementById('login2').submit();">ログイン</div> 19 <input type="hidden" name="token" value="<?= h($_SESSION['token']); ?>"> 20 <input type="hidden" name="posttype" value="login"> 21 <hr> 22 <p class="btn"><a href="./signup.php">新規登録はこちら</a></p> 23 </form> 24 </div> 25 <!-- <script src="./javascript/tabmenu.js"></script>--> 26 </div> 27 </section> 28EOT; 29

このようにしました。そして、表示したい場所でこの関数を呼び出せばいいと思ったのですが、
イメージ説明
エラーが出てしまうんですよ。
なので、違う方法はないかという質問です。

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

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

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

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

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

maisumakun

2017/04/01 01:06

どのようなコードを書いたか、現物を示して下さい。
退会済みユーザー

退会済みユーザー

2017/04/03 03:28

我々はエスパーじゃないので、どういうコードを書いてどういうエラーが表示されたかを示してくれないと、解決につながらないと思います。まー、ヒアドキュメント内で変数参照の仕方が間違ってるだけなんじゃないかと察しますが。
guest

回答5

0

PHP のタグは閉じることができますがご存知ですか?

php

1<?php 2function print_login_modal() 3{ 4 if (!is_logged_in()) { 5?> 6 <div class="login-modal"> 7 未ログインのようです: <a href="./login.php">ログイン</a> 8 </div> 9<?php 10 } 11}

投稿2017/03/31 18:19

chitoku

総合スコア1610

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

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

ryohasegawa

2017/04/01 00:33

そういう事ではなく、別ファイル(クラス)で管理したく、呼び出し元関数ないでecho 〈〈〈 EOTを使いたいんですよ
chitoku

2017/04/01 04:59 編集

呼び出し元関数内で PHP のタグを閉じれば良いです。ヒアドキュメントはインデントがズレるので出力時に使うと可読性が下がるためおすすめしません。
ryohasegawa

2017/04/01 06:30

Html文とPHP文が混在しているのを関数化したいんですよ
Zuishin

2017/04/01 08:40

HTML と PHP は混在するものです。させないのであれば別の言語でいいでしょう。
chitoku

2017/04/01 13:39

出力を行うという意味の関数になります。PHP には存在しない語であるため「Html文」が何を指しているのかわかりませんが、テンプレートエンジンに対して「混在」というのはおかしな話です。
ryohasegawa

2017/04/05 13:57

要するに、フォームを全ページに付けたいのですが、変更時に変更しやすいよう、全ページでフォームのHTMLの記述を呼び出したいんですよ。
guest

0

ベストアンサー

php

1function a() 2{ 3 echo <<< EOT EOT 4 <h1>aaa</h1> 5 EOT EOT; 6} 7 8a(); 9a(); 10a();

察するにこういうことがしたいのではないか。

投稿2017/04/01 06:46

toutou

総合スコア2050

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

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

Zuishin

2017/04/01 06:49

「呼び出し元」と書かれていたのが、「呼び出し先」の間違いということですか。なるほど。
ryohasegawa

2017/04/04 06:45

そうですね。 <h1>aaa</h1> のところに、フォームのコードを入れたいわけです。 そのコードは追記で書かさせてもらいました。
guest

0

情報の追加・修正欄はご覧にならないようなので、ここに書きます。

ヒアドキュメントと言うのは、「ヒア(ここ)にデータを置きます」という書き方です。

質問者さんは察するにデータを別ファイルに置いてそれを色んなファイルから呼び出したいんじゃないですか?
そう言う時にはヒアドキュメントは使えません。

質問の意図が伝わらないので、実際に今あるコードを見せて解説してください。ここではなく、質問を編集して。

投稿2017/04/01 05:08

Zuishin

総合スコア28656

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

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

0

ログイン状態を点検する処理を別ファイル化して
すべての処理の冒頭でrequire_once()で読み込むとか。

$_SESSIONとか$_COOKIEとか活用して
未ログイン状態ならリダイレクトのみのヘッダー出力してexitしちゃうとかで。

わざわざログインフォームを個別ページに設置しなくてもいいんじゃないかな。

ネットで見つけた事例:
ログインのリダイレクト処理 | 365日の紙PHP(8日目) | Feijoa.jp

--

修正された質問文を見て、直してみました。
文法チェックのみ。
要は、ヒアドキュメントはあくまで文字列なので、
その記述中に?><?phpとかかけないので、
変数を用意しておけばいいじゃない、ってことで。

PHP

1public function modalwindow(){ 2 $mail_address = isset($app->getValues()->email2) ? h($app->getValues()->email2) : ''; 3 $get_errors_login = h($app->getErrors('login')); 4 $token = h($_SESSION['token']); 5 echo <<< EOT 6 <section id="modalwindow"> 7 <div id="mask" class="hidden"></div> 8 9 <div id="window" class="hidden"> 10 <div id="close" class="hidden">☓ 閉じる</div> 11 <br> 12 <div id="box"> 13 <form action="" method="post" id="login2"> 14 <p> 15 <input type="text" name="email" placeholder="メールアドレス" value="$mail_address"> 16 </p> 17 <p> 18 <input type="password" name="password" placeholder="パスワード"> 19 </p> 20 <p class="err">$get_errors_login</p> 21 <div class="btn" onclick="document.getElementById('login2').submit();">ログイン</div> 22 <input type="hidden" name="token" value="$token"> 23 <input type="hidden" name="posttype" value="login"> 24 <hr> 25 <p class="btn"><a href="./signup.php">新規登録はこちら</a></p> 26 </form> 27 </div> 28 <!-- <script src="./javascript/tabmenu.js"></script>--> 29 </div> 30 </section> 31EOT; 32 33}

投稿2017/04/03 03:40

編集2017/04/04 06:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryohasegawa

2017/04/04 06:44

はじめはログインページへ飛ばす処理だったのですが、ページにフォームを表示させるようにしようと思い、こうしました。
guest

0

一度変数にうけてprintf(sprintf)してやればいいのでは?

PHP

1function modalwindow(){ 2$str=<<< EOT 3<section id="modalwindow"> 4 <div id="mask" class="hidden"></div> 5 6 <div id="window" class="hidden"> 7 <div id="close" class="hidden">? 閉じる</div> 8 <br> 9 <div id="box"> 10 <form action="" method="post" id="login2"> 11 <p> 12 <input type="text" name="email" placeholder="メールアドレス" value="%s"> 13 </p> 14 <p> 15 <input type="password" name="password" placeholder="パスワード"> 16 </p> 17 <p class="err">%s</p> 18 <div class="btn" onclick="document.getElementById('login2').submit();">ログイン</div> 19 <input type="hidden" name="token" value="%s"> 20 <input type="hidden" name="posttype" value="login"> 21 <hr> 22 <p class="btn"><a href="./signup.php">新規登録はこちら</a></p> 23 </form> 24 </div> 25 <!-- <script src="./javascript/tabmenu.js"></script>--> 26 </div> 27 </section> 28EOT; 29printf( 30 $str, 31 isset($app->getValues()->email2) ? h($app->getValues()->email2) : '', 32 h($app->getErrors('login')), 33 h($_SESSION['token']) 34); 35} 36

投稿2017/04/04 06:54

yambejp

総合スコア114585

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

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

ryohasegawa

2017/04/05 13:55

isset($app でエラーが出ますね。 やはり、HTMLのフォームをPHPでこのように表示する事は不可能なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問