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

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

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

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

Q&A

解決済

2回答

469閲覧

計算式で値がない場合はエラーを吐きます。

Masa300

総合スコア8

PHP

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

0グッド

0クリップ

投稿2021/06/02 04:46

編集2021/06/02 07:45

//変数の受け取り処理

$goods1 = $_POST["goods1"]; $kosuu1 = $_POST["kosuu1"]; $goods2 = $_POST["goods2"]; $kosuu2 = $_POST["kosuu2"]; $goods3 = $_POST["goods3"]; $kosuu3 = $_POST["kosuu3"]; $goods4 = $_POST["goods4"]; $kosuu4 = $_POST["kosuu4"]; $goods5 = $_POST["goods5"]; $kosuu5 = $_POST["kosuu5"]; //条件分岐 if (empty($goods1)) { $goods1 = 0; } if (empty($goods2)) { $goods2 = 0; } if (empty($goods3)) { $goods3 = 0; } if (empty($goods4)) { $goods4 = 0; } if (empty($goods5)) { $goods5 = 0; } $goukei = (($goods1 * $kosuu1) + ($goods2 * $kosuu2) + ($goods3 * $kosuu3) + ($goods4 * $kosuu4) + ($goods5 * $kosuu5)); echo $goukei; コード

変数の値はhtmlファイルから送信しています。
コードは上記ですが、phpが警告を出します。

Warning: A non-numeric value encountered in/ファイルのパス 67行目

echo $goukei;→出力すると正しい答えが返ってきますが、何故か上記の警告が出るのです。

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

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

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

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

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

maisumakun

2021/06/02 04:50

全体を通しで書いていただけないでしょうか。日本語で説明されているところが、「本当にそのような挙動をする」コードなのかを判断できません。
m.ts10806

2021/06/02 04:53

実際にどういう値をどこからどのように投入できるのか、他者が手元で試せるコードを提示してください。 「エラーを吐く」ではなんのエラーか分かりません。エラーによって対処方法が違います。 あと、emptyは0もtrueなので「値がない」には使えないのでは
m.ts10806

2021/06/02 04:54

また「例外処理の方法」は一般的にtry-catchによるエラーハンドリングをさします。エラーハンドリングはどこですか?
Masa300

2021/06/02 07:54 編集

こちらの内容は質問に追加させてもらいました。
m.ts10806

2021/06/02 04:58

質問は編集できます。 またマークダウン利用してください。 「エラーを吐く」ではなんのエラーか分かりません。エラーによって対処方法が違います。
Masa300

2021/06/02 04:59

わかりました。用事が済んだら再編集します。
Masa300

2021/06/02 06:59

皆様ありがとうございます。 次のような表現をし、念のために(int)を付加したら警告が出なくなりました。 if ($goods1 == "") { $goods1 = (int)0; } if ($kosuu1 == "") { $kosuu1 = (int)0; } これだけが正解ではないと思いますが、取り敢えず警告が消えたのをご報告します。
m.ts10806

2021/06/02 07:23

もともとの質問内容と差し替えでもされましたか? https://teratail.com/questions/history-questions/341716 もう少し要件とかきちんと書いてありました。 あと、コードはマークダウンのcode機能にてご提示ください。 既についた回答のような表示になります。
Masa300

2021/06/02 07:26

わかりました。 質問内容を差し替えました。 今後は注意します。
m.ts10806

2021/06/02 07:32

いえあの 編集履歴1にある諸々の説明がないといきなりコードだけで「こんなですが」と意味がわかりません。 既存の回答とも繋がりにくいのでは。
Masa300

2021/06/02 07:46

確かにごちゃごちゃになり、ご迷惑をおかけしました。
guest

回答2

0

ベストアンサー

配列を使うと楽です

PHP

1<?PHP 2$g=filter_input(INPUT_POST,"g",FILTER_VALIDATE_INT,FILTER_REQUIRE_ARRAY); 3$k=filter_input(INPUT_POST,"k",FILTER_VALIDATE_INT,FILTER_REQUIRE_ARRAY); 4if(!is_null($g)){ 5 $goukei =array_sum(array_map(function($x,$y) use($k){ 6 return $x*$k[$y]; 7 },$g,array_keys($g))); 8 print "合計:".$goukei; 9} 10?> 11<form method="post"> 12価格:<input name="g[]" value="100">個数:<input name="k[]" value="5"><br> 13価格:<input name="g[]" value="200">個数:<input name="k[]" value="6"><br> 14価格:<input name="g[]" value="300">個数:<input name="k[]" value=""><br> 15価格:<input name="g[]" value="a">個数:<input name="k[]" value="10"><br> 16価格:<input name="g[]" value="">個数:<input name="k[]" value=""><br> 17<input type="submit" value="send"> 18</form>

投稿2021/06/02 05:08

yambejp

総合スコア115008

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

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

Masa300

2021/06/02 07:10

そうですね。配列を使ったら簡単でしたね。後で書き直します。警告の原因がわからないので苦戦していましたが、警告内容をグーグルで調べたら結構ヒットしました。
yambejp

2021/06/02 07:13

どうしてもバラバラの変数名でやりたいなら $goods1=filter_input(INPUT_POST,"goods1",FILTER_VALIDATE_INT); のような受け取り方をすればよいです。 $_POSTを直接参照するのはむしろ非効率です
Masa300

2021/06/02 07:48

久しぶりにphpを触ったので、非効率的なコードの書き方をしてしまいました。 今後はアドバイスを参考にします。 ありがとうございました。
guest

0

今回は取り敢えず、以下のように書くことで自己解決しました。

if ($goods1 == "") {
$goods1 = (int)0;
}

if ($kosuu1 == "") {
$kosuu1 = (int)0;
}

投稿2021/06/02 07:50

Masa300

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問