PHPで予約フォームを組んでいます。
同じ予約希望日でも3パターン(午前、午後1、午後2)があり、
それぞれに最大10件の予約枠を設けています。
こちらのページでは、申込者がカレンダーの表示から
任意の日付をクリックすると、
その日の予約状況が表示される仕組みです。
日付がクリックされたら、GETで同ページに日付(年月日)を受け渡します。
PDO接続でデータベースからfetchAllした予約情報の中から、
まず同じ日付(2019-10-00)の予約がすでに入っているかどうかをしらべて、
ある場合→現在の予約状況の表示
ない場合→新規予約日の表示
というふうにif文で表示を分けようと考えました。
それで、array_search()で検索をかけたのですが、
予約が入っていない日も入っている日も、結果がbool(false)となってしまいます。
同じ日付の予約日がすでにある場合は、
配列の整数インデックスキーが返ってくると思ったんですが
使い方が間違っているでしょうか。
アドバイスいただけると助かります。
ところどころでvar_dumpしてみました。
(Apache2.4.6/PHP Version 7.2.17/MySQL5.7x)
php
1【index.php】 2// データベース接続 3try { 4 $pdo = new PDO(PDO_DSN_HELPFUL,DB_USER,DB_PASSWORD); 5 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 6 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 7 print '接続しました。<br />'; 8}catch(PDOException $e) { 9 die('接続エラー:' . $e->getMessage()); 10} 11 12// 予約日(reserved_date)・予約枠am,pm1,pm2(slot)・空席数(available_num)取得 13// 最新の予約の受付日reception_dateから残りの空席を取得します 14try { 15 $sql = <<<VACANCY 16 SELECT 17 reserved_date,slot,available_num 18 FROM 19 reserv_info 20 GROUP BY reserved_date,slot 21 HAVING MAX(reception_date) 22 ; 23VACANCY; 24 $stmh = $pdo->prepare($sql); 25 $stmh->execute(); 26}catch(PDOException $e) { 27 echo "エラー:" . $e->getMessage(); 28} 29 30$rows = $stmh->fetchAll(PDO::FETCH_ASSOC); 31 32 33foreach($rows as $row){ 34 echo $row["reserved_date"] . $row["slot"]. "残り空き予約枠:" . $row["available_num"] . "名<br />"; 35} 36 37//カレンダーで選択された年月日 38if(isset($_GET['year'])&& isset($_GET['month'])&& isset($_GET['day'])) { 39 $page_flag = 1; 40 41 $year = h($_GET['year']); 42 $month = h($_GET['month']); 43 $day = h($_GET['day']); 44 $week = weekName($year,$month,$day); //曜日名(日〜土)を出す関数 45 $preferred_date = $year . "-" .$month. "-" .$day; 46 47 var_dump('予約希望日:'. $preferred_date); 48 49 $keyIndex = array_column($rows, 'reserved_date'); //予約済み日付だけの配列に変換 50 var_dump($keyIndex); 51 var_dump(array_search('$preferred_date',$keyIndex)); 52 53} 54...以下略
上の結果です。(データベースにはテスト用で3件の予約を入れてあります。)
2019-10-24午後の部① 13:00 - 14:30残り空き予約枠:6名
2019-11-11午前の部 9:00 - 10:30残り空き予約枠:3名
2019-11-13午前の部 9:00 - 10:30残り空き予約枠:8名
string(22) "予約希望日:2019-11-11" array(3) { [0]=> string(10) "2019-10-24" [1]=> string(10) "2019-11-11" [2]=> string(10) "2019-11-13" } bool(false)
回答3件
あなたの回答
tips
プレビュー