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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

0回答

286閲覧

PHPで掲示板を作っているのですが、コメントデータを取得するコードをPHPで記述する位置によって表示されたり表示されなくなったりする理由が知りたいです。

GooGoo2023

総合スコア7

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2023/01/30 10:16

この記述だと、スレッドに対応したコメントが表示されるのですが、

index.php

1<?php 2 3include_once("./app/database/connect.php"); 4 5if(isset($_POST["submitButton"])){ 6 7if(empty($_POST['username'])||empty($_POST['body'])){ 8 $error_message = "投稿に失敗しました。名前とコメントの両方を入力してください"; 9} else if(strlen($_POST['username']) > 30){ 10 $error_message = "投稿に失敗しました。名前は30字以内で入力してください。"; 11} else if(strlen($_POST['body']) > 300) { 12 $error_message = "投稿に失敗しました。コメントは300字以内で入力してください。"; 13} else { 14$escaped["username"] = htmlspecialchars($_POST["username"], ENT_QUOTES, "UTF-8"); 15$escaped["body"] = htmlspecialchars($_POST["body"], ENT_QUOTES, "UTF-8"); 16$sql = "INSERT INTO comment(username,body,post_date) VALUES (:username,:body,NOW());"; 17$stmt=$pdo->prepare($sql); 18$stmt->bindParam(':username',$escaped['username'],PDO::PARAM_STR); 19$stmt->bindParam(':body',$escaped['body'],PDO::PARAM_STR); 20$stmt->execute(); 21header('Location: ./'); 22exit; 23 } 24} 25 26$sql = "SELECT * FROM thread"; 27$pdo->query('SET NAMES utf8'); 28$stmt = $pdo->prepare($sql); 29$stmt->execute(); 30$thread_array = $stmt; 31 32 33?> 34 35 36 37 38<!DOCTYPE html> 39<html lang="ja"> 40<head> 41 <meta charset="UTF-8"> 42 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 43 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 44 <title>練習用の掲示板</title> 45 <link rel="stylesheet" href="style.css"> 46</head> 47<body> 48 49 <!--ヘッダー部分--> 50 <div class="header"> 51 <div class="title"> 52 <h1>お得な掲示板</h1> 53 </div> 54 <div class="login"> 55 <h1>ログイン</h1> 56 </div> 57 </div> 58 <hr> 59 60 <?php if(isset($error_message)){ 61 echo $error_message; 62 } 63 ?> 64 65 <!--スレッド部分--> 66 <!--スレッドのタイトルや名前、コメントの表示場所 --> 67 <?php foreach($thread_array as $thread) : ?> 68 <div class="threadWapper"> 69 <div class="threadTitle"> 70 <h1>【タイトル】<span class="realTitle"><?php echo $thread['title']; ?></span></h1> 71 </div> 72 73 <?php $sql = "SELECT * FROM comment"; 74 $pdo->query('SET NAMES utf8'); 75 $stmt = $pdo->prepare($sql); 76 $stmt->execute(); 77 $comment_array = $stmt; 78 ?> 79 80 <article class="article"> 81 <?php foreach($comment_array as $comment): ?> 82 <?php if($thread['id'] == $comment['thread_id']) :?> 83 <div class="userName"><p>名前:<span class="realName"><?php echo $comment['username'] ?></span></p></div> 84 <div class="postTime"><p>投稿時間:<span class="realTime"><?php echo $comment['post_date'] ?></span></p></div> 85 <div class="postComment"><p><?php echo $comment['body'] ?></p></div> 86 <?php endif; ?> 87 <?php endforeach; ?> 88 <!--投稿フォーム--> 89 <form class="formWrapper" method="POST"> 90 <div class="name_form"> 91 <input type="submit" value="書き込む" name="submitButton"> 92 <label >名前: 93 <input type="text" name="username"> 94 </label> 95 </div> 96 <div> 97 <textarea class="commentTextArea" name="body"></textarea> 98 </div> 99 </form> 100 </div> 101 <?php endforeach ?> 102 103 <div class="newThreadWrapper"> 104 <div class="newchildThreadWrapper"> 105 <button><a href="./createThread.php">新規スレッド書き込み</a></button> 106 </div> 107 </div> 108 109</body> 110</html>

