前提・実現したいこと
PHP5.4とMySQLで簡易的な掲示板を作っており、投稿を表示させたいです。
発生している問題・エラーメッセージ
フォームで入力された情報の一覧を下に表示させたいのですが、表示できません。データベースを確認したところ、入力した情報はちゃんとセットされてました。おそらく、データを取得するSQL文か表示させるプログラムに誤りがあると思うのですが、解決できません。
該当のソースコード
php
1//bbs.php 2<?php 3ini_set('display_errors', true); 4 5// 全てのエラーを表示する。 6error_reporting(E_ALL); 7 8// DB接続 9require('dbconnection.php'); 10 11 12$errors=array(); 13 14//POST処理 15if($_SERVER['REQUEST_METHOD']==='POST'){ 16 $name=null; 17 if(!isset($_POST['name'])||!strlen($_POST['name'])){ 18 $errors['name']='名前を入力してください'; 19}else if(strlen($_POST['name'])>40){ 20 $errors['name']='名前は40文字以内で入力してください'; 21}else{ 22 $name=$_POST['name']; 23} 24 25 $comment=null; 26 if(!isset($_POST['comment'])||!strlen($_POST['comment'])){ 27 $errors['comment']='メッセージを入力してください'; 28 }else if(strlen($_POST['comment'])>200){ 29 $errors['comment']='ひとことは200文字以内で入力してくだい'; 30 }else{ 31 $comment=$_POST['comment']; 32 } 33 34 35 //エラーがなければ保存 36 if(count($errors)===0){ 37 $stmt=$db->prepare("INSERT INTO post SET name=?,comment=?,created_at=NOW()"); 38 $stmt->execute(array( 39 $_POST['name'], 40 $_POST['comment'] 41 )); 42 43 $db=null; 44 header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 45 exit(); 46 } 47} 48 49 //投稿された内容を取得するSQLを作成して結果を取得 50 $sql="SELECT * FROM post ODER BY created_at DESC"; 51 $result=$db->query($sql); 52 53 //取得した結果を$postsに格納 54 $posts=array(); 55 if($result !==false){ 56 while($post=$result->fetch()){ 57 $posts[]=$post; 58 } 59 } 60 61 // 取得結果を解放して接続を閉じる 62 $result=null; 63 $db=null; 64 65include 'views/bbs_view.php'; 66?>
php
1//views/bbs_view.php 2<!DOCTYPE html> 3<html lanhg="ja"> 4 <head> 5 <meta charaset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 <title>Board</title> 8 <meta name="description" content=""> 9 <link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css"> 10 <link rel="stylesheet" href="css/style.css"> 11 </head> 12 13 <body> 14 <h1 class="maintitle">Board</h1> 15 16 <form action="bbs.php" method="post"> 17 <?php if(count($errors)>0): ?> 18 <ul class="error_list"> 19 <?php foreach($errors as $error):?> 20 <li> 21 <?php echo htmlspecialchars($error,ENT_QUOTES,'UTF-8')?> 22 </li> 23 <?php endforeach;?> 24 </ul> 25 <?php endif; ?> 26 27 <div> 28 <label for="name">名前</label> 29 <input type="text" name="name" id="name"> 30 </div> 31 32 <div> 33 <label for="comment">メッセージ</label> 34 <textarea name="comment" id="comment" ></textarea> 35 </div> 36 37 <input type="submit" name="submit" value="送信"> 38 39 </form> 40 41 42 <?php if(count($posts)>0): ?> 43 <ul> 44 <?php foreach($posts as $post): ?> 45 <li> 46 <?php echo htmlspecialchars($post['name'],ENT_QUOTES,'UTF-8');?>: 47 <?php echo htmlspecialchars($post['comment'],ENT_QUOTES,'UTF-8');?> 48 -<?php echo htmlspecialchars($post['created_at'],ENT_QUOTES,'UTF-8');?> 49 </li> 50 <?php endforeach; ?> 51 </ul> 52 <?php endif;?> 53 54 </body> 55</html> 56
php
1//dbconnection.php 2<?php 3try { 4 $db = new PDO('mysql:dbname=bbs;host=127.0.0.1', 'root', 'password'); 5} catch (PDOException $e) { 6 echo 'DB接続エラー: ' . $e->getMessage(); 7} 8?>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/09 03:54