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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

Q&A

解決済

3回答

7306閲覧

フォームで入力された値をセレクトで計算

marusu

総合スコア16

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

0グッド

0クリップ

投稿2017/05/16 11:19

編集2017/05/16 11:20

###前提・実現したいこと
PHP初心者ですがご教授をお願いします。
ページ移動せずに、フォームに入力した値をセレクト(選択)で計算できるようにしたいです。

###該当のソースコード

<?php session_start(); $nedan = $_POST['price']; $nedan_2 = $_POST['price2']; $number = 60; $number_2 = 0.85; $str = $_POST['test']; if (!$str == 0) { $total = $str / $nedan_2 * 100; }; ?> <form method="post" action=""> <select name="test"> <option value="" selected="selected">選択してください</option> <option value="<?php echo ($nedan - $nedan_2 - $number) * $number_2;?>">本</option> </select> 価格1<input type="text" name="price"><br /> 価格2<input type="text" name="price2"><br /> <input type="submit" value="計算をする"><br /> <?php echo $total; ?>

###試したこと
価格1、価格2に一度入力して送信すると反映されなくて送信した後に、同じように「計算をする」ボタンをクリックするとちゃんと反映されます。
最初の段階に入力した値がちゃんと格納されていないと思いますが、確認画面なしでセレクトに値を格納する方法とかありますでしょうか?
また、違う方法がなどがあればぜひご教授をお願いします。2~3日試行錯誤してみましたがなかなか上手くいかないです。

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

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

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

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

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

guest

回答3

0

PHPはサーバーサイドの言語です。サーバで動く仕組みを作るのが主な仕事です。javascriptはクライアントサイドの言語です。
初心者でも分かる!クライアントサイドとサーバーサイドの違い | THE LANCER(ザ・ランサー)
何かのページを見たいと思ったときに、クライアント側からサーバーに働きかけ、情報をサーバーからクライアントに返してもらいます。今見てるのはクライアントです。サーバーは今は関与してません。そのためサーバーに情報を送る動き=移動が必要となります。それをしないとなると表側には情報を交換してないように見えるajaxが必要となります。裏でこっそり情報を交換してくれます。

投稿2017/05/16 15:16

toutou

総合スコア2050

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

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

0

ベストアンサー

このphpページを最初にブラウザに表示する時点(つまり、ブラウザに表示するためにphp側で処理している時点)では、$_POST['price']と$_POST['price2']はNULLです。
従ってこの時点ではこの部分・・・

<option value="<?php echo ($nedan - $nedan_2 - $number) * $number_2;?>">本</option>

は次のように展開されます。

<option value="<?php echo (NULL - NULL - 60) * 0.85;?>">本</option>

NULLは暗黙の型変換により0に置き換えられますので、結果としては・・・

<option value="<?php echo (0 - 0 - 60) * 0.85;?>">本</option>

このように解釈されます。
これはつまり、$numberと$number_2に初期値(規定値)が設定されていないということです。
これらの変数宣言部分を以下のように修正して初期値をセットすると良いのではないでしょうか。(100と50の部分は適宜変更してください。)

php

1$nedan = is_null($_POST['price'])? 100: $_POST['price']; 2$nedan_2 = is_null($_POST['price2'])? 50: $_POST['price2'];

ご参考になれば。

投稿2017/05/16 13:21

tkanda

総合スコア2425

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

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

marusu

2017/05/16 14:06 編集

回答ありがとうございます。 なるほどです、初期状態がNULLになるのは初めて知りました。 初期値をセットしてみましたが、やはり一度サーバーに送信してから再び入力し送信しないと反映されないです。
tkanda

2017/05/16 14:26

echo の部分に問題がありそうです。 http://php-beginner.com/reference/extra/echo_print.html に説明がありますが、echo は最終評価結果を戻さないが、printは戻すという違いがあります。なので・・・ <option value="<?php echo ($nedan - $nedan_2 - $number) * $number_2;?>">本</option> の部分を・・・ <option value="<?php print ($nedan - $nedan_2 - $number) * $number_2;?>">本</option> にしたら動くのではないでしょうか。
marusu

2017/05/16 14:56

度々回答ありがとうございます。 echoにも返さないものがあるのも初めて知ってすごい勉強になります。 ご教授の通りprintに変更してみましたが、やはり二回送信しないと反映されないようです。 特に弄ってはないですが、htdocsの設定なども関わってくるのでしょうか。
guest

0

ページ遷移をしないのならjavascriptで処理したほうがよいでしょう。
計算はphpにどうしてもさせたいのであれば、ajaxでphp側になげて
戻り値をもらってきてください

投稿2017/05/16 11:32

yambejp

総合スコア114583

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

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

marusu

2017/05/16 11:35

回答ありがとうございます。 やはりPHPのみですと確認画面などが必要になってくるのですね。 ajaxなども扱ったことがないので一度調べてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問