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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1531閲覧

お問い合わせフォームから送信完了画面作成

chocon

総合スコア14

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/11/28 15:22

index.htmlでお問い合わせフォームを作成し
これを元に確認ページを作りたいと思っています。

ただ、今回HTMLとCSSだけを使用して
お問い合わせ項目の選択によって設問を
表示・非表示という形にしています。

共通しない項目が必須の場合
どのようにphpで記述したら良いのでしょうか。

PHPは本当に初心者で調べながら1からトライしてる状況です。
やり方としてもこの方法で合っているのか不安なので間違っていたら教えてください。

1、index.htmlでフォーム作成
2、同じフォルダーに新しいファイルでindex.phpを作成(今ここです。)

html

1 <form action="" method="POST"> 2 3 4 <div class="container"> 5 6 <div> 7 <label for="i_name" class="question">お名前</label> 8 </div> 9 <div> 10 <em>必須</em> 11 </div> 12 <div> 13 <input id="i_name" type="text" name="name" required> 14 </div> 15 </div> 16 17 <div class="container"> 18 <div> 19 <label for="i_mailadrees" class="question">メールアドレス</label> 20 </div> 21 <div> 22 <em>必須</em> 23 </div> 24 <div> 25 <input id="i_mailadrees" type="text" name="mailadrees" required> 26 </div> 27 </div> 28 29 <div class="container"> 30 <div> 31 <label for="i_telnumber" class="question">電話番号</label> 32 </div> 33 <div> 34 <em>必須</em> 35 </div> 36 <div> 37 <input id="i_telnumber" type="text" name="telnumber" required> 38 </div> 39 </div> 40 <!-- 問い合わせ項目選択 --> 41 42 <div class="fprm_container"> 43 <p class="qtype_title">お問い合わせ項目</p><em class="must">必須</em> 44 <!-- <div class="qtype_item"> --> 45 <input id="i_qtype01" type="radio" name="qtype" value="お問い合わせ" > 46 <label for="i_qtype01" class="qtype_item">お問い合わせ</label><br> 47 <input id="i_qtype02" type="radio" name="qtype" value="資料請求" > 48 <label for="i_qtype02" class="qtype_item">資料請求</label><br> 49 <input id="i_qtype03" type="radio" name="qtype" value="キャンペーン" > 50 <label for="i_qtype03" class="qtype_item">キャンペーン</label> 51 <!-- </div> --> 52 <div class=clearfix></div> 53 <div class="data-contents"> 54 <div class="siryou"> 55 <div class="textarea_01"> 56 <label>お問い合わせ内容</label> 57 </div> 58 <div class="textarea_01"> 59 <em class=c_em>必須</em></div> 60 <div class="textarea_01"> 61 <textarea required cols="65"></textarea></div> 62 </div> 63 <!-- <資料請求選択時に表示 --> 64 65 <div class="siryou-02"> 66 <div class="textarea_01"> 67 <label class="s_02title">お問い合わせ内容</label></div> 68 <div class="textarea_01"> 69 <em class="s_02em">任意</em></div> 70 <div class="textarea_01"> 71 <textarea cols="65"></textarea></div> 72 <div class="clearfix"></div> 73 </div> 74                 <!-- キャンペーン選択時に表示 --> 75 76 <div class="siryou-03"> 77 <div class="s_con"> 78 <label for="url01">対象サイトURL</label> 79 </div> 80 <div class="s_con"><em>必須</em></div> 81 <div class="s_con"> 82 <input id="url01" type="text"name="url_name" placeholder="http://www.j-mamenoki.co.jp" required> 83 </div> 84 85 <div class="clearfix"></div> 86 87 88 <div class="s_con02"> 89 <label for="url02">記事</label></div> 90 <div class="s_con02"> 91 <em class="con02_em">必須</em> 92 </div> 93 <div class="s_con02"> 94 <input id="url02" type="text"name="url_name" class="con02_input"required> 95 </div> 96 <div class="clearfix"></div> 97 98 <div class="s_con03"> 99 <label for="url03">目的・狙い</label></div> 100 <div class="s_con03"> 101 <em class="con03_em">必須</em></div> 102 <div class="s_con03"> 103 <input id="url03" type="text"name="url_name" class="con03_input" required> 104 </div> 105 <div class="clearfix"></div> 106 <div class="title_sc03"> 107 108 <label>現状の課題<br>(※複数回答可)</label> 109 </div> 110 <em class="sc03_em">必須</em> 111 <div class="item_sc03"> 112 <div> 113 <input id="check02_01" type="checkbox"> 114 <label for="check02_01" required>検討している</label> 115 </div> 116 117 <div> 118 <input id="check02_02" type="checkbox"> 119 <label for="check02_02" required>他社乗り換え</pre> 120 </label> 121 </div> 122 123 <div> 124 <input id="check02_03" type="checkbox"> 125 <label for="check02_03" required>その他</label> 126 </div> 127</div> 128 </div> 129 <p class="btn"><input type="submit" value="送信内容を確認する"></p> 130 </form> 131 </section> 132 133 134 135 136 137 138 139 140

