• ベストアンサー

includeにより他の部分が表示されなくなる原因

あるサイトを作っています。 サイトのメイン部分の上段に、 <?php include("*****.php"); ?> でインクルードすると、それより下のphpが絡んだ部分が表示されなくなります。 インクルードした内容はきちんと表示されます。 また、 <?php include("******.php"); ?> をコメントアウトしてみると、それより下のphpが絡んだ部分は表示されます。 調べてみてるのですが答えが見つかりません。 どういった問題によりこういうことが起きるのでしょうか? アドバイスをいただけないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

ANo.3です >これは単純に、<html></html>や<body></body>タグを消して、 >phpの部分と<form></form>のみ書いてそれをincludeするということでしょうか? いいえ。開始タグまで消してしまってはダメです。 前の回答でも書きましたが、今現在どういうhtmlソースがブラウザに返っているか(ブラウザの「ソース表示」で)確認されましたか? そして「どういうhtmlソースを返せばいいか」をちゃんと設計してからphpソースを書いてください。返すhtmlが(ブラウザがどうレンダリングするかはひとまず置くとしても【正しい】htmlが)書けない状態でphpスクリプトを書くことはできません(php以前の問題です)。

lolololol
質問者

お礼

アドバイス頂いた点を中心に修正を加え、無事うまくいきました。 ありがとうございます。

その他の回答 (3)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>include先のPHPファイルは以下のようなコードです。 (中略) ><?php endwhile; ?> > ></body> ></html> って、</html>でhtml文書が終わっていますよね?それ以降に何をブラウザに返そうとしているんでしょうか? ブラウザ側で受け取っているhtmlソースを確認してください。ちゃんと受け取っているけど、その前にhtmlが終了しているので(ブラウザが)レンダリングしていないだけではありませんか?

lolololol
質問者

補足

<form>~~~~</form> という部分を、元のページのメイン画面の一部に表示させようとしています。 これは単純に、<html></html>や<body></body>タグを消して、 phpの部分と<form></form>のみ書いてそれをincludeするということでしょうか? だいぶ頭の中がこんがらがってしまい要領をつかめずにいます。申し訳ありません。。

  • neko-ten
  • ベストアンサー率55% (1287/2335)
回答No.2

include先のPHPみないと解決するわけない include先PHPの出力内容でタグ閉じしてないのがあるとか、そういうのが原因だろう、って#1の人は言っているのです。 簡単にいえば、「******.php」の記述ミスである可能性が高い。 それ以上の可能性はコード見ないと不明

lolololol
質問者

補足

include先のファイルは確認しているのですが、動作も正常でタグ閉じ等記述ミスはないのでは認識しているのですが、相談をさせていただいたような問題が生じているということはやはりinclude先のファイルの内容の記述の仕方等に問題があるのだとは思います。 図々しいかとは思いますが、出力部分での記述ミスがあればご指摘いただけないでしょうか。 include先のPHPファイルは以下のようなコードです。 <?php $debug = false; $url = "localhost"; $user = "DBユーザー名"; $pass = "DBパスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($_GET); mysql_set_charset('utf8'); if($_SERVER["REQUEST_METHOD"] != "GET") { echo "Error: invalid method"; exit(); } $query = "SELECT * FROM テーブル名 ORDER BY id DESC limit 4"; $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>新着情報</title> </head> <body> <?php while($row = mysql_fetch_assoc($result)): ?> <div class="row"> <div id="contents" class="span12 area-ma"> <h2 class="f2"><b>■<a style="color:#2d2d2d;"href="recent.php">新着情報</a></b></h2>(5) <div class="row-fluid"> <!--span3--> <div class="span3"> <?php echo '<img src="get_image.php?id=' . $row['id'] . '" width="" height="">' ?> <div class="fl"style="margin-left: 6px;"> <div> <font class="c2">場所</font> <font class="c0"><?php echo $row['area']; ?></font> </div> <div> <font class="c2">名前</font> <font class="c0"><?php echo $row['name']; ?></font> </div> <form action="detail.php" method="GET" class="detail"> <input type="submit" value="detail"> <input type="hidden" name="key" value="<?php echo $row['name'] ?>"> </form> </div> </div> </div> </div> </div> <?php endwhile; ?> </body> </html>

回答No.1

>どういった問題によりこういうことが起きるのでしょうか? インクルードした*****.phpのタグが正常に閉じてないから。 インクルードすると 「<?php include("******.php"); ?>が無かった事になって、その代わり、その位置に******.phpの中身が挿入される」 のです。 ******.phpの一番最後に「こっから後ろは全部コメントだよ」って書いてあったら、<?php include("******.php"); ?>のある行から最後まで全部がコメントになってしまいます。 同様に、******.phpの「一番最後のタグが閉じてない」と、そこから後ろにあるすべてが「タグの中に書かれた物」になってしまって、何も表示されなくなるでしょう。

lolololol
質問者

補足

他にも同じように<?php include~~~~~; ?>があるのですが、それについては問題なくすべてが表示されています。 ?>で閉じたということにはなっていないということなのでしょうか? 具体的にどうしたらいいか見えてこなくてつまづいています。 良い対処法があれば教えていただけないでしょうか。

関連するQ&A