注文フォーム作成について

このQ&Aのポイント
  • PHPでの注文フォーム作成について初心者が質問しています。
  • 注文フォームの入力画面で自動計算した内容を確認画面に表示させたいができない状態です。
  • 送信確認画面で注文内容のメールが届くものの、入力された内容が反映されていない状態で届いてしまいます。
回答を見る
  • ベストアンサー

PHPでの注文フォーム作成について

PHPは人が作ったものをいじる程度しかできない初心者です。 今回、ショッピングサイトでよく見かける注文フォームを作りたいと思い、 (1)注文(入力画面)  ↓ (2)注文内容確認画面 ↓ (3)送信確認画面 という感じで作っています。 (1)注文(入力画面)では、javascriptで商品 × 個数を自動計算できるようにしています。 その自動計算した内容を(2)注文内容確認画面に表示させるところまではできました。 ここから質問なのですが、 (3)送信確認画面で、私のメールアドレス宛てに注文内容のメールが届くようにPHPを書いたのですが、メールは届くものの、入力された内容が反映されていない状態で届いてしまいます。 ↓メールはこんな感じで届きます 商品1:個、円 商品2:個、円 商品3:個、円 ----------------------------------------------------------------- 税込合計:円 ----------------------------------------------------------------- お届け指定日: 時間帯指定: 送信完了画面(send.php)のPHP部分は下記の通りです <?php mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); $subject = "★★注文★★"; $message = "\n商品1:" . $_GET["goods1"] . "個、" . $_GET["field1"] . "円" . "\n商品2:" . $_GET["goods2"] . "個、" . $_GET["field2"] . "円" . "\n商品3:" . $_GET["goods3"] . "個、" . $_GET["field3"] . "円" . "\n-----------------------------------------------------------------" . "\n税込合計:" . $_GET["field_total2"] . "円" . "\n-----------------------------------------------------------------" . "\nお届け指定日:" . $_GET["specifiedday"] . "\n時間帯指定:" . $_GET["time"]; // メール送信 $rcd = mb_send_mail("info@▲▲▲.com", $subject, $message, "From: " . $_GET["mail"]); ?> どこが間違っているのでしょうか? どなたかご指摘お願い致します。

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#129900
noname#129900
回答No.1

このシステムを完成させたとしても、 注文者によって注文情報が変更できてしまうので、本番では使えません。 問題箇所は以下の通り。 ・JavaScriptで計算し、結果を表示するだけなら良い、それを注文情報として送っては駄目。 ・$_GETで送信するのも駄目。 ・金額の計算はサーバサイドで行うべき。 -- まずは、どの画面で、どの情報を使うかを整理されると良いでしょう。 事前に商品情報をPHP側で配列に入れておきましょう。 (データベース等からデータを取得しているならそれを使用してください) $datas = array( array('id'=>'xxx1', 'name'=>'商品名', 'price'=>0), array('id'=>'xxx2', 'name'=>'商品名', 'price'=>0) ); 配送オプション情報をPHP側で配列に入れておきましょう。 $option_time = array( '午前', '午後' ); -- 入力画面から送られる情報を、以下に限定してください。 (小計や税込み合計は入力画面からPOSTしない) ・商品ID(英数。今は無いので付与する) ・注文個数(数値) ・配送オプション(日時指定、時間帯指定) そして、POSTで送信してください。 -- 確認画面では。 注文者が入力した商品の個数の金額をPHP側で計算します。

mililin
質問者

補足

詳しくご回答頂き、ありがとうございます! 本番で使えないんですか… 注文フォームはユーザーが注文(入力)する画面で注文個数や合計金額をが確認できるようにしたいです。 https://sv62.xserver.jp/~healing-rose/healing-rose.com/form_test/order_form.php ↑このサイトの注文フォームのような感じです。 参考サイトのような感じにするには、PHPでもすべて出来るのでしょうか? 「PHP 自動計算」などで検索したのですが、javascriptの自動計算ばかり出てきてしまって。。

その他の回答 (2)

noname#129900
noname#129900
回答No.3

提示したコードは、一つのファイルで入力&確認をしていますが、 本来は、入力-->確認と別のファイルへ遷移していたはずです。 なので、画面を別ファイルに分ければ、選択個数を保持する必要は無いです。 選択個数は、PHPで計算した値を表示すればいいのではないでしょうか。 そもそも、選択個数を保持しておくのは変ですよね。 個数のselectboxを、『注文者が手でつかんだ数』と考えると… 例: ・商品を2個手に取る ・カートに入れる(POST) ・カートに商品が2個ある状態で、強制的に商品を2個取らされる (※カートに入れてある商品だけが精算される とします) こういう状態ではありませんか?