php

1<?php 2extract($_post); 3 4$flag=0; 5 6if(empty($company)){ 7 echo '<p><span>必須</span>企業名を入力してください。</p><br>'; 8 $flag=1; 9} 10if(empty($name)){ 11 echo '<p><span>必須</span>名前を入力してください。</p><br>'; 12 $flag=1; 13} 14if(empty($mailadrees)){ 15 echo '<p><span>必須</span>メールアドレスを入力してください。</p><br>'; 16 $flag=1; 17} 18if(empty($telnumber)){ 19 echo '<p><span>必須</span>電話番号を入力してください。</p><br>'; 20 $flag=1; 21} 22 23if(empty($qtype)){ 24 echo '<p><span>必須</span>お問い合わせ項目を入力してください。</p><br>'; 25 $flag=1; 26} 27 28echo " 29<!DOCTYPE html> 30<html> 31<head> 32<meta charset='UTF-8'> 33<title>Insert title here</title> 34</head> 35<body> 36お名前:$name 37</br> 38メールアドレス:$mailadrees 39</br> 40電話番号:$telnumber 41</br> 42<form action='index02.php' method='post'> 43<input type='hidden' name='name' value='$name'> 44<input type='hidden' name='mail' value='$mailadrees'> 45<input type='hidden' name='mail' value='$telnumber'> 46 47<input type='button' onclick='.back()' value='戻る''> 48<input type='submit' value='確認'> 49</form> 50</body> 51</html>"; 52 53 54

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

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

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

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

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

guest

回答1

0

ベストアンサー

extract()使うのは、マジデやめよう。
フォームの受信データを変数に展開してくれる一見便利そうな関数だけど、
ぶっちゃけセキュリティーホールになりがち。
たまたま使う変数名で偶然外部からいたずらされたら、
変数を初期化しないで使ったりすると意図しない場面に外部からデータが流し込まれて詰みます。

あと、phpのコードは「<?php」ではじまり「?>」で終わるのはわかると思うのですが、

php

1<?php 2 $value = 1; // 1以外のデータのときの挙動も試してね 3 if ($value === 1) { 4?><p>1でした</p> 5<?php 6 } else { 7?><p>1じゃなかった</p> 8<?php 9 }

みたいなHTML出力の制御にも使えます。

あとエラーメッセージの出し方の工夫として、
$err_msg = [];なんて配列を初期化しておいて、
フォームの条件を検査してエラーメッセージを配列の最後に足していく
$err_msg[] = 'aでエラーがありました。';
$err_msg[] = 'bでエラーがありました。';
で配列のデータ数をカウントすればif (count($err_msg) === 0) {
エラーゼロかどうか分かる、
みたいなことをよくやります。

php

1 if (count($err_msg) > 0) { 2 ?><p><?php 3 foreach ($err_msg as $msg) { 4 echo htmlspecialchars($msg, ENT_QUOTES, "UTF-8") . "<br>" . PHP_EOL; 5 } 6 ?></p> 7<?php 8 }

こんな書き方なら、エラーメッセージがない時にはp要素すら出力しないし、
エラーメッセージごとにbr要素で改行してくれることを期待するわけで。

filter_input()を駆使してもいいかもしれません。場合によりますが。
メールアドレスが送信不能なデタラメじゃないことを検査したり。
PHP: filter_input - Manual
配列パラメータが配列として受け取れるようにもできたりするので、ぜひご検討を。

投稿2020/11/28 16:01

編集2020/11/30 01:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

chocon

2020/11/29 15:15

有り難う御座います! もう少し関数についても詳しくみてから 使えるかどうかデメリットなども合わせてみてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問