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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

3回答

8954閲覧

フォーム入力の確認画面をモーダルウィンドウで表示しsubmitする方法

momomiya

総合スコア10

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/03/07 03:03

HTMLでホームページを勉強しながら作っているプログラミング初心者ですが、
PHPでお問い合わせを作りました。

今、入力フォームページ → 確認ページ → 完了ページ とPHPで作ったのですが、
確認ページと完了ページをモーダルウィンドウのような感じで表示したいと思っています。

調べても次のページをモーダルウィンドウで表示する方法が見つからなかったのですが、
モーダルウィンドウ表示するには、入力フォームページのPHPに確認ページと完了ページも書かないと表示することはできないのですか?

アドバイスややり方もしくは何か参考になるサイトなどあれば教えていただければと思います。

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

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

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

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

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

guest

回答3

0

まずモーダルウィンドウの定義からですね
本来で言うモーダルウィンドウはブラウザの機能で
別ウィンドウのような仕組みで開いていました
ただ管理が煩雑なためにいまはもうほぼ使われていません。

近年言われるモーダルはあくまでも疑似モーダルウィンドウですから
厳密に言えば「次のページ」ではなく、そのページそのものですね
なので入力から確認をモーダルで開く場合、バックグラウンドで
データをやり取りしてその結果をモーダルに表示するという手順になります。

dialogなど新し目のタグで処理するとスマートに見えると思います。

sample

ちょっとざつですがsample
(バリデートもサニタイズもしていないので流れだけみて、そのままは流用しないで)

PHP

1<?PHP 2session_start(); 3$flg=filter_input(INPUT_POST,"flg"); 4$a=filter_input(INPUT_POST,"a"); 5$b=filter_input(INPUT_POST,"b"); 6if($flg==1){ 7 $_SESSION["a"]=$a; 8 $_SESSION["b"]=$b; 9 print json_encode(["a"=>$a,"b"=>$b]); 10 exit; 11}elseif($flg==2){ 12 if(!isset($_SESSION["a"])){ 13 header('Location:'.$_SERVER["SCRIPT_NAME"]); 14 exit; 15 } 16 print "完了"; 17 print "a=".htmlspecialchars($_SESSION["a"])."/"; 18 print "b=".htmlspecialchars($_SESSION["b"])."で登録"; 19 unset($_SESSION["a"]); 20 unset($_SESSION["b"]); 21 exit; 22}else{ 23 print_r($_SESSION); 24 unset($_SESSION["a"]); 25 unset($_SESSION["b"]); 26} 27?> 28<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 29<script> 30$(function(){ 31 32 $(document).on('click','#close',function(e){ 33 $('#dl').removeAttr('open'); 34 }); 35 $('#f1').on('submit',function(e){ 36 e.preventDefault(); 37 $.ajax({ 38 "type":"post", 39 "data":new FormData($(this).get(0)), 40 "dataType":"json", 41 "cache":false, 42 "processData": false, 43 "contentType": false, 44 }).done(function(data){ 45 $('#dl').remove(); 46 var form=$('<form method="post">'); 47 $('<div>').text("a:"+data.a).appendTo(form); 48 $('<div>').text("b:"+data.b).appendTo(form); 49 $('<input type="hidden" name="flg" value="2">').appendTo(form); 50 $('<div>').html($('<input type="submit" value="登録"><input type="button" id="close" value="閉じる">')).appendTo(form); 51 $('<dialog id="dl" open>').html(form).appendTo('body'); 52 console.log(data); 53 }); 54 }); 55}); 56</script> 57<form method="post" id="f1"> 58a:<input type="text" name="a"><br> 59b:<input type="text" name="b"><br> 60<input type="submit" value="send"> 61<input type="hidden" name="flg" value="1"> 62</form>

投稿2019/03/07 03:09

編集2019/03/07 04:14
yambejp

総合スコア114968

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

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

yambejp

2019/03/07 04:17

入力→確認はajaxで値をsubmit、 確認→完了はflg情報だけsubmitし値はセッション部分を参照
momomiya

2019/03/12 02:05

丁寧にコードまでありがとうございます。 やはり次のページではなくそのページに書くんですね。 今の私の知識では理解できなかったので、これを参考に勉強してみます。
退会済みユーザー