mililin
質問者

お礼

ありがとうございます! なにもわかっていなくて、すみません。 細かく説明して頂いて助かりました。 作って頂いたコードを使わせて頂いて、なんとかできそうです。

noname#129900
noname#129900
回答No.2

<?php $price = 100; $total = 0; if (isset($_POST['order'])) { $total = $price * $_POST['count'] * 1.05; } ?> <form method="post"> <input type="text" id="price" value="<?php echo $price; ?>" /> <select id="count" name="count"> <option value="0">-----</option> <option value="1">1</option> <option value="2">2</option> </select> <input type="text" id="total" value="0" /> <input type="submit" name="order" value="注 文" /> </form> <script> var price = document.getElementById('price'); var cnt = document.getElementById('count'); var total = document.getElementById('total'); cnt.onchange = function() { total.value = price.value * cnt.value * 1.05; } </script> <div>PHPで計算 合計:<?php echo $total; ?></div> ・JavaScriptで計算しても良い。でも、注文情報としては使えない。 上記のサンプルコードは、合計金額の計算をJavaScriptとPHPで行っています。 しかし、JavaScriptで計算した値をPHPへ送信してはいません。 ・GETで送ってはいけない。 POSTにしたから安全という訳ではありませんが、 URLにパラメータが表示されるのは避けたいです。

mililin
質問者

補足

なるほど、ありがとうございます! 作って頂いたソースをいじらせてもらいました! もうひとつお聞きしたいのですが、セレクトボックスで選んだ商品の個数を、 フォーム送信(簡易見積)したあとにも、そのまま表示しておきたいのですが、可能でしょうか・・? 現在はフォーム送信するとセレクトボックスが0個になってしまうので… 何度も質問して申し訳ございません。 よろしくお願い致します。 <?php $price1 = 100; $total1 = 0; if (isset($_POST['order'])) { $total1 = $price1 * $_POST['count1'] * 1.05; } $price2 = 120; $total2 = 0; if (isset($_POST['order'])) { $total2 = $price2 * $_POST['count2'] * 1.05; } ?> <style type="text/css"> <!-- .style1 {font-size: smaller} --> </style> <form method="post"> 1、商品01:<?php echo $price1; ?>円 <select id="count1" name="count1"method="post"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> <br /><br /> 2、商品02:<?php echo $price2; ?>円 <select id="count2" name="count2"method="post"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> </select> <br /> <br /> <input type="submit" name="order" value="簡易見積" /> </form> <div> 税込合計:<?php echo $total1 + $total2; ?>円 </div>

