前提・実現したいこと
(例)PHPでサービス開発をしています。
コメント機能を作っています。if文やforeach文でデータ取得と画面出力に困っています。
発生している問題・エラーメッセージ
「メッセージ投稿はまだありません」と画面に出力したいのですが、メッセージを送信していていないのに、空のテキストが出力されている状態です。(エラーはLINEのメッセージで例えるとメッセージ送信したときの空の状態が吹き出しに出てる状態です)
該当のソースコード
// 共通変数・関数ファイルを読み込む require('function.php'); debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); debug('「 連絡掲示板ページ」'); debug('「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「「'); debugLogStart(); //======================== // 画面処理 //======================== $parterUserId = ''; $parterUserInfo = ''; $myUserInfo = ''; $giftInfo = ''; $viewData = ''; $u_id = $_SESSION['user_id']; // 画面表示用データ取得 // ========================= // GETパラメータを取得 $m_id = (!empty($_GET['m_id'])) ? $_GET['m_id'] : ''; // $g_id = (!empty($_GET['g_id'])) ? $_GET['g_id'] : ''; // DBから掲示板とメッセージデータを取得 $viewData = getMsgAndBoards($m_id); debug('取得したDBデータ(連絡掲示板) :' . print_r($viewData, true)); // パラメータに不正な値が入っているかチェック if (empty($viewData)) { error_log('エラー発生 : 指定したページに不正な値が入りました。'); header('Location:mypage.php'); // マイページへ } // ギフト情報を取得 $giftInfo = getGiftOne($viewData[0]['gift_id']); debug('取得したDBデータ :' . print_r($giftInfo, true)); // ギフト情報が入っているかチェック if (empty($giftInfo)) { error_log('エラー発生 : ギフト情報を取得できませんでした。'); header('Location:mypage.php'); // マイページへ } // viewDataから相手のユーザーIDを取り出す $dealUserIds[] = $viewData[0]['sale_user']; $dealUserIds[] = $viewData[0]['buy_user']; if (($key = array_search($_SESSION['user_id'], $dealUserIds)) !== false) { unset($dealUserIds[$key]); } $parterUserId = array_shift($dealUserIds); debug('取得した相手のユーザーID :' . $parterUserId); // DBから取引相手のユーザー情報を取得 if (isset($parterUserId)) { $parterUserInfo = getUser($parterUserId); } // 相手のユーザー情報が取れたかチェック if (empty($parterUserInfo)) { error_log('エラー発生 : 相手のユーザー情報が取得出来ませんでした'); header('Location:mypage.php'); } // DBから自分のユーザー情報を取得 $myUserInfo = getUser($_SESSION['user_id']); debug('取得したユーザーデータ :' . print_r($myUserInfo, true)); // 自分のユーザー情報と相手のユーザー情報が取れたかチェック if (empty($myUserInfo) && empty($parterUserInfo)) { error_log('エラー発生 : 自分のユーザー情報または相手のユーザー情報が取得できませんでした。'); header('Location:mypage.php'); } // POST送信されていた場合 if (!empty($_POST)) { debug('POST送信があります。'); // ログイン認証 require('auth.php'); // バリデーションチェック $msg = (isset($_POST['msg'])) ? $_POST['msg'] : ''; // 最大文字数チェック validMaxLength($msg, 'msg', '1000'); // 未入力チェック validRequired($msg, 'msg'); if (empty($err_msg)) { debug('バリデーションOKです'); // 例外処理 try { // DBへ接続 $dbh = dbConnect(); // SQL文作成 $sql = 'INSERT INTO message ( board_id, send_date, to_user, from_user, msg, create_date) VALUES (:b_id, :send_date, :to_user, :from_user, :msg, :date)'; $data = array( ':b_id' => $m_id, ':send_date' => date('Y-m-d H:i:s'), ':to_user' => $parterUserId, ':from_user' => $_SESSION['user_id'], ':msg' => $msg, ':date' => date('Y-m-d H:i:s') ); // クエリ実行 $stmt = queryPost($dbh, $sql, $data); if ($stmt) { $_POST = array(); //POSTをクリア debug('連絡掲示板へ遷移します。'); header('Location: ' . $_SERVER['PHP_SELF'] . '?m_id=' . $m_id); // 自分自身に遷移する } } catch (Exception $e) { error_log('エラー発生 :' . $e->getMessage()); $err_msg['common'] = MSG07; } } } debug('画面表示処理終了 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'); ?> <?php $siteTitle = '連絡掲示板'; require('head.php'); ?> <body class="page-msg page-1colum"> <!-- header --> <?php require('header.php'); ?> <p id="js-show-msg" style="display:none;" class="msg-slide"> <?php echo getSessionFlash('msg_success'); ?> </p> <!-- メインコンテンツ --> <div id="contents" class="site-width"> <!-- Main --> <section id="main-message"> <div class="msg-info"> <div class="avatar-img"> <img src="<?php echo showImg(sanitize($parterUserInfo['pic'])); ?>" alt="" class="avatar"> </div> <div class="avatar-info"> <?php echo sanitize($parterUserInfo['username']) . ' ' . sanitize($parterUserInfo['age']) . '歳' ?> <br> 〒<?php echo wordwrap($parterUserInfo['zip'], 4, "-", true); ?><br> <?php echo sanitize($parterUserInfo['addr']); ?><br> TEL : <?php echo sanitize($parterUserInfo['tel']); ?> </div> <div class="product-info"> <div class="left"> 取引商品<br> <img src="<?php echo showImg(sanitize($giftInfo['pic1'])); ?>" alt="" height="70px" width="auto"> </div> <div class="right"> <?php echo sanitize($giftInfo['name']); ?><br> 取引金額: <span class="price">¥<?php echo number_format(sanitize($giftInfo['price'])); ?></span><br> 取引開始日: <?php echo date('Y/m/d', strtotime(sanitize($viewData[0]['create_date']))); ?> </div> </div> </div> <div class="area-bord" id="js-scroll-bottom"> <?php if (!empty($viewData)) { foreach ($viewData as $key => $val) { if (!empty($val['from_user']) && $val['from_user'] == $parterUserId) { ?> <div class="msg-cnt msg-left"> <div class="avatar"> <img src="<?php echo sanitize(showImg($parterUserInfo['pic'])); ?>" alt="avatar"> </div> <p class="msg-inrTxt"> <span class="triangle"></span> <?php echo sanitize($val['msg']); ?> </p> <div style="font-size:.5em;"><?php echo sanitize($val['send_date']); ?></div> </div> <?php } else { ?> <div class="msg-cnt msg-right"> <div class="avatar"> <img src="<?php echo sanitize(showImg($myUserInfo['pic'])); ?>" alt="avatar"> </div> <p class="msg-inrTxt"> <span class="triangle"></span> <?php echo sanitize($val['msg']); ?> </p> <div style="font-size:.5em; text-align:right"><?php echo sanitize($val['send_date']); ?></div> </div> <?php } } } else { ?> <p style="text-align:center line-height:20;">メッセージ投稿はまだありません</p> <?php } ?> </div> <div class="area-send-msg"> <form action="" method="post"> <textarea name="msg" id="" cols="30" rows="3"></textarea> <input type="submit" value="投稿する" class="btn btn-send"> </form> </div> </section> <script> window.addEventListener('DOMContentLoaded', function() { //scrollHeightは要素のスクロールビューの高さを取得するもの $('#js-scroll-bottom').animate({ scrollTop: $('#js-scroll-bottom')[0].scrollHeight }, 'fast'); }); </script> </div> <!-- footer --> <?php require('footer.php'); ?>
試したこと
if文で条件分岐してforeach文で回しています。それぞれをデータベースから取得しています。メッセージを送信したときにはコメントが出るのですが、メッセージ画面遷移したときに空のコメントが出力されいます。
ご教授できたらなと思います。よろしくおねがいします。
補足情報(FW/ツールのバージョンなど)
php7.3.3
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/25 00:13
2019/09/25 15:12
2019/09/25 15:26
2019/09/25 16:08
2019/09/28 15:46
2019/10/05 01:14