質問を閲覧いただきまして、有難う御座います。
現在ローカル環境で、商品注文サイトを制作しているのですが、
「フォームで受け取った値をもとに、インスタンスを指定して中身を取り出す方法」
を導き出せず、苦戦しております。
かなりの未熟者ですので、諸先輩方よりご教授いただければ幸いです。
実現したい結果(アルフォートで注文数「1」入力して送信した場合)
「アルフォート(20枚入)1 307」
現状の結果
「アルフォート(20枚入)1 307 徳用カルパス377 ルマンド(3袋入)315 カントリーマーム(チョコ&バニラ)370 OREO 1箱(2袋入)191 ハッピーターン(3袋入)691」
foreachの影響からか、上記のようにほしくない商品名まで出てきてしまいます。
php
1 <!--show.php(値を送信するファイルで、商品ごとにページを用意しています。)--> 2 <?php 3 4require_once('prodata.php'); 5require_once('promenu.php'); 6 7$menuName = $_GET['name']; 8---------------------------------------------------------------------------------------- 9$menu = Product::findByName($products,$menuName); 10<!--ここで名前を判断していると考えております。--> 11---------------------------------------------------------------------------------------- 12?> 13 14<!DOCTYPE html> 15<html> 16 <head> 17 <meta charset="utf-8"> 18 <title>Product page</title> 19 <link rel="stylesheet" type="text/css" href="show.css"> 20 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css"> 21 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 22 <link href='https://fonts.googleapis.com/css?family=Pacifico|Lato' rel='stylesheet' type='text/css'> 23 <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet"> 24 </head> 25 26 <body> 27 <header> 28 <img class="basket" src="http://illustrain.com/img/work/2016/illustrain02-shopping07.png"> 29 <p class="title">Shopping basket</p> 30 <p class="sabtitle">商品注文ページ</p> 31 </header> 32 33 <form action="lastconfirm.php" method="post"> 34 <div class="product-wrapper"> 35 <div class="container"> 36 <img class="product-image" src="<?php echo $menu->getImage() ?>"> 37 <div class="top-right"> 38 <p class="product-name"><?php echo $menu->getName() ?></p> 39 <p class="product-price">¥<?php echo $menu->getPrice() ?> (税込)</p> 40 <div class="top-amount"> 41 <span class="font">数量</span> 42 <input class="product-amount" type="text" name="<?php echo $menu->getName() ?>" value="0"> 43 <span class="font">個</span> 44 </div> 45 <input class="product-decision" type="submit" value="注文を確定する"> 46 </div> 47 </div> 48 <div class="clear"></div> 49 </div> 50 </form> 51 52 53 54 </body> 55</html> 56
php
1<?php 2 3class Product { 4 private $date; 5 private $image; 6 private $name; 7 private $price; 8 public $orderCount = 0; 9 10 11public function __construct($date,$image,$name,$price) { 12 $this->date = $date; 13 $this->image = $image; 14 $this->name = $name; 15 $this->price = $price; 16} 17 18public function getDate() { 19 return $this->date; 20} 21 22public function getImage() { 23 return $this->image; 24} 25 26public function getName() { 27 return $this->name; 28} 29 30public function getPrice() { 31 return $this->price; 32} 33---------------------------------------------------------------------------------------------- 34public static function findByName($menus,$name) { 35 foreach($menus as $menu) { 36 if($menu->getName() == $name) { 37 return $menu; 38 } 39 } 40} 41----------------------------------------------------------------------------------------------- 42public function getOrderCount() { 43 return $this->orderCount; 44} 45 46public function setOrderCount($orderCount) { 47 $this->orderCount = $orderCount; 48 49} 50?>
php
1 2 <!--lastconfirm.php(値を受けて表示するファイル)--> 3 4 <body> 5 <div class="confirm-wrapper"> 6 <?php foreach($products as $product) :?> 7 <?php 8 $orderCount = filter_input(INPUT_POST,$product->getName()); 9 10 echo $product->getName(); 11 echo $orderCount; 12 echo $product->getPrice(); 13 14 ?> 15 <?php endforeach ?> 16 17 </body>
php
1 <!--prodata.php(インスタンスのファイル)--> 2 3 <?php 4 require_once('promenu.php'); 5 6 7$alfort = new Product('New','画像URL ','アルフォート(20枚入)',307); 8$calpas = new Product('New','画像URL ','徳用カルパス',377); 9$lumand = new Product('Sold out','画像URL ','ルマンド(3袋入)',315); 10$country = new Product('New','画像URL ','カントリーマーム(チョコ&バニラ)',370); 11$oreo = new Product('A few','画像URL ','OREO 1箱(2袋入)',191); 12$happy = new Product('New','画像URL ','ハッピーターン(3袋入)',691); 13 14$products = array($alfort,$calpas,$lumand,$country,$oreo,$happy); 15 16 17?> 18
●試したこと
①foreachの中にゲッターを書くのではなく、外に書いてみました。
→エラーになりました。
②お菓子や、インスタンスを指定するため、「if」での条件分岐を試してみました。
→正確なソースがわかりませんでした。
ユーザーが入力した値(注文数)を情報源に、どのお菓子なのかを見分け、インスタンスの中身を指定してゲッターなどで取り出したいです。(金額や画像)
もし、ご教授いただける方がおられましたら、何卒回答の程宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー