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

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

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

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

PHP

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

Q&A

3回答

4804閲覧

1画面で完結するフォームで、確認画面とサンクス画面のURLを分けたい

junannko

総合スコア18

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

PHP

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

0グッド

1クリップ

投稿2016/05/18 04:50

お世話になっております。
以下のソースにて、1画面で完結するフォームを実装しております。
コンバージョンを取るため、確認画面とサンクス画面のURLを分けたいと考えているのですが、どのようにすれば良いかわからず、質問をさせていただきました。

<?php session_start(); require_once ("./config.php"); //ヘッダ include 'form-header.tpl'; $PageNo = isset($_POST['page']) ? htmlspecialchars($_POST["page"]) : null; $company = isset($_POST['company']) ? htmlspecialchars($_POST["company"]) : null; $familyname = isset($_POST['familyname']) ? htmlspecialchars($_POST["familyname"]) : null; $email = isset($_POST['email']) ? htmlspecialchars($_POST["email"]) : null; $tel = isset($_POST['tel']) ? htmlspecialchars($_POST["tel"]) : null; $pref_name = isset($_POST['pref_name']) ? htmlspecialchars($_POST["pref_name"]) : null; $confirm = isset($_POST['confirm']) ? $_POST["confirm"] : null; // 入力チェック $error_check = 0; $ERROR_MSGS = array(); if ($PageNo >= 2) { if ($company === "") { $error_check = 1; $ERROR_MSGS[] = "「社名」を入力。"; } if ($familyname === "") { $error_check = 1; $ERROR_MSGS[] = "「ご担当者様名」を入力。"; } if (!ereg("^[^@]+@[^.]+\..+", $email)) { $error_check = 1; $ERROR_MSGS[] = "「メールアドレス」に誤りがあります。"; } if ($tel === "") { $error_check = 1; $ERROR_MSGS[] = "「お電話番号」を入力。"; } if ($pref_name === "") { $error_check = 1; $ERROR_MSGS[] = "「都道府県」を入力。"; } if ($confirm == "") { $error_check = 1; $ERROR_MSGS[] = "個人情報取扱い同意書をお読みの上、「同意する」にチェックを入れてください。"; } } if($PageNo==2 AND $error_check==0){ //--------- 確認ページ include 'form2.tpl'; $_SESSION['page_no']=2; }else if($PageNo==3 AND $error_check==0){ if($_SESSION['page_no'] == 2) { //--------- 完了ページ $mail_body = $mail_honbun; $mail_body .= "【会社名】\r\n"; $mail_body .= $company."\r\n\r\n"; $mail_body .= "【ご担当者名】\r\n"; $mail_body .= $familyname."\r\n\r\n"; $mail_body .= "【メールアドレス】\r\n"; $mail_body .= $email."\r\n\r\n"; $mail_body .= "【お電話番号】\r\n"; $mail_body .= $tel."\r\n\r\n"; $mail_body .= "【都道府県】\r\n"; $mail_body .= $pref_name."\r\n\r\n"; $mail_body2 = $company."\r\n"; $mail_body2 .= $familyname."様\r\n"; $mail_body2 .= $mail_honbun2; include 'form3.tpl'; /*管理者宛メール*/ $header_info="From: ".$mail_from."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($mail_to,$mail_subject,$mail_body,$header_info); //予備 mb_send_mail($mail_to2,$mail_subject,$mail_body,$header_info); /*ユーザ宛メール*/ $header_info="From: ".$mail_to."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); mb_language("Japanese"); mb_internal_encoding("UTF-8"); mb_send_mail($email,$mail_subject2,$mail_body2,$header_info); } else { //$first_html = $firstview; include 'form4.tpl'; } session_destroy(); }else{ //--------- 最初のページ if($error_check==0){ //$first_html = $firstview; } include 'form1.tpl'; } //フッタ include 'form-footer.tpl'; ?>

include 'form3.tpl';

の部分がサンクス画面の部分になります。
どうかご教授ください。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

完了ページで表示すべき内容をセッションに入れて、別に作った完了ページへ遷移(リダイレクト)すればどうでしょうか。

投稿2016/05/18 05:02

munyagu

総合スコア479

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

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

junannko

2016/05/18 05:09

munyaguさま さっそくのご回答をありがとうございます。 サンクスページのみ別に作成して飛ばす、 ということでございますね! まだまだ勉強不足で、具体的にどのように記述すれば良いかわからず、 大変申し訳ないのですがヒントだけでも頂戴できますでしょうか。 力不足で申し訳ございません。
munyagu

2016/05/18 10:39

セッションの使い方は、お使いのプログラム中にありますので、割愛します。 サンクス画面への遷移は ```php header('Location: http://www.sampla.com.thanks.php'); exit; ``` という風に記載します。 注意が必要なのは、header関数より以前にechoなどでの出力をしてはいけない(ブラウザに何も返してはいけない)ということです。 そうしないと、ヘッダ情報を2重に送信することになるため、エラーになってしまいます。
junannko

2016/05/24 00:32

munyaguさま いつもお世話になっております。 返信が大変遅くなり申し訳ございません。 ご教授をありがとうございます! 遷移方法、注意点を含め ご教授いただきました方法にて実装挑戦してみます!
junannko

2016/05/24 01:50