関連するQ&A

  • php5のフォーム

    サーバーの仕様が変わってフォームが動かなくなって困っています。 現在のフォームはphp4で、仕様はphp5にしか対応しなくなったということです。 古いコードが使われているからだとは思いますが、 全くの初心者の私には何をどう書き換えたらいいのかさっぱりで、質問に至った次第であります。 現在の状況を説明しますと、フォームに内容を入力して、 エラー画面、確認画面まではしっかり動くのですが、 ”この内容で送信する”ボタンで 問い合わせフォーム真っ白になってしまいます。 ソースは以下です。 ・mail.php========================= <? include_once "func.php"; include_once "mail.pear.php"; class MainClass{ function MainClass(){ switch( $_REQUEST['type'] ){ case "step1": if( $this->Chk_Input() ){ $_REQUEST['act'] = ""; break; } break; //メール送信 case "step2": // 管理者にメール送信 $msg = "お問い合わせフォームより以下の内容が送信されました。\n\n" ."内容をご確認の上、ご担当者様へご連絡をお願いいたします。\n\n\n" ."お名前 : ".$_POST['name']."\n" ."メールアドレス : ".$_POST['mail_ad']."\n" ."お問い合わせ内容 : ".$_POST['other']."\n"; new MailSendByMTA( "**@**.jp" , "**@**.jp" , "【お問い合わせ内容】" , $msg , "" , 0 ); // 登録者にメール送信 $msg = "".$_POST['name']." 様\n\n" ."このたびは「お問い合わせ」をいただき、誠にありがとうございます。\n" ."お問い合わせ内容をご確認ください。弊社スタッフより改めてご連絡いたします。\n\n" ."お名前 : ".$_POST['name']."\n" ."メールアドレス : ".$_POST['mail_ad']."\n" ."お問い合わせ内容 : ".$_POST['other']."\n\n\n\n" ."(株)******\n\n" ."〒111-1111 **県**市****123-456\n" ."電話:000-000-0000 FAX:000-000-0000\n"; new MailSendByMTA( "**@**.jp" , $_POST['mail_ad'] ,"【お問い合わせ内容】" , $msg , "" , 0 ); pageJump( $_SERVER['PHP_SELF']."?act=step2" ); break; } switch( $_REQUEST['act'] ){ case "step1": include_once "review.html.php"; break; case "step2": include_once "thanks.html.php"; break; default: include_once "form.html.php"; } } function Chk_Input(){ if( chkErr_Func( $_POST['name'],0 ) ){ $this->errTxt .= "お名前を入力して下さい。<BR>"; } if( chkErr_Func( $_POST['mail_ad'],0 ) ){ $this->errTxt .= "メールアドレスを入力してください。<BR>"; } else{ if( chkErr_Func( $_POST['mail_ad'],3 ) ){ $this->errTxt .= "メールアドレスに誤りがないかご確認下さい。<BR>"; } else{ if( $_POST['mail_ad'] != $_POST['mail_ad2'] ){ $this->errTxt .= "メールアドレス入力確認の内容がメールアドレスの内容と異なっています。<BR>"; } } } if( chkErr_Func( $_POST['other'],0 ) ){ $this->errTxt .= "お問い合わせ内容を入力してください。<BR>"; } return ( $this->errTxt != "" ) ? true : false; } } new MainClass(); ?> 長々とすいませんが、ご教授ください。 お願い致します。

    • 締切済み
    • PHP
  • 注文フォーム

    ネットを利用して物品の通販を考えています。 HP上に「注文フォーム」を置いて、お客様に注文内容を入力していただき、注文内容を自分のメールアドレスに自動的に送信してもらうような設定にしたいのですが、フリーで使えるツールはないでしょうか。 無料ツールがなければ有料でも構いません。 どなたか紹介してください。 よろしくお願いします。

  • PHPでフォームメール

    いつも適切なご回答誠にありがとうございます。PHP初心者で参考書やnetを頼りに制作している者です。現在フォームを作成していて確認メールでの質問です。送信者宛てには上手く送信されるのですが、管理者宛のメールの件名と送信者がうまく表示されません。どなたかお助けください。 //----------------ここから管理者宛にMAIL送信------------------------// $subject="資料請求がございました"; $subject=mb_convert_encoding("$subject","JIS","SJIS"); $subject=mb_encode_mimeheader($subject); $other = stripslashes($other); $from="${name01}"; $from=mb_convert_encoding("${from}","JIS","SJIS"); $from = base64_encode($from); $from = "=?ISO-2022-JP?B?" . $from . "?="; $from = "From: \"".$from. "\"" . "<" . "$e_mail" . ">"; $s_msg="以下の内容で資料請求がありました。資料発送の手配をお願いします。\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ■お名前:${name01} ■電話番号:${tel} ■E-メール:${e_mail} ■ご意見・ご要望:\n\n${other}\n _/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄_/ ̄\n ${d_site}|資料請求フォーム\n \n"; $s_msg = mb_convert_encoding($s_msg,"JIS","SJIS"); $sendto = "$d_recipient"; mb_send_mail($sendto,"$subject","$s_msg","$from"); //-------------------------------------------------------------------------------------//

    • ベストアンサー
    • PHP
  • PHPでのフォーム送信・・・・

    function send_mail($name,$mail,$birth,$high,$pref,$hobby,$contents,$host,$ua,$time) { session_unset(); if(!$name) $name = "NoName"; if(!$sbj) $sbj = "From Mailform+"; $mes = "$name($mail)$high 様からのお問い合わせです。\n\n"; $contents = str_replace("<br>", "\n", $contents); if($url) $mes .= "●URL: $url\n\n"; $mes .= "【お問い合わせ内容】 (".date('Y.m.d (D) H:i:s', $time).")\n"; $mes .= "メールアドレス:::($mail)\n"; $mes .= "誕生日($birth)\n"; $mes .= "身長($high) cm\n"; $mes .= "お住い:::($pref)\n"; $mes .= "趣味:::($hobby)\n"; $mes .= "疑問点:::($msg)\n"; $mes .= "───────────────────────────────────\n"; $mes .= "$contents\n"; $mes .= "───────────────────────────────────\n"; $mes .= "$host\n$ua"; if(get_magic_quotes_gpc()) $mes = stripslashes($mes); $mes = mb_convert_encoding($mes, "JIS", "SJIS"); $header = "From:" .mb_encode_mimeheader($name) ."<$mail>"; $send = mb_send_mail(RECIPIENT, $sbj, $mes, $header); if($send) success("正常に送信されました"); else error("送信に失敗しました"); } ?> 上記PHPなのですが、送信自体は大丈夫なのですが、 誕生日・身長・お住い・趣味・疑問点 がメールを受信時に反映されません。 $mail と $name だけはちゃんと入力したとおりに出ます。 どの部分を訂正すれば正しくメールを受け取れますでしょうか・・・。 PHP初心者なので検討違いの質問をしていましたらすみません・・・。

    • ベストアンサー
    • PHP
  • html:計算フォームを組み込みフォーム作成したい

    htmlのフォームで、計算フォーム(掛け算)を組み込んだフォームを作成したいです。 ◆◆◆単価 * ■■■数量 = 合計額☆☆☆ 単価の◆は予めサイト側で指定 数量の■はページ閲覧者の 任意入力 合計額の☆☆☆ は 自動で計算された答えが出力される <html> <head> <title>TAG index Webサイト</title> <style type="text/css"> <!-- table { border-collapse: collapse; } table, th, td { border: 1px #808080 solid; } th, td { padding: 3px 10px; } th { background-color: #d3e9fa; } td { background-color: #ffffff; } td strong { color: #ff0000; } --> </style> <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1 = document.form1.goods1.selectedIndex * 500; // 単価を設定 document.form1.field1.value = price1; // 小計を表示 // 商品2 var price2 = document.form1.goods2.selectedIndex * 1000; // 単価を設定 document.form1.field2.value = price2; // 小計を表示 // 商品3 var price3 = document.form1.goods3.selectedIndex * 3000; // 単価を設定 document.form1.field3.value = price3; // 小計を表示 // 合計を計算 var total = price1 + price2 + price3; // 設定終了 document.form1.field_total.value = total; // 合計を表示 } // --> </script> </head> <body> <form action="#" name="form1"> <table> <tr> <th>商品名</th> <th>単価</th> <th>数量</th> <th>金額</th> </tr> <tr> <td>商品サンプル1</td> <td align="right">500円</td> <td><select name="goods1" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field1" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル2</td> <td align="right">1,000円</td> <td><select name="goods2" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field2" size="8" value="0"> 円</td> </tr> <tr> <td>商品サンプル3</td> <td align="right">3,000円</td> <td><select name="goods3" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> <td><input type="text" name="field3" size="8" value="0"> 円</td> </tr> <tr> <td align="right" colspan="3"><strong>合計</strong></td> <td><input type="text" name="field_total" size="8" value="0"> 円</td> </tr> </table> </form> </body> </html> 上記のテンプレートを参考にさせていただきましたが、このテンプレートだと数値が1~5までしか 選択できません。好きな数字を任意入力できるようにしたいです。  計算結果がすぐに表示されるのは嬉しいですが、 この内容と合わせて更に ・お名前 □□□□ ・連絡先メールアドレス □□□□  これらの要素を、送信ボタンを押して xyz@abcde.co.jpに 内容が届くようにしたいです。 ●送信● ●リセット● の2つのボタンを配置 (送信ボタンを押すと、xyz@abcde.co.jpに以上の項目が記載されたメールが届くようにする) (リセットを押すと入力されたフォームの数値がリセットされる) <p> <input type="submit" value="送信する"> <input type="reset" value="リセット"> </p> 上記の内容を入力することで 送信する/リセット のボタンを作ることはできましたが、 例えばabc@xyz.co.jpに 入力された項目すべてを送信するには 送信する ボタンの後にハイパーリンクを使えばよいのでしょうか。 お手数ですが、ご指南お力添えの程、よろしくお願いしますm(_ _)m

  • phpのシンプルなメールフォーム

    あるサイトにて、単一phpのメールフォームのソースをコピーし、使用としましたが、 設定したメールアドレスに、送信ボタンを押しましたが、 受信されません。  ・送信後、「メールを送信しました」と表示されます。  ・送信のあて先は、何も反応なし。  ・ソースの「●●@●●」はダミーです。 以下ソースです。原因がわかりますでしょうか。ご教授のほどよろしくお願いします。 ―――――――――――――――――――――――――――――――――――― <?php // 送信フラグ $send_flg = false; // エラーメッセージ $err_msg = array(); // 送信ボタンを押した後の処理 if ($_POST["post_flg"]) { // エラー if ($_POST["name"] == "") { $err_msg[] = "「お名前」は必須です"; } if ($_POST["email"] == "") { $err_msg[] = "「メールアドレス」は必須です"; } // エラーが無ければ送信 if (count($err_msg) == 0) { // 宛先 $mail_to = "●●@●●"; // 送信元アドレス $mail_from = "form@example.com"; // 件名 $mail_subject = "メールフォームから送信がありました"; // 本文 $mail_body = ""; $mail_body.= "■お名前\n".$_POST["name"]."\n\n"; $mail_body.= "■メールアドレス\n".$_POST["email"]."\n\n"; $mail_body.= "■コメント\n".$_POST["comment"]; // 送信処理 mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($mail_to, $mail_subject, $mail_body, "From: <".$mail_from.">"); $send_flg = true; $_POST = array(); } } ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>メールフォーム</title> </head> <body> <?php // 初期フォーム表示 if (!$send_flg) { ?> <h1>メールフォーム</h1> <?php // エラーメッセージがある場合 if (count($err_msg) > 0) { ?> <p style="color:red;"> <?php foreach ($err_msg as $val) { ?> ※<?php echo $val ?><br> <?php } ?> </p> <?php } ?> <form action="mail.php" method="post"> <p> お名前<br> <input type="text" cols="30" name="name" value="<?php echo $_POST["name"] ?>"><br> </p> <p> メールアドレス<br> <input type="text" cols="30" name="email" value="<?php echo $_POST["email"] ?>"><br> </p> <p> コメント<br> <textarea name="comment" cols="50" rows="10"><?php echo $_POST["comment"] ?></textarea><br> </p> <input type="submit" name="post_flg" value="送信する"><br> </form> <?php // メール送信後の表示 } else { ?> <br><br><br><br>メールを送信しました。<br> <?php } ?> </body> </html> ――――――――――――――――――――――――――――――――――――

    • ベストアンサー
    • PHP
  • PHPのフォームメール

    PHPでフォームメールを作っています。 「PENTA CREATION」というサイトの『お問い合せフォーム』の例をやってみました。 しかし、送信先のメールアドレスにメール内容が送信されません。 どうすれば、送信先にメール内容が送信されますか。

  • PHPでメールフォームを作成していますが、

    PHPでメールフォームを作成していますが、 フォームから内容を送信したあとに送信が完了したページのinquire.phpの上位表示部分に 下記の内容が表示されてしましまいまうが、原因は何がか考えられますでしょうか? No recipient addresses found in header HTTP/1.1 200 OK Date: Wed, 30 Jun 2010 12:24:25 GMT Server: Apache/1.2.6k KK-NET wpp/1.0 PHP4 X-Powered-By: PHP/4.3.11p1 Connection: close Content-Type: text/html

    • 締切済み
    • PHP
  • フォームからメール送信

    いつも参考にさせて頂いています。 現在メールフォームを作っていまして、Javascriptで作成したフォームからphpで作った確認画面へ遷移(form action=...phpにて)し、確認画面の送信ボタンをクリックした時点で指定したメールアドレスへ内容を送信 という流れで考えています。post変数をphpで受け取って確認画面を表示するところまではいいのですが、確認画面の内容をメールアドレスに送信するにはどうしたらいいのでしょうか? まだまだ初心者ですので噛み砕いて説明頂けば幸いです。 どうか宜しくお願いします

    • ベストアンサー
    • PHP
  • 問い合わせフォームからPHPを使って、、、、、

    問い合わせフォームからPHPを使って指定のアドレスにメールを送ろうとしているのですが、届きません、、、、、、 原因が分かりません。助けていただけないでしょうか。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>お問い合わせページ</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>お問い合わせページ</h1> <form action="send_email.php" method="post"> <label for="name">お名前:</label> <input type="text" id="name" name="name" required><br><br> <label for="email">メールアドレス:</label> <input type="email" id="email" name="email" required><br><br> <label for="message">お問い合わせ内容:</label><br> <textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br> <input type="submit" value="送信"> </form> </body> </html> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 以下がPHPのプログラムです。 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = $_POST["name"]; $email = $_POST["email"]; $message = $_POST["message"]; // 送信先のメールアドレス $to = "***@gmail.com"; // 件名 $subject = "お問い合わせがありました"; // 本文 $body = "お名前: $name\n"; $body .= "メールアドレス: $email\n\n"; $body .= "お問い合わせ内容:\n$message"; // メールを送信 mail($to, $subject, $body); // 送信後のリダイレクト header("Location: thank_you.html"); exit; } ?>

    • 締切済み
    • PHP