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

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

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

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

2回答

2379閲覧

カレンダー予約で、セッションに入ってる予約数を在庫管理に組込みたい

sato165

総合スコア13

PHP

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

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

0クリップ

投稿2016/03/22 04:47

編集2022/01/12 10:55

カレンダー予約システムで、セッションに入ってる予約数を、在庫管理に組み込みたいのですがうまくいきません。
こちらの良いやり方があればアドバイスいただきたいです。

【できているところ】
データベースから商品番号を参照して、予約データの予約が入っている日の予約数を、在庫数$maxに参照して在庫の有る無しを判定

在庫を調べるためのデータ
$room_id 商品ID
$reservday 日時
$max 在庫総数 ※ $max < $m で在庫無し

1.予約データを取り出して、予約数を数える

PHP

1mysql_select_db($DBNAME, $connect); 2mysql_query("SET NAMES utf8"); 3$query = "SELECT * FROM reserve_table WHERE type='room_id' AND reserve_day='$reservday'"; 4$result = mysql_query($query) or die(mysql_error()); 5 while ($row = mysql_fetch_array($result)) { 6 $m++; 7 }

2.セッション$_SESSION[item]の中身

PHP

1Array ( 2// [key]1商品×日程ごとの固有KEY [reserve_day]予約開始日 [renpaku]連泊数 3[0] => Array ( [key] => 1458583223 [type] => 5 [reserve_day] => 20160322 [renpaku] => 1 ) 4[1] => Array ( [key] => 1458583836 [type] => 5 [reserve_day] => 20160327 [renpaku] => 1 ) 5[2] => Array ( [key] => 1458584148 [type] => 1 [reserve_day] => 20160321 [renpaku] => 1 ) 6)

【やりたいこと】
1の$mに、セッション変数に入っている$mを予約数にプラスしたい。
下の書き方では正常な動作になりませんでした。こちらをどのように修正すればいいかアドバイスをいただけるとありがたいです。

3.セッションの予約数をデータベースの予約数にプラスする

PHP

1foreach ($_SESSION['item'] as $od => $val) { 2$type = $val[ room_id ]; 3$reserve_day = $val[ reserve_Day ]; 4$renpaku = $val[ renpaku ]; //連泊日数 5$ren = 0; 6 7if($type == $row[type]) { 8 9 //連日予約用にreserve_dayを分断、月またぎの予約に対応 10 $year = substr($reserve_day, 0, 4); 11 $mon = substr($reserve_day, 4, 2); 12 $day = substr($reserve_day, 6, 2); 13 14 //連日予約の、全ての日が予約数に追加されるようにする 15 for ($i = 1; $i <= $renpaku; $i++) { 16 if ($renpaku >= 2) { 17 $tomorrow = mktime(0, 0, 0, $mon, $day + $ren, $year); 18 $reserve_day = date(Ymd, $tomorrow); 19 } 20 $ren++; 21 } 22 $m++; //ここが合っていない? 23}

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

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

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

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

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

ogaaaan

2016/03/22 05:31

何がやりたいのかいまいちわからないですね。期待する完成形を具体的に説明してほしいです。
sato165

2016/03/22 06:31

分かりづらくてすいません。追記しました。
ogaaaan

2016/03/22 06:33

あとついでに、『セッションカート』がちょっとよくわからないけど、これはただの『セッション変数』ってことでいいのかな? セッション変数の中身をダンプしたものも書いておくとみんな答えやすいかも。print_r($_SESSION)とかで中身全部表示できるんで。
sato165

2016/03/22 06:47

@ogaaaanさん ありがとうございます。 セッションの中身も追記しました。
ogaaaan

2016/03/22 06:51

やったー!ありがとう!!
guest

回答2

0

そもそもはじめのmysqli_queryの部分で間違いがあるんですが、データが取れていないのではないですか?
mysqli_query($query)

mysqli_query($dbconnect, $query)

こちらもです。
mysql_fetch_array($result)

mysqli_fetch_array($result)

投稿2016/03/22 06:23

編集2016/03/22 06:33
HirohitoOowaki

総合スコア16

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

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

sato165

2016/03/22 06:32

その部分は完動しておりました。下のセッション在庫の追加について悩んでいます…。
HirohitoOowaki

2016/03/22 06:47

$m に数値が入ってないのでは? whileの前に $m = 0; が必要ではないですか? まぁ、whileでループさせるよりも、 $m = mysql_num_rows($result); で直接数値を拾った方が簡単だと思いますが・・。
sato165

2016/03/22 06:51

$m = 0; は、その前に入れていました。 ループでなくて値を拾う方法もあるんですね。 セッションの予約が複数日だとmysqlの内容も複数拾わないといけないのでwhileにしていました。
HirohitoOowaki

2016/03/22 06:59

$_SESSION['item'] の中に 'room_id' が存在しないようですが、このroom_idはどこから来たのですか?
HirohitoOowaki

2016/03/22 08:11 編集

こういうことですかね? $room_id = 'room_id'; mysql_select_db($DBNAME, $connect); mysql_query("SET NAMES utf8"); $query = "SELECT * FROM reserve_table WHERE type='".$room_id."' AND reserve_day='".$reserve_day."'"; $result = mysql_query($query) or die(mysql_error()); $m = mysql_num_rows($result); foreach ($_SESSION['item'] as $od => $val) { $type = $val['type']; $reserve_day = $val['reserve_Day']; $renpaku = $val['renpaku']; //連泊日数 $ren = 0; if($type == $room_id) { //連日予約用にreserve_dayを分断、月またぎの予約に対応 $year = substr($reserve_day, 0, 4); $mon = substr($reserve_day, 4, 2); $day = substr($reserve_day, 6, 2); //連日予約の、全ての日が予約数に追加されるようにする for ($i = 1; $i <= $renpaku; $i++) { if ($renpaku >= 2) { $tomorrow = mktime(0, 0, 0, $mon, $day + $ren, $year); $reserve_day = date(Ymd, $tomorrow); } $ren++; } $m++; } }
sato165

2016/03/22 12:34

ありがとうございます! やりたいことに近くなってきた感じです。 フォームから送られてきた $room_id 商品ID $reservday 予約日です。 なので正しくは mysql_select_db($DBNAME, $connect); mysql_query("SET NAMES utf8"); $query = "SELECT * FROM reserve_table WHERE type='".$room_id."' AND reserve_day='".$reservday."'"; $result = mysql_query($query) or die(mysql_error()); $m = mysql_num_rows($result); のようになりますね。すいません、本文も修正しておきました。
guest

0

まとめてみました。
$room_id, $reservday, $_SESSION['item']にはそれぞれ値が入っているものとします。

mysql_select_db($DBNAME, $connect); mysql_query("SET NAMES utf8"); $query = "SELECT * FROM reserve_table WHERE type='".$room_id."' AND reserve_day='".$reservday."'"; $result = mysql_query($query) or die(mysql_error()); $m = mysql_num_rows($result); //現在の予約数 foreach ($_SESSION['item'] as $od => $val) { $key = $val['key']; //1商品×日程ごとの固有KEY $type = $val['type']; //商品ID $reserve_day = $val['reserve_Day']; //予約開始日 $renpaku = $val['renpaku']; //連泊日数 //商品IDが同じ場合にカウント if($type == $room_id){ //連日予約用にreserve_dayを分断、月またぎの予約に対応 $year = substr($reserve_day, 0, 4); $mon = substr($reserve_day, 4, 2); $day = substr($reserve_day, 6, 2); //連日予約の、全ての日が予約数に追加されるようにする for ($i = 0; $i < $renpaku; $i++) { if ($renpaku > 1) { $tomorrow = mktime(0, 0, 0, $mon, $day + $i, $year); $reserve_day = date('Ymd', $tomorrow); } //予約数を追加 $m++; } } }

投稿2016/03/22 13:55

HirohitoOowaki

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問