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

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

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

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

Q&A

3回答

176閲覧

セッションへ保存するための処理について

TomoyukiSatou

総合スコア11

PHP

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

0グッド

0クリップ

投稿2017/09/27 03:01

[数量入力ページ]にて商品の数量を入力し、[結果ページ]へ遷移後、数量追加ボタンにて[数量入力ページ]へ戻り、
再度、数量追加を行える仕様にしたいと考えております。

また、数量確定時にセッションに商品ごとの数量を保存しているのですが、
数量追加の度に各商品の数量(item1,item2,item3の数量)を追加していくにはどのような指定が必要になりますでしょうか。
ご教示頂けますと幸いです。

[数量入力ページ]

php

1<form action="" method="post" name=""> 2 <div class="item_wrap"> 3 <div class="item"> 4 <label>商品1</label> 5 <input id="item1" type="text" name="item1" value="<?php print $item1; ?>">6 </div> 7 <div class="item"> 8 <label>商品2</label> 9 <input id="item2" type="text" name="item2" value="<?php print $item2; ?>">10 </div> 11 <div class="item"> 12 <label>商品3</label> 13 <input id="item3" type="text" name="item3" value="<?php print $item3; ?>">14 </div> 15 </div> 16 17<p class="submit"><input type="submit" name="form-add" value="お見積り結果"></p> 18</form>

[セッションへ保存するための処理]

php

1//見積もり商品追加フォーム入力時のpost 2$item1=htmlspecialchars($_POST['item1'],ENT_QUOTES); 3$item2=htmlspecialchars($_POST['item2'],ENT_QUOTES); 4$item3=htmlspecialchars($_POST['item3'],ENT_QUOTES); 5 6$_SESSION['order'][$key]=array( 7 item1 => $item1, 8 item2 => $item2, 9 item3 => $item3, 10 );

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

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

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

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

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

guest

回答3

0

php

1//見積もり商品追加フォーム入力時のpost 2$item1=htmlspecialchars($_POST['item1'],ENT_QUOTES); 3$item2=htmlspecialchars($_POST['item2'],ENT_QUOTES); 4$item3=htmlspecialchars($_POST['item3'],ENT_QUOTES);

これは誤りです。フォームなどから入力データに対してhtmlspecialchars関数を使ってはいけません。
htmlspecialchars関数はあくまでHTMLに出力するために使用される関数です。
現状のコードはクロスサイトスクリプトの原因となります。

正しくは

php

1$filters = array( 2 'item1' => FILTER_DEFAULT, 3 'item2' => FILTER_DEFAULT, 4 'item3' => FILTER_DEFAULT 5); 6 7$postdata = filter_input_array(INPUT_POST, $filters);

として 受け取るか、

php

1$item1 = (string)filter_input(INPUT_POST, 'item1'); 2$item2 = (string)filter_input(INPUT_POST, 'item2'); 3$item3 = (string)filter_input(INPUT_POST, 'item3');

としなければなりません。

投稿2017/09/27 04:23

naohiro19_

総合スコア178

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

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

0

以下のようなイメージで、すでにセッションに保存されている数に新しく追加された数を足して、保存してみてはどうでしょうか?

php

1// すでにセッションに保存されている数 2$currentCounts = array( 3 "item1" => ( isset($_SESSION["order"]["item1"]) ) ? $_SESSION["order"]["item1"] : 0, 4 "item2" => ( isset($_SESSION["order"]["item2"]) ) ? $_SESSION["order"]["item2"] : 0, 5 "item3" => ( isset($_SESSION["order"]["item3"]) ) ? $_SESSION["order"]["item3"] : 0 6); 7 8// 新しく追加された数を足して保存 9$_SESSION["order"] = array( 10 "item1" => $currentCounts["item1"] + $item1, 11 "item2" => $currentCounts["item2"] + $item2, 12 "item3" => $currentCounts["item3"] + $item3 13);

投稿2017/09/27 03:30

milktea

総合スコア116

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

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

TomoyukiSatou

2017/09/27 11:42

milkteaさん、ご回答ありがとうございます! セッションに保存されている数に足していく形で、 上記の記述を参考に、試してみます。
guest

0

追加の意図がよくわからないのですが、修正ではなく追加なのでしょうか?

PHP

1session_start(); 2$text=[]; 3foreach(["item1","item2","item3"] as $key){ 4 $val=filter_input(INPUT_POST,$key); 5 if(!is_null($val)){ 6 unset($_SESSION[$key]); 7 if($val!=="") $_SESSION[$key]=$val; 8 }elseif(isset($_SESSION[$key])){ 9 $val=$_SESSION[$key]; 10 } 11 $text[$key]=htmlspecialchars($val); 12}

HTML

1<form action="" method="post" name=""> 2<div class="item_wrap"> 3<div class="item"> 4<label>商品1</label> 5<input id="item1" type="text" name="item1" value="<?php print $text["item1"]; ?>">個 6</div> 7<div class="item"> 8<label>商品2</label> 9<input id="item2" type="text" name="item2" value="<?php print $text["item2"]; ?>">個 10</div> 11<div class="item"> 12<label>商品3</label> 13<input id="item3" type="text" name="item3" value="<?php print $text["item3"]; ?>">個 14</div> 15</div> 16<p class="submit"><input type="submit" name="form-add" value="お見積り結果"></p> 17</form>

投稿2017/09/27 03:50

yambejp

総合スコア114806

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

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

TomoyukiSatou

2017/09/27 12:04

yambejpさん、ご回答ありがとうございます! 数量の追加ができるようにしてほしいとの要望があり、進めているのですが、 確かに数量の修正・変更ができる形の方が自然かもしれません。。 うまくいかずに試行錯誤している段階ですので、是非試させていただきたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問