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

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

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

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

Q&A

解決済

1回答

2166閲覧

フォームの値の引き渡しについて

YamamotoAtsushi

総合スコア17

PHP

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

0グッド

0クリップ

投稿2017/05/03 03:40

編集2017/05/03 06:36

フォームで名前を受け渡し、最後のthanks画面まで出そうと思いますが、
なぜがエラー画面に戻ってしまいます。どなたか、原因を教えて頂けませんでしょうか。宜しくお願い致します。

<comfirm.php>

php

1<?php 2 3 session_start(); 4 5 $toppage = 'form.html'; 6 7 if(isset( $_POST['name1' ] ) &&($_POST['name2'])){ 8 $_SESSION['name1']= $_POST['name1']; 9 $_SESSION['name2']= $_POST['name2']; 10 } else { 11 error("名前が未入力です"); 12 } 13 $name1 = $_SESSION['name1']; 14 $name1 = htmlentities($name1,ENT_QUOTES, "UTF-8"); 15 $name1 = str_replace("\r\n", "", $name1); 16 17 $name2 = $_SESSION['name2']; 18 $name2 = htmlentities($name2,ENT_QUOTES, "UTF-8"); 19 $name2 = str_replace("\r\n", "", $name2); 20 21 22 23 24 25 if(isset( $_POST['kana1' ] )&& ($_POST['kana2'])){ 26 $_SESSION['kana1']= $_POST['kana1']; 27 $_SESSION['kana2']= $_POST['kana2']; 28 } else { 29 error("フリガナが未入力です"); 30 } 31 32 $kana1 = $_SESSION['kana1']; 33 $kana1 = htmlentities($kana1,ENT_QUOTES, "UTF-8"); 34 $kana1 = str_replace("\r\n", "", $kana1); 35 36 $kana2 = $_SESSION['kana2']; 37 $kana2 = htmlentities($kana2,ENT_QUOTES, "UTF-8"); 38 $kana2 = str_replace("\r\n", "", $kana2); 39 40 if ($_POST['mode'] == 'post') { conf_form(); } 41 else if($_POST['mode'] == 'send') { send_form(); } 42 43 function conf_form(){ 44 global $name1; 45 global $name2; 46 global $kana1; 47 global $kana2; 48 49 $conf = fopen("tmpl/conf.html","r") or die; 50 $size = filesize("tmpl/conf.html"); 51 $data = fread($conf , $size); 52 fclose($conf); 53 54 $data = str_replace("!name1!", $name1, $data); 55 $data = str_replace("!name2!", $name2, $data); 56 $data = str_replace("!kana1!", $kana1, $data); 57 $data = str_replace("!kana2!", $kana2, $data); 58 59 echo $data; 60 exit; 61 } 62 63 function error($msg){ 64 $error = fopen("tmpl/error.html","r"); 65 $size = filesize("tmpl/error.html"); 66 $data = fread($error , $size); 67 fclose($error); 68 69 $data = str_replace("!message!", $msg, $data); 70 71 echo $data; 72 exit; 73 74 } 75 76 function send_form(){ 77 global $name1; 78 global $name2; 79 global $kana1; 80 global $kana2; 81 82 $title =array('氏','名','フリガナ(シ)','フリガナ(メイ)'); 83 $user_input = array($name1,$name2,$kana1,$kana2); 84 mb_convert_variables("SJIS","UTF-8",$title); 85 mb_convert_variables("SJIS","UTF-8",$user_input); 86 $fh = fopen("user.csv","a"); 87 $fh = fopen("user.csv","a"); 88 flock($fh,LOCK_EX); 89 fputcsv($fh, $user_input); 90 flock($fh,LOCK_UN); 91 fclose($fh); 92 93 $conf = fopen("tmpl/send.tmpl","r") or die; 94 $size = filesize("tmpl/send.tmpl"); 95 $data = fread($conf , $size); 96 fclose($conf); 97 98 99global $toppage; 100$data = str_replace("!top!", $toppage, $data); 101 102echo $data; 103exit; 104} 105?>

<conf.html>

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>お客様情報入力画面</title> 6</head> 7 <body> 8 <form action="comfirm.php" method="post"> 9 <table> 10 <tbody> 11 <tr> 12 <th>お名前(全角)</th> 13 <td><span><span><input type="text" name="name1" class="required" /></td> 14 <td><span><span><input type="text" name="name2" class="required" /></td> 15 </tr> 16 <tr> 17 <th>フリガナ</th> 18 <td><span></span><input type="text" name="kana1" class="required" /></td> 19 <td><span>メイ</span><input type="text" name="kana2" class="required" /></td> 20 </tr> 21 </tbody> 22 </table> 23 <p><input type="submit" value="送信する"></p> 24 <p><input type="button" value="前画面に戻る" onclick="history.back()" /></p> 25 <input type="hidden" name="mode" value="post"> 26 <input type="hidden" name="japan" value="<?php echo $select_book ?>"> 27 </form> 28 </body> 29</html>

<error.html>

html

1<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<style type="text/css"> 6<!-- 7p.msg { color:red; } 8--> 9</style> 10<title>エラー</title> 11</head> 12<body> 13 14<p><b>エラーが発生しました。</b></p> 15<p class="msg">!message!</p> 16 17<form> 18<input type="button" value="前画面に戻る" onclick="history.back()"> 19</form> 20 21</body> 22</html> 23

send.html

html

1<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<title>送信完了</title> 6</head> 7<body> 8 9<p>ありがとうございました。</p> 10<form> 11<input type="button" value="トップへ戻る" onclick="location.href='!top!';"> 12</form> 13</body> 14</html> 15

具体的には、htmlに<input type="hidden">の中にSessionを入れた変数を組込んだり、sessionをサンクス画面に組み込んだりしたのですが
それでも解決に至らないのが現状です。

入力 → 確認画面までは正常に機能するのですが、サンクス画面に移行しようとする「名前が未入力です」という画面でます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/05/03 06:21

ソースブロックの前に「これは~.php」とか書いてほしい。入力画面のソース、確認画面のソース、サンクス画面のソース、と3つ掲載してほしいところ。
guest

回答1

0

ベストアンサー

おそらく、
conf_form()
で出力されているHTMLの中に、name1とname2をsubmitする様な記述が存在しておらず、

PHP

1 if(isset( $_POST['name1' ] ) &&($_POST['name2'])){

で弾かれているんだと思います。
conf_form()
で出力されるHTMLの中でhiddenで最初の入力画面で入力している値を送ろうとしているか確認してみてください。
また、PHPの先頭に

PHP

1var_dump($_POST); 2

としてPOST値を常に確認しながらデバッグをするとわかりやすいかと思います。

*セキュリティ的には確認画面でhiddenで送るのではなく、sessionで値を引き渡す必要がありますが、学習段階でしょうからとりあえずHTMLフォームと$_POSTとの関係について理解されるのが先決かと思います。

投稿2017/05/03 06:25

tanat

総合スコア18713

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

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

YamamotoAtsushi

2017/05/03 07:13

有難うございました。変数を調べたら間違えておりました。 とりあえず、hiddenで挑戦し、次回Sessionで値渡しができるように 頑張ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問