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

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

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

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

Q&A

解決済

1回答

4082閲覧

お問い合わせフォームでの画面遷移が戻ってしまう件に関して

hiropon15-8

総合スコア1

PHP

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

0グッド

0クリップ

投稿2020/06/19 09:40

編集2020/06/19 10:22

前提・実現したいこと

お問い合わせフォームを作っています。
「入力フォーム」、「入力確認画面」、「送信完了画面」を表示させたいです。

発生している問題・エラーメッセージ

現在、「入力フォーム」、「入力確認画面」への遷移は確認できました。
しかし、そこから送信ボタンを押すと画面が、最初の入力フォームに戻ってしまうという現象が起きています。「送信完了フォーム」へ順番に遷移させるにはどのように対応したら良いのかわからず、作業が止まっている段階です。
みなさんのお力を貸していただけないでしょうか。

contact

1 <?php 2 //=============================== 3 // ログ 4 //=============================== 5 //ログを取るか 6 ini_set('log_errors', 'on'); 7 //ログの出力ファイルを指定 8 ini_set('error_log', 'php.log'); 9 10 //=============================== 11 // デバッグ 12 //=============================== 13 // デバッグフラグ 14 $debug_flg = true; 15 //デバッグログ関数 16 function debug($str){ 17 global $debug_flg; 18 if(!empty($debug_flg)){ 19 error_log('デバッグ:'.$str); 20 } 21 } 22 23 24 25 define('MSG01', '入力必須です'); 26 define('MSG02', 'Emailの形式で入力してください'); 27 define('MSG03', '半角英数字のみご利用いただけます'); 28 define('MSG04', '500文字以内で入力してください'); 29 define('MSG05', '電話番号の形式が違います'); 30 define('SUC01', 'メールを送信しました'); 31 32 33 //=============================== 34 // グローバル変数 35 //=============================== 36 // エラーメッセージ格納用の配列 37 $err_msg = array(); 38 39 //=============================== 40 // バリデーション関数 41 //=============================== 42 function validRequired($str, $key){ 43 if(empty($str)){ //空文字はダメにする 44 global $err_msg; 45 $err_msg[$key] = MSG01; 46 } 47 } 48 //バリデーション関数(Email形式チェック) 49 function validEmail($str, $key){ 50 if(!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $str)){ 51 global $err_msg; 52 $err_msg[$key] = MSG02; 53 } 54 } 55 //バリデーション関数(半角チェック) 56 function validHalf($str, $key){ 57 if(!preg_match("/^[a-zA-Z0-9]+$/", $str)){ 58 global $err_msg; 59 $err_msg[$key] = MSG03; 60 61 } 62 } 63 //バリデーション関数(電話番号チェック) 64 function validZip($str, $key){ 65 if(!preg_match("/^(0{1}\d{9,10})$/", $str)){ 66 global $err_msg; 67 $err_msg[$key] = MSG05; 68 69 } 70 } 71 // selectboxチェック 72 // function validSelect($str, $key){ 73 // if(!preg_match("/^[0-9]+$/", $str)){ 74 // global $err_msg; 75 // if(!empty($err_msg[])){ 76 // return $err_msg[]; 77 // } 78 // } 79 // } 80 //post送信されていた場合 81 if(!empty($_POST)){ 82 83 //変数にユーザー情報を代入 84 $name = $_POST['your_name']; 85 $email = $_POST['email']; 86 $adress = $_POST['adress']; 87 $phone_number = $_POST['phone_number']; 88 89 90 //err_msgが空ならば、処理をする 91 if(empty($err_msg)){ 92 //nameの空文字チェック 93 validRequired($name, 'your_name'); 94 validRequired($email, 'email'); 95 validRequired($adress, 'adress'); 96 validRequired($phone_number, 'phone_number'); 97 98 //emailの形式チェック 99 validEmail($email, 'email'); 100 101 //phoneの電話番号チェック 102 validZip($phone_number, 'phone_number'); 103 104 } 105 106 } 107 108 109 //=============================== 110 // 画面遷移 111 //=============================== 112 // 変数の初期化 113 $page_flag = 0; 114 var_dump(1); 115 116 if( !empty($_POST['btn_confirm']) ) { 117 $page_flag = 1; 118 var_dump(2); 119 var_dump($_POST); 120 } elseif( !empty($_POST['btn_submit']) ) { 121 $page_flag = 2; 122 var_dump(3); 123 124 } 125 if(!empty($_POST['btn_submit']) ){ 126 $page_flag = 2; 127 var_dump(4); 128 } 129 130 //=============================== 131 // その他 132 //=============================== 133 // サニタイズ 134 function sanitize($str){ 135 return htmlspecialchars($str, ENT_QUOTES); 136 } 137 ?> 138 139 140 <!-- ヘッド --> 141 <?php 142 require('head.php'); 143 ?> 144 145 <body classk="pages"> 146 147 <!-- ヘッダー --> 148 <?php 149 require('header.php'); 150 ?> 151 152 <?php if( $page_flag === 1 ): ?> 153 154 <form mehod="post" action="" class="form-container"> 155 <section class="box"> 156 <div class="contact"> 157 <label>お名前</label> 158 <p><?php echo $_POST['your_name']; ?></p> 159 </div> 160 <div class="contact"> 161 <label>住所</label> 162 <p><?php echo $_POST['adress']; ?></p> 163 </div> 164 <div class="contact"> 165 <label>電話番号</label> 166 <p><?php echo $_POST['phone_number']; ?></p> 167 </div> 168 <div class="contact"> 169 <label>Email</label> 170 <p><?php echo $_POST['email']; ?></p> 171 </div> 172 <div class="contact"> 173 <label>質問内容</label> 174 <p><?php echo $_POST['text']; ?></p> 175 </div> 176 <div> 177 <input type="submit" name="btn-back" value="戻る"> 178 <input type="submit" name="btn_submit" value="送信"> 179 180 <input type="hidden" name="your_name" value="<?php echo $_POST['your_name']; ?>"> 181 <input type="hidden" name="adress" value="<?php echo $_POST['adress']; ?>"> 182 <input type="hidden" name="phone_number" value="<?php echo $_POST['phone_number']; ?>"> 183 <input type="hidden" name="email" value="<?php echo $_POST['email']; ?>"> 184 <input type="hidden" name="text" value="<?php echo $_POST['text']; ?>"> 185 <input type="hidden" name="btn_confirm"> 186 </div> 187 </section> 188 </form> 189 190 191 <?php elseif( $page_flag === 2 ): ?> 192 193 <p>送信しました!</p> 194 195 <?php else: ?> 196 197 198 <form action="" method="post" class="form-container"> 199 <section id="main" class="form"> 200 <div class="err_msg"> 201 <li>お名前: 202 <?php 203 if(!empty($err_msg['your_name'])){ 204 echo $err_msg['your_name']; 205 }else{ 206 echo 'OKです'; 207 } 208 209 ?> 210 </li> 211 <li>住所: 212 <?php 213 if(!empty($err_msg['adress'])){ 214 echo $err_msg['adress']; 215 }else{ 216 echo 'OKです'; 217 } 218 ?> 219 </li> 220 <li>電話番号: 221 <?php 222 if(!empty($err_msg['phone_number'])){ 223 echo $err_msg['phone_number']; 224 }else{ 225 echo 'OKです'; 226 } 227 ?> 228 </li> 229 <li>Email: 230 <?php 231 if(!empty($err_msg['email'])){ 232 echo $err_msg['email']; 233 }else{ 234 echo 'OKです'; 235 } 236 ?> 237 </li> 238 </div> 239 240 <h1>お問い合わせ</h1> 241 <div class="contact"> 242 <h3 style="padding-bottom: 10px;">お客様情報</h3> 243 244 お名前  <input type="text" name="your_name" placeholder="金沢 花子" class="form-contact" value="<?php if(!empty($_POST['your_name']) ) echo $_POST['your_name']; ?>"><br> 245 246 ご住所  <input type="text" name="adress" placeholder="金沢市・・・" class="form-contact" value="<?php if(!empty($_POST['adress']) ) echo $_POST['adress']; ?>" ><br> 247 248 電話番号 <input type="tel" name="phone_number" placeholder="電話番号" class="form-contact" value="<?php if(!empty($_POST['phone_number']) ) echo $_POST['phone_number']; ?>"><br> 249 250 Email   <input type="email" name="email" placeholder="Email" class="form-contact" value="<?php if(!empty($_POST['email']) ) echo $_POST['email']; ?>"> 251 </div> 252 <h3>ご質問先<br></h3> 253 <div class="chkbox contact"> 254 <input type="checkbox" name="rad1" value="1">有限会社〇 255 <input type="checkbox" name="rad2" value="sekkotuin">〇〇接骨院 256 </div> 257 <div> 258 <h3 style="padding-bottom: 10px;">質問内容<br></h3> 259 <textarea type="text" cols="40" rows="10" name="text" placeholder="質問内容" maxlength="500" style="border: none; font-size: 20px;"></textarea> 260 <p>※全項目の入力をしてから確認ボタンを押してください。</p> 261 </div> 262 <div class="submit contact"> 263 <input type="reset" value="クリア"> 264 <input type="submit" name="btn_confirm" value="内容を確認する"> 265 </div> 266 </section> 267 </form> 268<?php endif; ?> 269 270<!-- footer --> 271<?php 272require('footer.php'); 273?> 274