退会済みユーザー

2019/03/12 02:13 編集

> 本来で言うモーダルウィンドウはブラウザの機能で > 別ウィンドウのような仕組みで開いていました それはモードレスじゃねーですかい? 追記: うーんなんかモヤつくけどやっぱ何でもないですわ。すんません。
yambejp

2019/03/12 02:15

window.showModalDialogのことだから モーダルですよ
退会済みユーザー

退会済みユーザー

2019/03/12 02:30

あぁ、たしかに。完ぺきな勘違いですわ。申し訳ない。
guest

0

こういうのケースバイケースでわかってた方がいいと思うので、自分のやり方を共有します。
基本的にはjsでクラスを付与する方法を取ってます。
たとえば最初のフォームで入力値を自分はVue.jsのv-modelで次の確認モーダルウィンドウへ
双方向のバインディングをします。で、最初のフォームのボタンを押したときにモーダルウィンドウになるタグに
クラスを付与して表示させるとかですね。
ご参考までに。

簡易的なものですが、こんな感じです。

html

1<html lang="ja"> 2<head> 3 <meta charset="UTF-8"> 4 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 5 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 6 <title>Document</title> 7 <style> 8 * { 9 padding: 0; 10 margin: 0; 11 } 12 .st-modal { 13 position: fixed; 14 left: 0; 15 right: 0; 16 top: 120px; 17 width: 320px; 18 max-width: 0; 19 margin: 0 auto; 20 box-shadow: 0 0 6px rgba(0,0,0,0.16); 21 transition: 0.2s all; 22 visibility: visible; 23 overflow: hidden; 24 } 25 .st-modal.active { 26 max-width: 320px; 27 visibility: initial; 28 overflow: initial; 29 padding: 20px; 30 background-color: #efefef; 31 } 32 dl{ 33 display: flex; 34 align-items: center; 35 } 36 </style> 37</head> 38<body> 39 <div id="app"> 40 <form> 41 <div class="form"> 42 <input 43 type="text" 44 v-model="name" 45 required 46 aria-required="true" 47 > 48 <button 49 v-if="name" 50 type="button" 51 @click="isActive = true" 52 > 53 確認 54 </button> 55 <p v-else>{{ isMessage() }}</p> 56 </div> 57 <div 58 :class="{ active: isActive }" 59 class="st-modal" 60 > 61 <dl> 62 <dt>お名前:</dt> 63 <dd>{{ name }}</dd> 64 </dl> 65 <button type="submit"> 66 送信 67 </button> 68 </div> 69 </form> 70 </div> 71<script src="https://cdn.jsdelivr.net/npm/vue"></script> 72<script> 73const app = new Vue({ 74 el: '#app', 75 data: { 76 name: '', 77 isActive: false 78 }, 79 methods: { 80 isMessage: function () { 81 if (!this.name) return 'お名前が入力されていません。' 82 } 83 } 84}) 85</script> 86</body> 87</html>

投稿2019/03/07 04:08

編集2019/03/07 04:30
sauzar18

総合スコア163

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

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

momomiya

2019/03/12 01:54

丁寧にコードまでありがとうございます。 私の今の知識では理解できなかったので、これを参考に勉強してみます。
sauzar18

2019/03/12 02:04

いえいえ、参考にして知識を深めてもらえれば幸いです。
guest

0

お尋ねになっている仕組みは私がこれまで制作してきたサイトでもよく取り入れているものです。
詳しいコードはご紹介できませんが、考え方としては以下のようになります。

  • モーダルはhtmlとJavaScript (またはjQuery)で動かす
  • JavaScriptで、または必要に応じてAjaxを使いサーバサイド(PHPなど)でも入力値のチェックを行う
  • 入力値に問題がない場合確認画面のモーダルを表示しJavaScriptで拾った入力データをそこに表示
  • 送信ボタンをクリックしたら入力されたデータをAjaxで送信、サーバサイドで内容を再チェック
  • データに異常がなく無事に送信されたら別画面に遷移する、またはJavaScriptでモーダルの内容を書き換える(必要なら入力フォームを空にする)

投稿2019/03/07 11:12

cerfweb

総合スコア1907

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問