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

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

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

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

HTML

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

Q&A

解決済

1回答

549閲覧

POSTで送信する値を【確認画面】→【確定画面】で保持させたい

ujinchu

総合スコア19

PHP

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

HTML

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

0グッド

1クリップ

投稿2019/03/23 01:29

編集2019/03/23 03:14

POSTで送信する値を

【確認画面】→【確定画面】

で保持させたいと考えています。

しかし【確認画面】→【確定画面】に移る際に

foreachで展開した値を保持させることができません。

どうかお力をお貸しくださいm(._.)m

html

1//入力画面 form.html 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <title>フォーム画面</title> 7 </head> 8 <body> 9 <form class="form1" action="confirm.php" method="post" enctype="multipart/form-data"> 10 名前: <br> 11 <input type="text" name="onamae" placeholder="名前を入力してください"> 12 <br> 13 <input type="radio" name="gender" value="1">14 <input type="radio" name="gender" value="2">15 <br> 16 出身地域: 17 <select name="area"> 18 <option value="" selected>出身地を選択してください</option> 19 <option value="北海道">北海道</option> 20 <option value="東北">東北</option> 21 <option value="関東">関東</option> 22 <option value="中部">中部</option> 23 <option value="近畿">近畿</option> 24 <option value="中国">中国</option> 25 <option value="四国">四国</option> 26 <option value="九州">九州</option> 27 <option value="沖縄">沖縄</option> 28 </select> 29 <br> 30 サイト訪問の目的(複数選択可) 31 <br> 32 <select name="purpose[]" size="5" multiple> 33 <option value="ビジネス">ビジネス</option> 34 <option value="プライベート">プライベート</option> 35 <option value="趣味">趣味</option> 36 <option value="暇つぶし">暇つぶし</option> 37 <option value="特にない">特にない</option> 38 </select> 39 <br> 40 <br> 41 趣味: 42 <br> 43 <input type="checkbox" name="hobby[]" value="スポーツ">スポーツ<br> 44 <input type="checkbox" name="hobby[]" value="ゲーム">ゲーム<br> 45 <input type="checkbox" name="hobby[]" value="食事">食事<br> 46 <br> 47 <br> 48 本文 49 <br> 50 <textarea name="honbun" rows="8" cols="80"></textarea> 51 <br> 52 <input type="hidden" name="user_id" value="0001"> 53 <input type="hidden" name="MAX_FILE_SIZE" value="100000"> 54 <br> 55 画像: 56 <br> 57 <input type="file" name="uploadfile"> 58 <br> 59 説明: 60 <br> 61 <input type="text" name="comment"> 62 <br> 63 <input type="submit" value="送信"> 64 </form> 65 </body> 66</html>

php

1//確認画面 confirm.php 2<?php 3// エラーを出力する 4ini_set('display_errors', "On"); 5?> 6<!DOCTYPE html> 7<html lang="ja"> 8 <head> 9 <meta charset="utf-8"> 10 <title>確認画面</title> 11 </head> 12 <body> 13 <form name="form1" action="view.php" method="post"> 14 15 <?php 16 echo $_POST['onamae'] . "さん、こんにちは!<br><br>"; 17 18 if($_POST['gender'] == 1){ 19 echo "性別:男性<br>"; 20 }elseif($_POST['gender'] == 2){ 21 echo "性別:女性<br>"; 22 } else{ 23 echo "性別:未選択<br>"; 24 } 25 26 if( $_POST["area"] == ""){ 27 echo "出身地:未選択<br>"; 28 }else { 29 echo "出身地: " . $_POST["area"] . "<br>"; 30 } 31 ?> 32 33 <?php 34 if(isset($_POST["purpose"])){ 35 echo "サイト訪問の目的<br>"; 36 foreach ($_POST["purpose"] as $purposes) { 37 ?> 38 <ul> 39 <li><?php echo $purposes; ?></li> 40 </ul> 41 <?php 42 } 43 }else{ 44 echo "サイト訪問の目的:なし <br>"; 45 } 46 47 if(isset($_POST['hobby'])){ 48 $hobby = implode('と', $_POST['hobby']); 49 echo "私の趣味は" . $hobby . "です<br>"; 50 }else{ 51 echo "趣味:なし<br>"; 52 }; 53 echo "<br>"; 54 echo "入力内容:<br>"; 55 echo nl2br($_POST['honbun']); 56 57 $file_dir = '/Applications/MAMP/htdocs2/image/'; 58 $file_path = $file_dir . $_FILES['uploadfile']['name']; 59 60 if(move_uploaded_file($_FILES['uploadfile']['tmp_name'], 61 $file_path)){ 62 63 $img_dir = "/image/"; 64 $img_path = $img_dir . $_FILES['uploadfile']['name']; 65 $size = getimagesize($file_path); 66 ?> 67 ファイルアップロードを完了しました。 <br> 68 <img src="<?= $img_path ?>" <?= $size[3] ?> > <br> 69 <b> <?php echo $_POST['comment'] ?> <br> </b> 70 <?php 71 }else { 72 ?> 73 正常にアップロード処理されませんでした。 74 <?php 75 } 76 ?> 77 <br> 78 <input type="submit" value="確認" name="confirm"> 79 <input type="submit" value="戻る" name="back"> 80 <input type="hidden" name="user_id" value="<?= $_POST['user_id'] ?>"> 81 <input type="hidden" name="onamae" value="<?= $_POST['onamae'] ?>"> 82 <input type="hidden" name="honbun" value="<?= $_POST['honbun'] ?>"> 83 <input type="hidden" name="hobby" value="<?= $hobby ?>"> 84 <input type="hidden" name="gender" value="<?= $_POST['gender'] ?>"> 85 <input type="hidden" name="area" value="<?= $_POST['area'] ?>"> 86 <input type="hidden" name="purpose" value="<?= $purposes ?>"> 87 </form> 88 </body> 89</html> 90

