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

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

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

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

Q&A

解決済

3回答

1133閲覧

PHP 「クラス 複数登録機能のforeachについて。」

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/10/25 10:27

現在、PHPでクラス課題に取り組んでおり、複数のBookを管理するBooKShelf(本棚)クラスを作成し、一画面で複数の書籍情報が送信できる機能を作成したいのですが、送信先の画面に入力内容を表示させるため、foreachで繰り返し処理をさせた結果が画面上に表示されないため、どこを改善すればいいか、わからずどなたかご教授いただきたいと思い質問させていただきました。

###書籍情報を管理するBookクラス

php

1//book.php 2 3<?php 4class Book 5{ 6 private $title; 7 private $author; 8 private $page; 9 private $price; 10 11 //ゲッターを定義 12 public function getTitle() 13 { 14 return $this->title; 15 } 16 public function getAuthor() 17 { 18 return $this->author; 19 } 20 public function getPage() 21 { 22 return $this->page; 23 } 24 public function getPrice() 25 { 26 return $this->price; 27 } 28 29 //セッターを定義 30 public function setTitle($title) 31 { 32 $this->title = $title; 33 } 34 public function setAuthor($author) 35 { 36 $this->author = $author; 37 } 38 public function setPage($page) 39 { 40 $this->page = $page; 41 } 42 public function setPrice($price) 43 { 44 $this->price = $price; 45 } 46 47}

###複数の書籍情報を管理するBookShelfクラス

php

1//book_shelf.php 2 3<?php 4require_once('class/book.php'); 5 6class BookShelf 7{ 8 private $book_list = array(); 9 10 public function getBookList() 11 { 12 return $this->book_list; 13 } 14 15 public function setBookList($book) { 16 $this->book_list[] = $book; 17 } 18}

###複数の書籍情報を送信するindex.html

html

1<body> 2 <span style="font-weight:bold;">本の情報を入力してください</span> 3 <br/> 4 送信する本の数を変更: 5 <button onclick="cloneBookForm()"></button> 6 <button onclick="deleteBookForm()"></button> 7 <br/> 8 <br/> 9 <form action="book_many.php" method="POST"> 10 <div id="book_form" class="book"> 11 <span class="book_form_title">1冊目</span> 12 <table style="padding-left:20px;"> 13 <tr><td>タイトル:<td/><td><input type="text" class="form_title" name="book[0][title]" value="" /><td/><tr/> 14 <tr><td>著者:<td/><td><input type="text" class="form_author" name="book[0][author]" value="" /><td/><tr/> 15 <tr><td>ぺージ数:<td/><td><input type="text" class="form_page" name="book[0][page]" value="" /><td/><tr/> 16 <tr><td>定価:<td/><td><input type="text" class="form_price" name="book[0][price]" value="" /><td/><tr/> 17 </table> 18 </div> 19 <div id="clone"></div> 20 <input type="submit" value="送信" /> 21 </form> 22 </body>

###送信された値を受け取るbook_many.php

php

1<?php 2require_once('class/book_shelf.php'); 3require_once('class/book.php'); 4 5$books = new BookShelf(); 6 7$input_books = $_POST['book']; 8 9foreach ($input_books as $input_book) { 10 $book = new Book(); 11 $book->setTitle($input_book['title']); 12 $book->setAuthor($input_book['author']); 13 $book->setPage($input_book['page']); 14 $book->setPrice($input_book['price']); 15 16 $books->setBookList($book); 17} 18 19//var_dump($books); 20 21 22?> 23 24<html> 25 <head> 26 <meta charset="utf-8"> 27 <title>課題</title> 28 </head> 29 <body> 30 <table> 31 <tr><th>タイトル</th><th>著者</th><th>ページ数</th><th>定価</th></tr> 32 <?php foreach ($books as $book): ?> 33 <tr> 34 <td><?= $book->getTitle() ?></td> 35 <td><?= $book->getAuthor() ?></td> 36 <td><?= $book->getPage() ?></td> 37 <td><?= $book->getPrice() ?></td> 38 <td><?= $book->getLang() ?></td> 39 </tr> 40 <? endforeach ?> 41 </table> 42 <a href="index.html">戻る</a> 43 </body> 44</html>

book_shelf.phpで初期値を空の配列とし、Bookクラスのインスタンスを追加する関数を作成、
引数にBookクラスのインスタンを受け取る様にし、var_dump($book)でデバックしforeachで複数の配列が送信できていることは確認できているのですが、html上のforeachで結果が出力できません。
とても根本的なところから知識不足だとは思いますが、初心者のため、解決に至れませんでした。
どなたかご教授お願い致します。

情報が足りなければ補足致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

<?php foreach ($books as $book): ?>

<?php foreach ($books->getBookList() as $book): ?>
に変更すると動きますか?

投稿2021/10/25 10:32

satoshih

総合スコア799

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

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

退会済みユーザー

退会済みユーザー

2021/10/25 12:21

回答ありがとうございます! おかげさまで期待通りの表示になりました! 本当にありがとうございます!
guest

0

ああ、分かった。
$booksは配列じゃないですよね。

投稿2021/10/25 11:28

175

総合スコア147

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

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

0

PHPって末尾の;無いと動かないんじゃなかったっけ

投稿2021/10/25 10:43

175

総合スコア147

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

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

175

2021/10/25 10:44

<?php foreach ($books as $book): ?> <tr> <td><?= $book->getTitle() ?></td> <td><?= $book->getAuthor() ?></td> <td><?= $book->getPage() ?></td> <td><?= $book->getPrice() ?></td> <td><?= $book->getLang() ?></td> </tr> <? endforeach ?> この辺
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問