この部分を上に持ってくる以下の書き方だと、スレッドのIDに対応したコメントを表示できない理由が知りたいです。

php $sql = "SELECT * FROM comment"; $pdo->query('SET NAMES utf8'); $stmt = $pdo->prepare($sql); $stmt->execute(); $comment_array = $stmt;

index.php

1<?php 2 3include_once("./app/database/connect.php"); 4 5if(isset($_POST["submitButton"])){ 6 7if(empty($_POST['username'])||empty($_POST['body'])){ 8 $error_message = "投稿に失敗しました。名前とコメントの両方を入力してください"; 9} else if(strlen($_POST['username']) > 30){ 10 $error_message = "投稿に失敗しました。名前は30字以内で入力してください。"; 11} else if(strlen($_POST['body']) > 300) { 12 $error_message = "投稿に失敗しました。コメントは300字以内で入力してください。"; 13} else { 14$escaped["username"] = htmlspecialchars($_POST["username"], ENT_QUOTES, "UTF-8"); 15$escaped["body"] = htmlspecialchars($_POST["body"], ENT_QUOTES, "UTF-8"); 16$sql = "INSERT INTO comment(username,body,post_date) VALUES (:username,:body,NOW());"; 17$stmt=$pdo->prepare($sql); 18$stmt->bindParam(':username',$escaped['username'],PDO::PARAM_STR); 19$stmt->bindParam(':body',$escaped['body'],PDO::PARAM_STR); 20$stmt->execute(); 21header('Location: ./'); 22exit; 23 } 24} 25 26$sql = "SELECT * FROM thread"; 27$pdo->query('SET NAMES utf8'); 28$stmt = $pdo->prepare($sql); 29$stmt->execute(); 30$thread_array = $stmt; 31 32php $sql = "SELECT * FROM comment"; 33$pdo->query('SET NAMES utf8'); 34$stmt = $pdo->prepare($sql); 35$stmt->execute(); 36$comment_array = $stmt; 37 38 39?> 40 41 42 43 44<!DOCTYPE html> 45<html lang="ja"> 46<head> 47 <meta charset="UTF-8"> 48 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 49 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 50 <title>練習用の掲示板</title> 51 <link rel="stylesheet" href="style.css"> 52</head> 53<body> 54 55 <!--ヘッダー部分--> 56 <div class="header"> 57 <div class="title"> 58 <h1>お得な掲示板</h1> 59 </div> 60 <div class="login"> 61 <h1>ログイン</h1> 62 </div> 63 </div> 64 <hr> 65 66 <?php if(isset($error_message)){ 67 echo $error_message; 68 } 69 ?> 70 71 <!--スレッド部分--> 72 <!--スレッドのタイトルや名前、コメントの表示場所 --> 73 <?php foreach($thread_array as $thread) : ?> 74 <div class="threadWapper"> 75 <div class="threadTitle"> 76 <h1>【タイトル】<span class="realTitle"><?php echo $thread['title']; ?></span></h1> 77 </div> 78 79 <article class="article"> 80 <?php foreach($comment_array as $comment): ?> 81 <?php if($thread['id'] == $comment['thread_id']) :?> 82 <div class="userName"><p>名前:<span class="realName"><?php echo $comment['username'] ?></span></p></div> 83 <div class="postTime"><p>投稿時間:<span class="realTime"><?php echo $comment['post_date'] ?></span></p></div> 84 <div class="postComment"><p><?php echo $comment['body'] ?></p></div> 85 <?php endif; ?> 86 <?php endforeach; ?> 87 <!--投稿フォーム--> 88 <form class="formWrapper" method="POST"> 89 <div class="name_form"> 90 <input type="submit" value="書き込む" name="submitButton"> 91 <label >名前: 92 <input type="text" name="username"> 93 </label> 94 </div> 95 <div> 96 <textarea class="commentTextArea" name="body"></textarea> 97 </div> 98 </form> 99 </div> 100 <?php endforeach ?> 101 102 <div class="newThreadWrapper"> 103 <div class="newchildThreadWrapper"> 104 <button><a href="./createThread.php">新規スレッド書き込み</a></button> 105 </div> 106 </div> 107 108</body> 109</html>

