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

質問編集履歴

1

文章の変更、質問事項の明確化(また修正します。とりいそぎ。)

2020/10/06 16:53

投稿

unkochon
unkochon

スコア6

title CHANGED
File without changes
body CHANGED
@@ -1,80 +1,19 @@
1
1
  初心者で、掲示板を作っています。
2
- paginationを組み込みたく、コードを入れましたが、現在のコードとの兼ね合いがわかりません
2
+ paginationを組み込みたく、コードを入れました。
3
- SQLに保存しデータを取り出すコードがあり、これをリミットで10ページずつにしたいのですが、どう組み込んでいいか分かりません。
3
+ 存のコードでも、SQLに保存しデータを取り出すコード
4
-
5
- 教えてもらえたら幸いです。
6
-
7
-
8
- ```php
4
+ ```PHP
9
-
10
- // DB接続
5
+ //一行ずつデータを取り出して配列に入れる
11
- $pdo = new PDO(DSN, DB_USER, DB_PASS);
12
- $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
13
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
14
-
15
6
  // SQL実行
16
- $sql = "SELECT * FROM board.user_completeinfo where Email = ?";
7
+ $sql = "select * from board.message AS M INNER JOIN board.User_CompleteInfo AS UCI ON M.userid = UCI.User_ID WHERE M.parentmessageid is null";
17
8
  $stmt = $pdo->prepare($sql);
18
- $stmt->execute([$_SESSION['Email']]);
9
+ $stmt->execute();
19
10
 
20
11
  // 結果の取得
21
12
  $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
22
- //var_dump($result);
23
- } catch (Exception $e) {
24
- echo "<p>DB接続エラー</p>";
25
- echo $e->getMessage();
26
- exit();
27
- }
28
- ?>
13
+ ```
29
14
 
30
- <!--最初の表示部分-->
31
- <?php foreach ($result as $row) {?>
32
-
33
- <td><?php echo $row['Username']; ?></td>
34
- <td><?php echo ';'; ?></td>
35
- <td><?php echo '<img src="data:image/png;base64,'.base64_encode( $row['User_Genderimg'] ).'" width=20px />'; ?></td>
36
- <td><?php echo '<img src="data:image/png;base64,'.base64_encode( $row['User_Countryimg'] ).'" width=30px />'; ?></td>
37
- <td><?php echo '×'; ?></td>
38
- <td><?php echo '<img src="data:image/png;base64,'.base64_encode( $row['Partner_Genderimg'] ).'" width=20px />'; ?></td>
39
- <td><?php echo '<img src="data:image/png;base64,'.base64_encode( $row['Partner_Countryimg'] ).'" width=30px />'; ?></td>
40
- <td><?php echo '<img src="data:image/png;base64,'.base64_encode( $row['User_DistanceImg'] ).'" width=70px />'; ?></td>
41
- <td><?php /*echo $row['User_LivingName']; */?></td>
42
-
43
- <input type="hidden" name="userid" value="<?php echo $row['User_ID']; ?>">
44
- <?php } ?><br />
45
- <textarea name="title" class="title" placeholder="タイトル"></textarea> <br />
46
- <textarea name="message" class="message"></textarea><br />
47
- <input type="submit" name="send_message" value="投稿" class="submit">
48
- </form>
49
-
50
- <?php
51
- //エスケープする関数
52
- function h($s){
53
- return htmlspecialchars($s,ENT_QUOTES,'UTF-8');
54
- }
55
-
56
- //name="send_message"のPOST送信があった時
57
- if(isset($_POST["send_message"])){
58
- //送信されたname="message"とname="user_name"の値を取得する
59
- $message = trim($_POST['message']);
60
- $title = trim($_POST['title']);
61
-
62
- //messageが空じゃなかったら
63
- if(!empty($message)){
64
- //My sql
65
- $stmt = $pdo->prepare("insert into message(bbsid,userid,title,message) values(?, ?, ?, ?)");
66
- $stmt->execute([1, $_POST['userid'], $title , $message]);
67
- }
68
-
69
- //pagination
70
- if (isset($_GET['pageno'])) {
71
- $pageno = $_GET['pageno'];
15
+ paginationでも、SQLに保存しデータを取り出すコード
72
- } else {
16
+ ```PHP
73
- $pageno = 1;
74
- }
75
- $no_of_records_per_page = 10;
76
- $offset = ($pageno-1) * $no_of_records_per_page;
77
-
78
17
  $total_pages_sql = "SELECT COUNT(*) FROM board.message";
79
18
  $result = mysqli_query($conn,$total_pages_sql);
80
19
  $total_rows = mysqli_fetch_array($result)[0];
@@ -83,20 +22,9 @@
83
22
  $sql = "SELECT * FROM board.message LIMIT $offset, $no_of_records_per_page";
84
23
  $res_data = mysqli_query($conn,$sql);
85
24
  while($row = mysqli_fetch_array($res_data)){
86
- //here goes the data
87
- }
25
+ ```
88
- mysqli_close($conn);
89
26
 
90
- }
27
+ が混在しているため、機能しないものと思われます。
91
28
 
92
-
29
+ 既存のコードにLIMITをつける構成なのか、
93
- //一行ずつデータを取り出して配列に入れる
30
+ paginationはこれだけでSQLからデータを取り出すべきか分かりません。
94
- // SQL実行
95
- $sql = "select * from board.message AS M INNER JOIN board.User_CompleteInfo AS UCI ON M.userid = UCI.User_ID WHERE M.parentmessageid is null";
96
- $stmt = $pdo->prepare($sql);
97
- $stmt->execute();
98
-
99
- // 結果の取得
100
- $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
101
- ?>
102
- ```