phpについて質問です。

phpの見積りフォームを作成しています。
(mySqlと連動した見積りフォームは未だ挑戦中ですが取り急ぎ下記の見積りが作りたいです。)
ちゃんと理解が出来ていないようで流れがうまくつくれません。

フォーム内に入れた情報で金額を自動計算する様に作成したいです。

フォームの内容
縦:   cm × 横:   cm
加工1:プルダウンメニューで あり・なしを選択
加工2:プルダウンメニューで あり・なしを選択
加工3:プルダウンメニューで あり・なしを選択

phpで計算

縦×横×(1平行cmあたりの)金額=□□円
加工1+加工2+加工3=●●円

□□円+●●円=
合計)△△円

面積×(1平行cmあたりの)金額+加工1+加工2+加工3の簡単な計算なので
phpのフォーム内にすべて記述するつもりです。

よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/06/07 19:53:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Bombastus No.1

回答回数409ベストアンサー獲得回数52

ポイント35pt

どのようなフォームを作っているのか分からないのですが、流れとしては以下のような感じでいかがでしょう。

なお、エラーチェックは一切していません。

<?php
$unit  = 100;       //1平方センチ当たりの価格
$proc1 = 200;       //加工1の価格
$proc2 = 300;       //加工2の価格
$proc3 = 400;       //加工3の価格

$res1 = '';
$res2 = '';
$res3 = '';

//入力フォーム
if (! isset($_POST['calc'])) {
    form1(basename($_SERVER['SCRIPT_NAME']);
//見積計算+見積書表示
} else {
    $res1 = $_POST['length'] * $_POST['width'] * $unit;
    $res2 = 0;
    if ($_POST['proc1'] == 'TRUE')  $res2 += $proc1;
    if ($_POST['proc2'] == 'TRUE')  $res2 += $proc2;
    if ($_POST['proc3'] == 'TRUE')  $res2 += $proc3;
    $res3 = $res1 + $res2;
    form2($res1, $res2, $res3);
}

//入力フォーム
function form1($url) {
echo <<< EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
</head>
<body>
<form action="{$url}" method="post">
縦:<input type="text" name="length" />cm × 横:<input type="text" name="width" />cm<br />
加工1<select name="proc1">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
加工2<select name="proc2">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
加工3<select name="proc3">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
<br />
<input type="submit" name="calc" value="見積計算" />
</form>
</body>

EOT;
}

//見積書フォーム
function form2($res1, $res2, $res3) {
echo <<< EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
</head>
<body>
<table border="1" cellpadding="10">
<caption>御見積書</caption>
<tr><td>縦×横(1cm<sup>2</sup>あたりの)金額</td><td>{$res1}</td></tr>
<tr><td>加工1+加工2+加工3</td><td>{$res2}</td></tr>
<tr><td>{$res1} 円+{$res2}</td><td>合計){$res3}</td></tr>
</table>
</form>
</body>

EOT;
}
?>
id:kasai-de_eb

有難うございます。とっても参考になりました。

2010/06/07 19:52:42

その他の回答2件)

id:Bombastus No.1

回答回数409ベストアンサー獲得回数52ここでベストアンサー

ポイント35pt

どのようなフォームを作っているのか分からないのですが、流れとしては以下のような感じでいかがでしょう。

なお、エラーチェックは一切していません。

<?php
$unit  = 100;       //1平方センチ当たりの価格
$proc1 = 200;       //加工1の価格
$proc2 = 300;       //加工2の価格
$proc3 = 400;       //加工3の価格

$res1 = '';
$res2 = '';
$res3 = '';