試したこと

まずは構文のコードミスを疑いました。特に見当たらず、submitの中身も特にコードミスは見つかりませんでした。
文章を削って、一つずつvar_dump();をかけて中身の確認を行いました。
$page_flag === 2;から$page_flag === 3;に遷移する時に中身が$page_flag === 1;の状態になり、$_POSTの中身も空になってしまうことが発見できました。
3に遷移する時に白紙に戻ったのではと考えています。
if文の構文ミスではと思い何度か書き直しをしてみましたが、一向に正解に導きませんでした。

私としては、出来る限りのことをしてみたのですが、これ以上解決策を見つけることができませんでした。
みなさま、お力を貸していただけたらと思います。
よろしくお願いします。 

###環境

・Mac OS X
・VSコードを使用しています
・MAMPにてphp開発しております

そのほか何かございましたら、申し付けてください。
早めにお返事致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/06/19 09:56

3つの機能をいきなり一つのファイルで実現しようとせず、3つのファイルで実現してみたらいいですよ。構造がシンプルになりますし。
hiropon15-8

2020/06/19 09:59

投稿ありがとうございます! 早速試してやってみます!
退会済みユーザー

退会済みユーザー

2020/06/19 10:02

デバッグ依頼は良くないのですが、第三者が再現できる情報は包み隠さず示すべきと思いますので、省略している部分も足してください。(ホスト固有情報やパスワード類はぼかしていいので。)
hiropon15-8

2020/06/19 10:27

申し訳ありません。 このファイルの全部を出してみました。 自力で直せるように今もしてみているのですが、何故画面が変わらないのかわからず。。。 わかる範囲で構いませんので、よろしくお願い致します。
guest

回答1

0

ベストアンサー

<form method="post" action="" class="form-container">

action先が指定されていないから
入力確認画面でのページを「check.php」だと仮定した時、

PHP

1 <form mehod="post" action="check.php" class="form-container"> 2

投稿2020/06/21 12:27

編集2020/06/22 04:33
kai0310

総合スコア2076

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

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

hiropon15-8

2020/06/22 02:41

回答ありがとうございます! methodのtが抜けていたことによって、画面遷移出来なかったようでした。 アドバイスありがとうございました。
kai0310

2020/06/22 04:36 編集

タイポは確信できるようにしときましょう。
hiropon15-8

2020/06/22 06:34

はい。今後、気を付けます! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問