本を参考に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> '; 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部分は非表示)
なぜ表示されないのですか?
そして、どうしたら表示されるようになりますか?!
タイプミス発見
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>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/02/22 07:46