//入力フォーム
if (! isset($_POST['calc'])) {
    form1(basename($_SERVER['SCRIPT_NAME']);
//見積計算+見積書表示
} else {
    $res1 = $_POST['length'] * $_POST['width'] * $unit;
    $res2 = 0;
    if ($_POST['proc1'] == 'TRUE')  $res2 += $proc1;
    if ($_POST['proc2'] == 'TRUE')  $res2 += $proc2;
    if ($_POST['proc3'] == 'TRUE')  $res2 += $proc3;
    $res3 = $res1 + $res2;
    form2($res1, $res2, $res3);
}

//入力フォーム
function form1($url) {
echo <<< EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
</head>
<body>
<form action="{$url}" method="post">
縦:<input type="text" name="length" />cm × 横:<input type="text" name="width" />cm<br />
加工1<select name="proc1">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
加工2<select name="proc2">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
加工3<select name="proc3">
<option value="TRUE">あり</option>
<option value="FALSE">なし</option>
</select>
<br />
<input type="submit" name="calc" value="見積計算" />
</form>
</body>

EOT;
}

//見積書フォーム
function form2($res1, $res2, $res3) {
echo <<< EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
</head>
<body>
<table border="1" cellpadding="10">
<caption>御見積書</caption>
<tr><td>縦×横(1cm<sup>2</sup>あたりの)金額</td><td>{$res1}</td></tr>
<tr><td>加工1+加工2+加工3</td><td>{$res2}</td></tr>
<tr><td>{$res1} 円+{$res2}</td><td>合計){$res3}</td></tr>
</table>
</form>
</body>

EOT;
}
?>
id:kasai-de_eb

有難うございます。とっても参考になりました。

2010/06/07 19:52:42
id:koriki-kozou No.2

回答回数480ベストアンサー獲得回数79

ポイント35pt

今後のデータベースへの対応を考慮して作ってみた

phpの部分を削れば、基本的にはHTMLのフォームをそのまま使っていることが理解できると思う

<?php
    // 拡張子をphpとしてあるため誤作動する場合があり、下記のように出力している
    echo '<?xml version="1.0" encoding="Shift_JIS"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
    <title>お見積もりフォーム</title>
</head>
<body>
<?php
    //
    // 変数を準備
    $msg = '';
    $tate = '';
    $yoko = '';
    $kakou1 = 1; // 加工1 1:有、0;無 デフォルトはHTMLにあわせて1
    $kakou2 = 1; // 加工2 〃
    $kakou3 = 1; // 加工3 〃
    //
    // 計算ボタンがクリックされた場合は計算を行う
    if (isset($_POST['keisan'])) {
        //
        // POST情報のチェック 今回は簡単なチェックしかしてません
        if (!isset($_POST['tate'])) {
            $msg .= '縦寸法が入力されていません<br />';
        } else if ($_POST['tate'] * 1 >= 1) {
            $tate = $_POST['tate'];
        } else {
            $msg .= '縦寸法が空か、数値以外の文字が入力されています<br />';
        }
        if (!isset($_POST['yoko'])) {
            $msg .= '横寸法が入力されていません<br />';
        } else if ($_POST['yoko'] * 1 >= 1) {
            $yoko = $_POST['yoko'];
        } else {
            $msg .= '横寸法に空か、数値以外の文字が入力されています<br />';
        }
        if (isset($_POST['kakou1'])) $kakou1 = $_POST['kakou1'] * 1; // 掛け算することで、数値として捕らえることにする
        if (isset($_POST['kakou2'])) $kakou2 = $_POST['kakou2'] * 1; // 〃
        if (isset($_POST['kakou3'])) $kakou3 = $_POST['kakou3'] * 1; // 〃
        //
        // POST情報のチェック結果によって処理分岐
        if ($msg != '') {
            //エラー出力
            echo $msg;
        } else {
            //
            //データベースから情報を取ってくるなら、ここに処理を書く
            //
            //計算結果出力
            echo '縦×横×(1平行cmあたりの)金額=' . $tate * $yoko . '円<br />';
            //動作確認しやすいように加工1は千円、加工2は百円、加工3は十円としてある
            echo '加工1+加工2+加工3=' . ($kakou1 * 1000 + $kakou2 * 100 + $kakou3 * 10) . '円<br />';
        }
    }
