teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コード内容修正しました。

2018/05/31 11:28

投稿

torinoto7
torinoto7

スコア19

title CHANGED
@@ -1,1 +1,1 @@
1
- コメントに評価機能を追加したい
1
+ <追記しました>コメントに評価項目を追加したが表示されな
body CHANGED
@@ -1,20 +1,17 @@
1
- XAMPPMysql利用してDBを作成し、コメント機能を追加したのですが、
1
+ PHP教科書見ながらコメント機能をつけてみたのですが、
2
- 評価項目も追加しようと思い、どのように追加したら良いのか分かりません
2
+ 評価項目も追加しようと思い、手探で行ってみした
3
+ テーブルに評価のカラムを追加してPHPもカラム名を追記したのですが、
3
- 教えて頂きた。宜しくお願いし
4
+ うま表示されせん
5
+ 関数についてもよく分かっていない状態なので詳細教えて下さい。
4
6
 
5
- DB内容】
7
+ テーブル内容】
6
- CREATE TABLE bbs(
7
- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
8
+ ![イメージ説明](3183d87a4d589fe1f5d5211e9c772951.png)
8
- name VARCHAR(255) NOT NULL,
9
- title VARCHAR(255),
10
- body TEXT NOT NULL,
11
- date DATETIME NOT NULL
12
- )DEFAULT CHARACTER SET=utf8;
13
9
 
14
10
 
15
11
  【PHP記載内容】
16
12
 
13
+ ```
17
- ```<?php
14
+ <?php
18
15
 
19
16
  // エラー表示
20
17
  error_reporting(E_ALL);
@@ -23,6 +20,7 @@
23
20
  // データの受け取り
24
21
  $name = $_POST['name'];
25
22
  $title = $_POST['title'];
23
+ $star = $_POST['star'];
26
24
  $body = $_POST['body'];
27
25
 
28
26
  //必須項目チェック(名前か本文が空ではないか?)
@@ -40,14 +38,15 @@
40
38
  $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
41
39
  //プリペアドステートメント作成
42
40
  $stmt = $db->prepare("
43
- INSERT INTO bbs (name, title, body, date )
41
+ INSERT INTO bbs (name, title, star, body, date )
44
- VALUES (:name, :title, :body, now() )"
42
+ VALUES (:name, :title, :star, :body, now() )"
45
43
  );
46
44
  print_r($db->errorInfo());
47
45
 
48
46
  //パラメータを割り当て
49
47
  $stmt->bindParam(':name', $name, PDO::PARAM_STR);
50
48
  $stmt->bindParam(':title', $title, PDO::PARAM_STR);
49
+ $stmt->bindParam(':star', $star, PDO::PARAM_STR);
51
50
  $stmt->bindParam(':body', $body, PDO::PARAM_STR);
52
51
 
53
52
  //クエリの実行
@@ -60,49 +59,44 @@
60
59
  die ('エラー:' . $e->getMessage());
61
60
  }
62
61
  ?>
63
- コード
64
62
  ```
65
-
66
63
  【HTML記載内容】
67
- ```<!doctype html>
68
64
 
65
+ ```
69
66
  <?php
70
- // 1ページに表示されるコメントの数
71
- $num = 3;
72
-
73
- //データベースに接続
74
- $dsn = 'mysql:host=localhost;dbname=tabe1;charset=utf8';
75
- $user = 'tabe1user';
67
+ while ($row = $stmt->fetch()):
76
- $password = '1111'; //DBパスワード
77
-
78
- //ページ数が指定されているとき
79
- $page = 0;
80
- if (isset($_GET['page']) && $_GET['page'] > 0) {
68
+ $title = $row['title'] ? $row['title'] : '(無題)';
81
- $page = intval($_GET['page']) -1;
82
- }
83
-
84
- try {
85
- $db = new PDO($dsn, $user, $password);
86
- $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
87
- //プリペアドステートメントを作成
88
- $stmt = $db->prepare(
89
- "SELECT * FROM bbs ORDER BY date DESC LIMIT
90
- :page, :num"
91
- );
92
- //パラメータを割り当て
93
- $page = $page * $num;
94
- $stmt->bindParam(':page', $page, PDO::PARAM_INT);
95
- $stmt->bindParam(':num', $num, PDO::PARAM_INT);
96
- //クエリの実行
97
- $stmt->execute();
98
- } catch(PDOException $e){
99
- echo "エラー:" . $e->getMessage();
100
- }
101
-
102
69
  ?>
70
+ <p>名前:<?php echo $row['name'] ?></p>
71
+ <p>タイトル:<?php echo $title ?></p>
72
+ <p>評価:<?php echo $row['star'] ?></p>
73
+ <p><?php echo nl2br($row['body'], false) ?></p>
74
+ <p><?php echo $row['date'] ?></p>
75
+ <?php
76
+ endwhile;
77
+
78
+ //ページ数の表示
103
- コード
79
+ try {
80
+ //プリペアドステートメント作成
81
+ $stmt = $db->prepare("SELECT COUNT(*) FROM bbs");
82
+ //クエリ
83
+ $stmt->execute();
84
+ } catch (PDOException $e){
85
+ echo "エラー:" . $e->getMessage();
86
+ }
87
+
88
+ //コメントの件数を取得
89
+ $comments = $stmt->fetchColumn();
90
+ //ページ数を計算
91
+ $max_page = ceil($comments / $num);
92
+ echo '<p>';
93
+ for ($i = 1; $i <= $max_page; $i++){
94
+ echo '<a href="CSS41.php?page=' . $i . '">' . $i .
95
+ '</a>&nbsp;';
96
+ }
97
+ echo '</p>';
98
+ ?>
104
99
  ```
100
+ 【WEB画面】
105
101
 
106
-
107
-
108
- ![イメージ説明](3ebef31ebe949cb4977e19ee3f021dfc.png)
102
+ ![イメージ説明](a569065a0b8ec25e1e81a0ccdd8609a9.png)