createThread.php

1<?php 2 3include_once("./app/database/connect.php"); 4 5if(isset($_POST["threadSubmitButton"])){ 6 7if(empty($_POST['title'])||empty($_POST['username'])||empty($_POST['body'])){ 8 $error_message = "投稿に失敗しました。スレッドを立ち上げるには、タイトルと名前とコメント全てを入力してください"; 9} else if(strlen($_POST['title']) > 50){ 10 $error_message = "投稿に失敗しました。タイトルは50字以内で入力してください。"; 11} else if(strlen($_POST['username']) > 30){ 12 $error_message = "投稿に失敗しました。名前は30字以内で入力してください。"; 13} else if(strlen($_POST['body']) > 300) { 14 $error_message = "投稿に失敗しました。コメントは300字以内で入力してください。"; 15} else { 16$escaped["title"] = htmlspecialchars($_POST["title"], ENT_QUOTES, "UTF-8"); 17$sql = "INSERT INTO thread(title) VALUES (:title);"; 18$stmt=$pdo->prepare($sql); 19$stmt->bindParam(':title',$escaped['title'],PDO::PARAM_STR); 20$stmt->execute(); 21 22$escaped["username"] = htmlspecialchars($_POST["username"], ENT_QUOTES, "UTF-8"); 23$escaped["body"] = htmlspecialchars($_POST["body"], ENT_QUOTES, "UTF-8"); 24$sql = "INSERT INTO comment(username,body,post_date,thread_id) 25VALUES (:username,:body,NOW(),(SELECT id FROM thread WHERE title = :title));"; 26$stmt=$pdo->prepare($sql); 27$stmt->bindParam(':username',$escaped['username'],PDO::PARAM_STR); 28$stmt->bindParam(':body',$escaped['body'],PDO::PARAM_STR); 29$stmt->bindParam(':title',$escaped['title'],PDO::PARAM_STR); 30$stmt->execute(); 31 32header('Location: ./'); 33exit; 34 } 35} 36 37?> 38 39 40<!DOCTYPE html> 41<html lang="ja"> 42<head> 43 <meta charset="UTF-8"> 44 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 45 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 46 <title>新規スレッドの作成ページ</title> 47 <link rel="stylesheet" href="style.css"> 48 49</head> 50<body> 51 <div class="submitPageTitle"> 52 <h2>新規スレッド立ち上げフォーム</h2> 53 </div> 54 55 <?php if(isset($error_message)){ 56 echo $error_message; 57 } 58 ?> 59 60 <form class="threadForm" method="POST"> 61 <div> 62 <label>スレッドのタイトル: 63 <input type="text" name="title"> 64 </label> 65 <br> 66 <label class="nameBox">名前: 67 <input type="text" name="username"> 68 </label> 69 </div> 70 <div> 71 <textarea name="body" class="commentTextArea"></textarea> 72 </div> 73 <input type="submit" name="threadSubmitButton"> 74 </form> 75</body> 76</html>

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

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

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

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

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

yuma.inaura

2023/01/30 10:38

php $sql = "SELECT * FROM comment"; この行のphpって何ですか?
GooGoo2023

2023/01/30 11:05

間違えました 正確には <?php php $sql = "SELECT * FROM comment"; $pdo->query('SET NAMES utf8'); $stmt = $pdo->prepare($sql); $stmt->execute(); $comment_array = $stmt; ?> と書くつもりでした
yuma.inaura

2023/01/30 11:13

そちらの訂正後のphpってなんでしょうか、書き間違え? php $sql = "SELECT * FROM comment";
GooGoo2023

2023/01/30 11:26

どこの箇所でしょうか?
GooGoo2023

2023/01/30 11:27

あ、何度もすみません書き間違えです。 正確には <?php $sql = "SELECT * FROM comment"; $pdo->query('SET NAMES utf8'); $stmt = $pdo->prepare($sql); $stmt->execute(); $comment_array = $stmt; ?> ですね
m.ts10806

2023/01/30 19:08

質問は編集できます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問