<?php session_start(); require_once ("./config.php"); //ヘッダ include 'form-header.tpl'; $PageNo = isset($_POST['page']) ? htmlspecialchars($_POST["page"]) : null; $company = isset($_POST['company']) ? htmlspecialchars($_POST["company"]) : null; $familyname = isset($_POST['familyname']) ? htmlspecialchars($_POST["familyname"]) : null; $email = isset($_POST['email']) ? htmlspecialchars($_POST["email"]) : null; $tel = isset($_POST['tel']) ? htmlspecialchars($_POST["tel"]) : null; $pref_name = isset($_POST['pref_name']) ? htmlspecialchars($_POST["pref_name"]) : null; $confirm = isset($_POST['confirm']) ? $_POST["confirm"] : null; // 入力チェック $error_check = 0; $ERROR_MSGS = array(); if ($PageNo >= 2) { if ($company === "") { $error_check = 1; $ERROR_MSGS[] = "「貴社名」を入力して下さい。"; } /* if ($name === "") { $error_check = 1; $ERROR_MSGS[] = "「ご担当者様名」を入力して下さい。"; } */ if ($familyname === "") { $error_check = 1; $ERROR_MSGS[] = "「ご担当者様名」を入力して下さい。"; } if (!ereg("^[^@]+@[^.]+\..+", $email)) { $error_check = 1; $ERROR_MSGS[] = "「メールアドレス」の形式に誤りがあります。"; } if ($tel === "") { $error_check = 1; $ERROR_MSGS[] = "「お電話番号」を入力して下さい。"; } if ($pref_name === "") { $error_check = 1; $ERROR_MSGS[] = "「都道府県」を入力して下さい。"; } if ($confirm == "") { $error_check = 1; $ERROR_MSGS[] = "個人情報取扱い同意書をお読みの上、「同意する」にチェックを入れてください。"; } } if($PageNo==2 AND $error_check==0){ //--------- 確認ページ include 'form2.tpl'; $_SESSION['page_no']=2; }else if($PageNo==3 AND $error_check==0){ if($_SESSION['page_no'] == 2) {//--------- 完了ページ header('Location: /thanks.php'); exit; } else { //$first_html = $firstview; include 'form4.tpl'; } session_destroy(); }else{ //--------- 最初のページ if($error_check==0){ //$first_html = $firstview; } include 'form1.tpl'; } //フッタ include 'form-footer.tpl'; ?> munyaguさま 完了画面の部分へ該当ソースを入れてみましたが、 Warning: Cannot modify header information - headers already sent by というエラーが出てしまい送信ができませんでした。 調べたところ、おっしゃっていただいた、 >注意が必要なのは、header関数より以前にechoなどでの出力をしてはいけない(ブラウ>ザに何も返してはいけない)ということです。 以上のせいでエラーになってしまっていると思われます。 ------------------------- //ヘッダ include 'form-header.tpl'; ------------------------- ------------------------- //--------- 確認ページ include 'form2.tpl'; ------------------------- 以上の部分でのhtmlソースのインクルードは 必要なため削除は難しくあります。 このような場合、どのような対応をすればよろしいのでしょうか? お忙しい中おそれいりますがご査収いただければ幸いです。 何卒よろしくお願いいたします。
munyagu

2016/05/24 02:02

出力されているエラーが 「注意が必要なのは、header関数より以前にechoなどでの出力をしてはいけない(ブラウザに何も返してはいけない)ということです。 そうしないと、ヘッダ情報を2重に送信することになるため、エラーになってしまいます。」 という点にあたります。 ヘッダのインクルードによる出力が、header('Location: /thanks.php');の前に送出されているためにエラーになっています。 ヘッダのインクルードを削除するのではなく、ヘッダのインクルードの前にエラーチェックをすれば良いのです。
junannko

2016/05/24 11:24

munyaguさま ご返信ありがとうございます。 フォームの構成上、インクルードソースの削除、移動がむずかしいため 今回はjsを使ってサンクスページへ飛ばし、 解決いたしました。 お忙しい中、真摯にご対応・ご教授いただいて 感謝しております。 ありがとうございました!
guest

0

質問の内容とは少しずれますが、こういう方法もありますよということで・・・

google analyticsを使ってる前提ですがコンバージョンを取る目的であればURLを変えなくても
ga('send', 'event', 'form', '送信完了');
などと完了ページを表示した時だけ送信してしまう方法もあります。

参考ページ
https://productforums.google.com/forum/#!topic/analytics-ja/rdvqRF3yX9w
http://www.uneidou.com/11502.php

投稿2016/05/18 05:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

junannko

2016/05/18 06:16

hide2e3rさま ご教授ありがとうございます! おお。 このような方法が。。 google analyticsなので、まずはこちらを試してみます!
guest

0

まずは現状のソースを機能で関数化(サブルーチン化)してみては?
おそらく、機能の切り分けができなくて悩んでおられるのかな、と。
分割できたら、別のスクリプトに切り分けるのも
そんなに難しくないのかなあ、という気がします。:-)

投稿2016/05/18 05:13

takasima20

総合スコア7458

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

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

junannko

2016/05/18 06:15

takasima20さま ご教授ありがとうございます! なるほど。 >おそらく、機能の切り分けができなくて悩んでおられるのかな、と。 まさにそうでございます。 分割。 elseを使わず すべて if でいっこずつでございますね??
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問