この記述だと、スレッドに対応したコメントが表示されるのですが、
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>
php $sql = "SELECT * FROM comment";
この行のphpって何ですか?
間違えました
正確には
<?php
php $sql = "SELECT * FROM comment";
$pdo->query('SET NAMES utf8');
$stmt = $pdo->prepare($sql);
$stmt->execute();
$comment_array = $stmt;
?>
と書くつもりでした
そちらの訂正後のphpってなんでしょうか、書き間違え?
php $sql = "SELECT * FROM comment";
どこの箇所でしょうか?
あ、何度もすみません書き間違えです。
正確には
<?php
$sql = "SELECT * FROM comment";
$pdo->query('SET NAMES utf8');
$stmt = $pdo->prepare($sql);
$stmt->execute();
$comment_array = $stmt;
?>
ですね
質問は編集できます
あなたの回答
tips
プレビュー