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

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

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

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

Q&A

解決済

3回答

4692閲覧

拡張子phpのファイルで一部htmlが表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2016/02/20 08:36

編集2016/02/20 08:49

本を参考にPHPで掲示板を作っているのですが、ソースコードの途中でhtmlが表示されないくなりました。おそらくPHP側でエラーが起きているのだと思いますし、場所もほぼ分かっていますが、理由がわかりません。

html

1<?php 2 3 $dsn = 'mysql:host=localhost;dbname=***********;charset=utf8'; 4 $db_user = '***********'; 5 $db_pass = '***********'; 6 7 // 1ページに表示されるコメントの数 8 $num = 10; 9 10 // ページ数が指定されている時 11 $page = 0; 12 if (isset($_GET['page']) && 0 < $_GET['page']) { 13 $page = intaval($_GET['page']) -1; 14 } 15 16 try { 17 // PDOに接続 18 $db = new PDO($dsn, $db_user, $db_pass); 19 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 20 21 // プリペアドステートメントを作成 22 $stmt = $db->prepare("select * from bbs order by date desc limit :page, :num"); 23 24 // パラメーターを割り当て 25 $page *= $num; 26 $stmt->bindParam(':page', $page, PDO::PARAM_INT); 27 $stmt->bindParam(':num', $num, PDO::PARAM_INT); 28 29 // クエリの実行 30 $stmt->execute(); 31 } catch(PDOExeption $e) { 32 echo "エラー : " . $e->getMessage(); 33 } 34?> 35<!-- 省略 --> 36 <div class="center"> 37 <h1>掲示板</h1> 38 <form action="write.php" method="post"> 39 <p> 40 名前 : <input type="text" name="name"> 41 </p> 42 <p> 43 タイトル : <input type="text" name="title"> 44 </p> 45 <p> 46 本文<br><textarea name="body"></textarea> 47 </p> 48 <p> 49 削除パスワード(数字4桁) : <input type="password" name="pass"> 50 </p> 51 <p> 52 <input type="submit" value="書き込む"> 53 </p> 54 </form> 55<!-- ここまでは表示される --> 56<?php 57 while ($row = $stmt->fetch()): 58 $title = $row['title'] ? $row['title'] : '(無題)'; 59?> 60<!-- ↓ここから表示されない --> 61 62 <p> 63 名前 : <?php echo $row['name']; ?> 64 </p> 65 <p> 66 タイトル : <?php echo $row['title']; ?> 67 </p> 68 <p> 69 本文<br><?php echo nl2br($row['body'], false); ?> 70 </p> 71 <p> 72 <?php echo $row['date']; ?> 73 </p> 74 75<?php 76 endwhile; 77 78 try { 79 // プリペアドステートメントを作成 80 $stmt->$db->prepare("select count(*) from bbs"); 81 82 // クエリの実行 83 $stmt->execute(); 84 } catch (PDOException $e) { 85 echo "エラー : " . $e->getMessage(); 86 } 87 88 // コメントの件数を取得 89 $comments = $stmt->fetchcolumn(); 90 91 // ページ数を計算 92 $max_page = ceil($comments / $num); 93 94 echo '<p>'; 95 for ($i = 1; $i <= $max_page; $i++) { 96 echo '<a href="bbs.php?page=${page}">${i}</a>&nbsp;'; 97 } 98 echo '</p>'; 99?> 100 101 </div> 102</body> 103</html> 104 105タイプミス発見 106

恐らく原因は whileだろうと思っていますし、実際に whiule 及び endwhile を消すと

html

1 <p> 2 名前 : <?php echo $row['name']; ?> 3 </p> 4 <p> 5 タイトル : <?php echo $row['title']; ?> 6 </p> 7 <p> 8 本文<br><?php echo nl2br($row['body'], false); ?> 9 </p> 10 <p> 11 <?php echo $row['date']; ?> 12 </p>

は表示されます(PHP部分は非表示)
なぜ表示されないのですか?
そして、どうしたら表示されるようになりますか?!
while

タイプミス発見

php

1//before 2 try { 3 // プリペアドステートメントを作成 4 $stmt->$db->prepare("select count(*) from bbs"); 5

php

1//after 2 try { 3 // プリペアドステートメントを作成 4 $stmt = $db->prepare("select count(*) from bbs"); 5

これで

html

1 <p> 2 名前 : <?php echo $row['name']; ?> 3 </p> 4 <p> 5 タイトル : <?php echo $row['title']; ?> 6 </p> 7 <p> 8 本文<br><?php echo nl2br($row['body'], false); ?> 9 </p> 10 <p> 11 <?php echo $row['date']; ?> 12 </p>

以外は表示されました。
while
しかしpタグの中身が表示されません!?

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

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

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

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

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

guest

回答3

0

ベストアンサー

phpの問題ではなく、sqlの結果です。

whileをなくした時にもカラムの内容が表示されていないことから抽出結果がゼロ件のようです。
抽出結果がゼロ件の場合whileが最初から抜けてしまうため表示されません。

テーブルbbsにデータをinsertした状態で実行してみてください。

投稿2016/02/20 23:35

編集2016/02/20 23:40
piyoon

総合スコア68

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

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

退会済みユーザー

退会済みユーザー

2016/02/22 07:46

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

0

エラー出力が抑制されているような感じなので、<?php 直下に、

PHP

1ini_set('display_errors',1);

を入れてみてください。

投稿2016/02/20 14:27

shi_ue

総合スコア4437

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

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

退会済みユーザー

退会済みユーザー

2016/02/22 07:45

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

0

(回答になっていなかったためスコープについての記述は削除しました)

質問とは直接関係ないですが $stmt->fetch() も例外を発生する可能性があるので try の中に入れてしまってください。

lang

1<?php 2try { 3 // 中略 4 $stmt->execute(); 5 6 while ($row = $stmt->fetch()): 7?> 8 <p><?php echo $row['name']; ?></p> 9<?php 10 endwhile; 11} catch (PDOException $e) { 12 // 省略 13}

  
----- 補足 -----
下記のコードを先頭に挿入してエラーが出ないか試してみてください。

lang

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4?>

投稿2016/02/20 08:46

編集2016/02/20 09:51
chitoku

総合スコア1610

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

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

shi_ue

2016/02/20 08:59 編集

これ本当ですか? <?php try {   $aaa = 123; } catch(Exception $e) {   // } echo $aaa; こうすると 123 と表示されます。なんでだろ?
退会済みユーザー

退会済みユーザー

2016/02/20 09:03

回答ありがとうございます! 解決策をくださって誠にありがたいのですが、残念ながら私は理解できませんせした!! 中略の部分は何ですか? try文は <?php while ($row = $stmt->fetch()): $title = $row['title'] ? $row['title'] : '(無題)'; ?> この中に書くのでしょうか? ちなみに本を写生したつもりなのですが、なぜその本ではそのプログラムになっているのでしょうか? ヴァージョンや環境によって違うことはあるのですか? ハズレの本をひいたかもしれませんね・・・
chitoku

2016/02/20 09:05

shi_ue さん: try はスコープを作りませんね…回答を修正しました、ありがとうございます。
chitoku

2016/02/20 09:09

fetchColumn が小文字になっているみたいですがそれはどうですか?
退会済みユーザー

退会済みユーザー

2016/02/20 09:12

気づきませんでした! ありがとうございます! 変わりませんでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問