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

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

ただいまの
回答率

90.48%

  • PHP

    20813questions

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

  • URL

    208questions

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

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

受付中

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 1,422

junannko

score 12

お世話になっております。
以下のソースにて、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';

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/18 14:09

    munyaguさま

    さっそくのご回答をありがとうございます。
    サンクスページのみ別に作成して飛ばす、
    ということでございますね!

    まだまだ勉強不足で、具体的にどのように記述すれば良いかわからず、
    大変申し訳ないのですがヒントだけでも頂戴できますでしょうか。
    力不足で申し訳ございません。

    キャンセル

  • 2016/05/18 19:39

    セッションの使い方は、お使いのプログラム中にありますので、割愛します。

    サンクス画面への遷移は

    ```php
    header('Location: http://www.sampla.com.thanks.php');
    exit;
    ```
    という風に記載します。

    注意が必要なのは、header関数より以前にechoなどでの出力をしてはいけない(ブラウザに何も返してはいけない)ということです。
    そうしないと、ヘッダ情報を2重に送信することになるため、エラーになってしまいます。

    キャンセル

  • 2016/05/24 09:32

    munyaguさま

    いつもお世話になっております。
    返信が大変遅くなり申し訳ございません。

    ご教授をありがとうございます!
    遷移方法、注意点を含め
    ご教授いただきました方法にて実装挑戦してみます!

    キャンセル

  • 2016/05/24 10: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ソースのインクルードは
    必要なため削除は難しくあります。
    このような場合、どのような対応をすればよろしいのでしょうか?
    お忙しい中おそれいりますがご査収いただければ幸いです。
    何卒よろしくお願いいたします。

    キャンセル

  • 2016/05/24 11:02

    出力されているエラーが
    「注意が必要なのは、header関数より以前にechoなどでの出力をしてはいけない(ブラウザに何も返してはいけない)ということです。
    そうしないと、ヘッダ情報を2重に送信することになるため、エラーになってしまいます。」
    という点にあたります。

    ヘッダのインクルードによる出力が、header('Location: /thanks.php');の前に送出されているためにエラーになっています。

    ヘッダのインクルードを削除するのではなく、ヘッダのインクルードの前にエラーチェックをすれば良いのです。

    キャンセル

  • 2016/05/24 20:24

    munyaguさま

    ご返信ありがとうございます。
    フォームの構成上、インクルードソースの削除、移動がむずかしいため
    今回はjsを使ってサンクスページへ飛ばし、
    解決いたしました。

    お忙しい中、真摯にご対応・ご教授いただいて
    感謝しております。
    ありがとうございました!


    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/18 15:15

    takasima20さま

    ご教授ありがとうございます!
    なるほど。

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

    キャンセル

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 15:16

    hide2e3rさま

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • PHP

    20813questions

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

  • URL

    208questions

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