🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

1回答

1213閲覧

投稿画面に、一覧を表示したいのですが中々答えに辿り着けずにいます。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/01/11 08:39

前提・実現したいこと

投稿画面に一覧も一緒に表示させたい

現在、PHPで掲示板を作成しています。

投稿ページに一覧を表示したいのですが、現状フォームに入力をしないと一覧が表示されない状態なので入力する前から一覧を表示する方法・ヒント・この知識が必要などアドバイスをいただけないでしょうか。

現状 トップページ(ここの部分に最初から一覧ページを表示させたいのです)
イメージ説明
フォームに入力後
イメージ説明

該当のソースコード

トップページ

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 <title>掲示板(仮)</title> 8</head> 9 10<body> 11 <h1>掲示板(仮)</h1> 12 <form action="create.php" method="POST"> 13 <?php if (count($errors) > 0) : ?> 14 <?php foreach ($errors as $error) : ?> 15 <li><?php echo $error; ?></li> 16 <?php endforeach; ?> 17 <?php endif; ?> 18 <div> 19 <label for="nickname">ニックネーム</label> 20 <input type="text" name="nickname" id="nickname" value="<?php echo $board['nickname'] ?>"> 21 </div> 22 <div> 23 <label for="message">書き込む</label> 24 <textarea type="text" name="message" id="message" placeholder="140字までになります" maxlength="140" rows="6" cols="50"><?php echo $board['message'] ?></textarea> 25 </div> 26 <button type="submit">投稿</button> 27 </form> 28 <main> 29 <?php foreach ($list as $value) : ?> 30 <div><?php echo ($value['id']); ?></div> 31 <div><?php echo h($value['nickname']); ?></div> 32 <div><?php echo h($value['message']); ?></div> 33 <div><a href="reply_message.php?id=<?php echo ($value['id']); ?>">コメント : </a><?php echo h($value['reply_message']); ?></div> 34 <div><?php echo $value['created']; ?></div> 35 <?php endforeach; ?> 36 </main> 37</body> 38 39</html> 40
<?php require 'dbconnect.php'; require 'escape.php'; //データ登録 function createBoard($db) { $statement = $db->prepare('INSERT INTO posts SET nickname=?, message=?,created=NOW()'); $statement->execute(array($_POST['nickname'], $_POST['message'])); //header('Location: create.php'); } //バリデーション処理 function validate($board) { $errors = []; if (!strlen($board['nickname'])) { $errors['nickname'] = 'ニックネームを入力してください'; } if (!strlen($board['message'])) { $errors['message'] = '投稿が未入力です'; } return $errors; } function listBoard($db) { //データベースの取り出し $list = []; //データ取得 $sql = $db->query('SELECT * FROM posts ORDER BY id DESC'); while ($posts = $sql->fetch()) { $list[] = $posts; } return $list; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $board = [ 'nickname' => $_POST['nickname'], 'message' => $_POST['message'], //'reply_message_id' => $_POST['reply_message_id'] ]; $errors = validate($board); if (!count($errors)) { $db = dbConnect(); createBoard($db); $list = listBoard($db); } } include 'board.php';

試したこと

色々調べたのですがどうしていいか分からずにいます。
決して丸投げしたいわけではなく対処の仕方がわからず時間がかかりすぎているため今回質問いたしました。

お忙しい所恐れ入りますが何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

トップページのプログラムは$listにデータを入れ込む処理がありませんし、二つ目のプログラムで

PHP

1if ($_SERVER['REQUEST_METHOD'] === 'POST') { 23}

なので、投稿後のみ表示されていると思います。 ($_SERVER['REQUEST_METHOD'] === 'POST'の意味は自分で調べてみてください。)

ちょっと面倒ですがトップページのプログラム側でも最低限

$db = dbConnect(); createBoard($db); $list = listBoard($db);

を実行し、$listの中に投稿内容のデータをあらかじめ格納しないとダメだと思われます。そうするとこの処理はトップページと二つ目のプログラムで共通なるので、この部分をfunction xxxxx(){***}などして外に出すといいと思います。

あと、これだと書き込み後にブラウザの再読み込みボタン(F5キー)などを押すと、データが多重登録されてしまうと思います。データベースに登録後に「リダイレクト」という処理を入れるなどして、そのようにならないようにするとよりいいと思います。

まだまだ覚えることがいっぱいありますので、色々と調べながら頑張ってください。

投稿2021/01/11 16:51

AbeTakashi

総合スコア4853

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

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

s-s56

2021/01/11 23:03

Abe様、回答していただきありがとうございます!現在いただいたアドバイスを元に試行錯誤しております! teratailのアカウントが2つになってしまったため1つを退会処理した所何故か、残して置きたいアカウントも消えてしまい退会済みになってしまいました。不快な思いをさせてしまったら申し訳ありません。
s-s56

2021/01/12 05:51

無事トップページに一覧表示されました!ありがとうございます。 もし、多重登録などで詰まりましたら恐縮ではありますがまたアドバイスいただきたいです。何卒よろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問