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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1849閲覧

PHPのNotice: Undefined indexについて

WalterMontes

総合スコア25

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/10/30 07:30

編集2017/10/30 07:32

オーダーする個数を決めてsubmitを押すとNotice: Undefined index: Santa MonicaとNotice: Undefined index: Bevery Hillsと表示され、HollyWoodとDowntownは正常に表示されます。arrayで4つの地名をまとめてforeachでそれぞれ表示しているのですが、Santa MonicaとBevery Hillsのエラーがでる原因がわからないので、教えていただきたいです。
イメージ説明

class La { public $name; //プロパティ public $image; public $price; private $orderCount = 0; public function __construct($name, $image, $price){ $this->name = $name; $this->image = $image; $this->price = $price; } public function getName(){ return $this->name; } public function getTaxIncludedPrice(){ return $this->price * 1.08; } public function getOrderCount(){ return $this->orderCount; } public function setOrderCount($orderCount){//プロパティの値を変更するメソッド $this->orderCount = $orderCount; } public function getTotalPrice(){ return $this->getTaxIncludedPrice() * $this->orderCount; } } *************** *****オーダーの個数を記入するページです******* <!DOCTYPE html> <html> <head> <title>Los Angeles</title> <link rel="stylesheet" type="text/css" href="samplephp.css"> </head> <body> <div class= "wrapper container"> <div class="header"> <strong>Los Angeles</strong> </div> <h1 class="logo">Los Angeles</h1> <div>Today:<?php //echo data('Y m d');?></div> <!-- 価格(税込)と人数と注文時に価格を合計する--> <form action="confirm.php" method="post"> <div class="menu-items"> <?php foreach($cities as $city) : ?> <div class= "menu-item"> <h3><?php echo $city->name; ?></h3> <img src="<?php echo $city->image; ?>"> <p>???? <?php echo $city->price; ?></p> <p>Included Tax: $<?php echo $city->getTaxIncludedPrice(); ?></p> <input type="text" value="0" name="<?php echo $city->getName();?>"> </div> <?php endforeach ?> </div> <input type="submit" value="SUBMIT"> </form> </div> </body> </html> *********** ****オーダー結果を表示するページです*******! <?php require_once('samplephpdata.php'); ?> <!DOCTYPE html> <html> <head> <title>Order Confirmation</title> <link rel="stylesheet" type="text/css" href="samplephp.css"> </head> <body> <div class= "wrapper container"> <div class="header"> <strong>Los Angeles</strong> </div> <h1 class="logo">Order Confirmation</h1> <div class="menu-items"> <?php foreach($cities as $city) : ?> <div class= "menu-item"> <?php $orderCount = $_POST[$city->getName()];?> <?php $city->setOrderCount($orderCount); ?> <p> <?php echo $city->getName() ?> : <?php echo $orderCount; ?> 人 </p> <p>Total cost:$<?php echo $city->getTotalPrice() ?></p> </div> <?php endforeach ?> </div> </div> </body> </html> ************* <?php require_once("samplephpmenu.php"); $santamonica = new La("Santa Monica","IMG_0533.jpg",40); $beveryhills = new La("Bevery Hills",'IMG_0194.jpg',35); $hollywood = new La("HollyWood",'IMG_1603.jpg',20); $donwtown = new La("Donwtown",'IMG_0635.jpg',10); $cities = [$santamonica, $beveryhills, $hollywood, $donwtown]; ?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

Noticeの箇所は「$orderCount = $_POST[$city->getName()]」のところでしょうか?

PHP

1$orderCount = filter_input(INPUT_POST,$city->getName);

のような処理ではどうでしょうか?

追記

なるほど、こういうことでしょうか?

PHP

1<form method="post"> 2<input type="text" name="Santa Monica" value="0"> 3<input type="submit" value="go"> 4</form> 5<?php 6$test=filter_input(INPUT_POST,str_replace(" ","_","Santa Monica")); 7var_dump($test);

投稿2017/10/30 07:36

編集2017/10/30 08:05
yambejp

総合スコア114814

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

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

maisumakun

2017/10/30 07:47

問題の2つがスペース入りの名前なので、キーではどうなるのか考えないといけませんね。
yambejp

2017/10/30 08:06

maisumakunさん、ありがとうございます 「Santa Monica」なんですね。ようやく理解しました それを踏まえて追記しておきました。 nameに特殊な文字を入れるのは避けたいですね
WalterMontes

2017/10/30 10:26

ご回答いただきありがとうございます。$orderCount =filter_input(INPUT_POST,str_replace(" ","_","Santa Monica"));とするとSanta Monicaに入力した数値が他の地名にも適用されてしまうのですが、それぞれ適用させるにはどうすればよいでしょうか。($city-getName();としたらエラーになりました。) また、Santa Monicaをスペースなしにしても同じエラーが出てしまうのですが、そこに問題はないということでしょうか。
yambejp

2017/10/31 01:49

>($city-getName();としたらエラーになりました。) たんなるtypoでしょうか? $orderCount = filter_input(INPUT_POST,str_replace(" ","_",$city->getName));
WalterMontes

2017/10/31 04:30

$orderCount = filter_input(INPUT_POST,str_replace(" ","_",$city->getName()));とするとDowntownの結果がSanta Monicaに出ますね。。
yambejp

2017/10/31 04:40

でも、 <input type="text" value="0" name="<?php echo $city->getName();?>"> からデータを渡しているんですよね? $city->getName()がDowntownなら$_POST["Downtown"]が参照されるので問題ないはず 根本的なロジックがおかしいのであれば別なので もういちど処理手順をみなおしてみてはどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問