php

1//確定画面 view.php 2<?php 3// エラーを出力する 4ini_set('display_errors', "On"); 5?> 6<?php 7$count = 1; 8if(isset($_COOKIE["count"])) { 9 $count = $_COOKIE["count"]; 10 $count++; 11} 12setcookie("count", $count, time()+10); 13 14 ?> 15 16<!DOCTYPE html> 17<html lang="ja"> 18 <head> 19 <meta charset="utf-8"> 20 <title>確定画面</title> 21 </head> 22 <body> 23 <?php if($count ==1){ 24 echo "初めての訪問です。<br>"; 25 }else{ 26 echo $count . "回目の訪問です。<br>"; 27 } ?> 28 <?php if($_POST['confirm']){ 29 echo $_POST['onamae'] . "さんの情報を登録しました!<br><br>"; 30 31 if($_POST['gender'] == 1){ 32 echo "性別:男性<br>"; 33 }elseif($_POST['gender'] == 2){ 34 echo "性別:女性<br>"; 35 } else{ 36 echo "性別:未選択<br>"; 37 } 38 39 if( $_POST["area"] == ""){ 40 echo "出身地:未選択<br>"; 41 }else { 42 echo "出身地: " . $_POST["area"] . "<br>"; 43 } 44 ?> 45 46 <?php 47 if(isset($_POST["purpose"])){ 48 echo "サイト訪問の目的<br>"; 49 foreach ((array)$_POST["purpose"] as $purposes) { 50 ?> 51 <ul> 52 <li><?php echo $purposes; ?></li> 53 </ul> 54 <?php 55 } 56 }else{ 57 echo "サイト訪問の目的:なし <br>"; 58 } 59 60 if(isset($_POST[hobby])){ 61 $hobby = $_POST['hobby']; 62 echo "趣味:" . $hobby . "<br>"; 63 }else{ 64 echo "趣味はありません。"; 65 }; 66 67 echo "入力内容:<br>"; 68 echo nl2br($_POST['honbun']); 69 ?> 70 <?php 71 } else { 72 ?> 73 <form class="form1" action="confirm.php" method="post"> 74 名前: <br> 75 <input type="text" name="onamae" value="<?= $_POST['onamae'] ?>"> 76 <br> 77 <textarea name="honbun" rows="8" cols="80"><?= $_POST['honbun'] ?></textarea> 78 <br> 79 <input type="hidden" name="user_id" value="<?= $_POST['user_id'] ?>"> 80 <br> 81 <input type="submit" value="送信"> 82 <?php } ?> 83 </form> 84 </form> 85 86 </body> 87</html> 88

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

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

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

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

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

m.ts10806

2019/03/23 02:07

確認画面でhtml確認されました? あとphpのエラー表示はonにされたほうが良いです。(やり方は「php エラー表示」で検索) foreachに文字列は投入できませんのでエラー出るはずです。
ujinchu

2019/03/23 02:55