?>
    <form action="<?= $_SERVER['SCRIPT_NAME'] ?>" method="POST">
        縦:<input type="text" name="tate" value="<?=  $tate ?>" />cm
        ×
        横:<input type="text" name="yoko" value="<?=  $yoko ?>" />cm
        <br />
        加工1:
        <select name="kakou1">
            <option value="1" <?= ($kakou1 == '1' ? 'selected="selected"' : '') ?>>あり</option>
            <option value="0" <?= ($kakou1 == '0' ? 'selected="selected"' : '') ?>>なし</option>
        </select>
        加工2:
        <select name="kakou2">
            <option value="1" <?= ($kakou2 == '1' ? 'selected="selected"' : '') ?>>あり</option>
            <option value="0" <?= ($kakou2 == '0' ? 'selected="selected"' : '') ?>>なし</option>
        </select>
        加工3:
        <select name="kakou3">
            <option value="1" <?= ($kakou3 == '1' ? 'selected="selected"' : '') ?>>あり</option>
            <option value="0" <?= ($kakou3 == '0' ? 'selected="selected"' : '') ?>>なし</option>
        </select>
        <br />
        <input type="submit" name="keisan" value="計算" />
    </form>
</body>
</html>
id:kasai-de_eb

有難うございました。流れはつかめたきがします。

2010/06/07 19:52:21
id:Koriki-kozou No.3

回答回数53ベストアンサー獲得回数0

ポイント22pt

My Soul, Your Beats!/Brave Song 【初回生産限定盤】

My Soul, Your Beats!/Brave Song 【初回生産限定盤】

  • アーティスト: Lia 多田葵
  • 出版社/メーカー: アニプレックス
  • 発売日: 2010-05-26
  • メディア: CD

  • id:Bombastus
    「phpのフォーム」というのは、何らかのフレームワークを指していますか? フレームワークの名称とバージョンをお知らせください。

    それとも、HTMLのFORMのことを意味していますか? こちらであれば、PHPを使わずともJavaScriptで処理できますが、どうしてもPHPで処理しなければなりませんか?
  • id:kasai-de_eb
    ご回答ありがとうございます。
    html内に内容を入力してもらうフォームをつくっています。
    phpにこだわる訳ではないんですが、JavaScriptは全くわからないためにphpを選びました。
    HTML (XHTML 1.0 Transitional ・ Shift_JIS)

    よろしくお願い致します。
  • id:gekikawa
    PHPとJavaScriptでは計算の主体の場がユーザ(パソコン)側か
    サーバ側かという大きな違いがあります。
    ゆくゆくはデータベースということでPHPを採用されたのでしょうか。

    今回の場合の流れですが、こう考えてはどうでしょう?

    ・プルダウンメニューで加工の状態を選択するページ(A)
      ↓
    ・PHP側でフォームから送られたデータを元に計算する(B)
      ↓
    ・計算結果を表示する(C)

    大きな役割はこの3つになりますが、(B)と(C)は1つのページ(正しくはファイル?)に
    まとめられるのはお分かりになると思います。(C)のページ(ファイル)の先頭の部分で計算してしまえばよいのですね。

    ですから基本的には
    ページ(A) →(フォームのボタンでジャンプ)→ ページ(C)
    という画面遷移を念頭に置いてページ(A)(これは純粋なHTMLでOK)やページ(C)(こちらはPHPになりますね)を
    作成すると思います。

    ただ、このパターンは結構多くて、ファイルも1枚にまとめておくと楽なことも多いので回答者様の例のように
    if(計算結果の表示をしない){
    (A)の表示
    }else{
    (B)の実行と(C)の表示
    }
    とする場合も多いですね。
  • id:koriki-kozou
    koriki-kozou 2010/06/04 22:13:16
    HTMLフォームに機能を追加するという方法でサンプルを作ってみた
    難しい方法はまったく取らず、簡単なデータチェックも含めてあるが 行数は回答1よりも10行ほど少なく済んだ
    (コメントが多いので実際には1行だけ多い)

    データベースについては、どのような形(テーブル構造)で情報をもたせるかについての検討が必要なので、データベース処理の挿入ポイントを用意しておくに留めてある

    効率を考えると簡単なデータチェックをjavascript(クライアント側)で行っておくのが良いのだが、一度に全部は無理なので、まずは無理せずphpだけでやればいいね
  • id:koriki-kozou
    koriki-kozou 2010/06/07 17:48:13
    似たIDとアイコンを使って、成りすましている回答者が出没してますので注意してください

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません