phpの見積りフォームを作成しています。
(mySqlと連動した見積りフォームは未だ挑戦中ですが取り急ぎ下記の見積りが作りたいです。)
ちゃんと理解が出来ていないようで流れがうまくつくれません。
フォーム内に入れた情報で金額を自動計算する様に作成したいです。
フォームの内容
縦: cm × 横: cm
加工1:プルダウンメニューで あり・なしを選択
加工2:プルダウンメニューで あり・なしを選択
加工3:プルダウンメニューで あり・なしを選択
phpで計算
縦×横×(1平行cmあたりの)金額=□□円
加工1+加工2+加工3=●●円
□□円+●●円=
合計)△△円
面積×(1平行cmあたりの)金額+加工1+加工2+加工3の簡単な計算なので
phpのフォーム内にすべて記述するつもりです。
よろしくお願いいたします。
どのようなフォームを作っているのか分からないのですが、流れとしては以下のような感じでいかがでしょう。
なお、エラーチェックは一切していません。
<?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; } ?>
どのようなフォームを作っているのか分からないのですが、流れとしては以下のような感じでいかがでしょう。
なお、エラーチェックは一切していません。
<?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; } ?>
有難うございます。とっても参考になりました。
今後のデータベースへの対応を考慮して作ってみた
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>
有難うございました。流れはつかめたきがします。
My Soul, Your Beats!/Brave Song 【初回生産限定盤】
有難うございます。とっても参考になりました。