ありがとうございます! >あとphpのエラー表示はonにされたほうが良いです。(やり方は「php エラー表示」で検索) ini_set('display_errors', "On"); を追加しましたところ、エラーの箇所がわかりやすくなりました。ありがとうございます。m(._.)m >foreachに文字列は投入できませんのでエラー出るはずです。 旧 → $_POST["purpose"] 新 → (array)$_POST["purpose"] のようにarray型に修正をしてみたのですが「Array to string conversion in」とのエラーメッセージが出てきてしまいます。 form.htmlにてselectに「purpose[]」というnameタグを付けたので、配列型になっていると思っていたのですが…。どのあたりに問題がありそうでしょうか?m(._.)m
m.ts10806

2019/03/23 03:03

前の質問でhiddenに設定するのは文字だけって言われてませんでしたっけ・・。
m.ts10806

2019/03/23 03:04

回答しようと思ったけど質問のコードがだいぶ改修されてますね。ほぼ別物。 何を元に回答すれば良いのでしょうか。
ujinchu

2019/03/23 03:18

>前の質問でhiddenに設定するのは文字だけって言われてませんでしたっけ・・。 色々と修正の手を加えて失念しておりました! hiddenで設定する値をforeachで展開した文字列「$purposes」に変えました。 そうすると確定画面で表示されるようになったのですが、今度はforeachで展開した$purposesの最後の値のみしか表示されなくなってしまいました。 また確認画面でソースを確認したところ、hiddenに設定した「$purposes」にはやはり$purposesの最後の値しか入っておりませんでした。 foreachで展開させた全ての文字列を要素ごとに全て受け渡すにはどうすればよろしいでしょうか?m(._.)m >回答しようと思ったけど質問のコードがだいぶ改修されてますね。ほぼ別物。何を元に回答すれば良いのでしょうか。 全てのコードを記載すると見にくいかと思い削ってしまいました…。 全てのコードを記載しました。
guest

回答1

0

ベストアンサー

キャストは可能な限り避けるべきです。

配列はあくまでphp上の概念なので文字列が置いてあるだけのhtmlには置けません。
一度文字列にしたあとに受取先でまた配列化してあげる必要があります。
(それかいっそセッション)

※動作確認してません。

確認画面

php

1$pp = [];//$_POST直接いじるのは非推奨なので別途変数に保管 2$purposes = $_POST['purpose']; 3foreach ($purposes as $purpose) { //個々なので単数形が望ましい 4 $pp[] = $purpose; 5 6//中略 7 8//とりあえず,で連結して文字列化。htmlエスケープも入れる 9 10<input type="hidden" name="purpose" value="<?= htmlspecialchars(implode(',',$pp), ENT_QUOTES, 'UTF-8') ?>">

完了画面

php

1$purposes = explode(',',$_POST['purpose']);//,で分割 2foreach ($purposes as $purpose) { //あとはお好きに 3 echo htmlspecialchars($purpose, ENT_QUOTES, 'UTF-8'); 4}

「何故htmlspecialcharsを通すのか?」を一言でどうぞ

本来は直接アクセスを防ぐための$_SERVERのREQUEST_METHODで確認したほうがいいし、リクエストについてはfilter_input()による取得のほうが望ましいです。

投稿2019/03/23 03:18

編集2019/03/23 03:21
m.ts10806

総合スコア80850

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

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

ujinchu

2019/03/23 03:43

ありがとうございます! >配列はあくまでphp上の概念なので文字列が置いてあるだけのhtmlには置けません。一度文字列にしたあとに受取先でまた配列化してあげる必要があります。 そうなのですね…。キャストが避けるべきだという記事を読みました。ありがとうございます。気をつけたいと思います。 foreachで配列に入れつつ、implodeで再び文字列化してhiddenに設定するという発想がありませんでした…。本当に勉強になります。ありがとうございますm(._.)m いただいたコードで問題なく動作しました。本当にありがとうございます!
m.ts10806

2019/03/23 03:51

あの記事のキャストによる言及は全体のほんの一部です。 一通り確認して今後に活かしてください。 あと私が提示したコードを「動いたから終わり」ではなく一行一行きちんと意図を持って意味があるというところを認識するようにしてください。 なんとなく組んでも思うようには動きません。プログラムは書いたようにしか動かないので。 (思った通り動くと勘違いしてる人は全く成長できてません。そういう人、現実にteratailにもたくさんいます)
ujinchu

2019/03/23 03:58

>あの記事のキャストによる言及は全体のほんの一部です。一通り確認して今後に活かしてください。 分かりました。 >あと私が提示したコードを「動いたから終わり」ではなく一行一行きちんと意図を持って意味があるというところを認識するようにしてください。なんとなく組んでも思うようには動きません。プログラムは書いたようにしか動かないので。 現在のコードを組み終えたら別のものに活かしてみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問