Дублирует сообщения при обновлении страницы

Доброго времени суток , возникла проблема , при отправке сообщения , потом если обновить страницу , оно дублируется ( в датабазу тоже дублируется ) Код прилагаю . Помогите пожалуйста

Код (Text):
  1. <?php
  2. session_start();
  3. ini_set(‘display_errors’, ‘on’);
  4. require_once(«./Connector/DbConnectorPDO.php»);
  5. require(«./helper/helperFunctions.php»);
  6. $userId = isset($_SESSION[«userId»]) && !IsVariableIsSetOrEmpty($_SESSION[«userId»]) ? $_SESSION[«userId»] : 0;
  7. $connection = getConnection();
  8. $userObj = $userId !== 0 && !IsVariableIsSetOrEmpty($_SESSION[«user»]) ? $_SESSION[«user»] : «»;
  9. $msgList = [];
  10. $recentMsgList = [];
  11. $msgToUserId = isset($_GET[«id»]) && !IsVariableIsSetOrEmpty($_GET[«id»]) ? $_GET[«id»] : 0;
  12.  
  13. if (isset($_POST[«SendMessage»]) && !IsVariableIsSetOrEmpty($_POST[«SendMessage»])) {
  14.     $msg = $_POST[«msg»];
  15.     if (isset($msg) && !IsVariableIsSetOrEmpty($msg)) {
  16.         $insertMessageQuery = «INSERT INTO messages(msg_from_user_id,msg,msg_to_user_id,msg_date,is_msg_read)
  17.                                values(:userId,:msg,:msgToUserId,NOW(),0)»;
  18.         $insertStmt = $connection->prepare($insertMessageQuery);
  19.         $insertStmt->bindParam(‘:userId’, $userId);
  20.         $insertStmt->bindParam(‘:msg’, $msg);
  21.         $insertStmt->bindParam(‘:msgToUserId’, $msgToUserId);
  22.         $insertStmt->execute();
  23.        
  24.     }
  25.  
  26. }
  27.  
  28. if ($userId === 0 || (!isset($_GET[«id»]) && !isset($msgToUserId))) {
  29.     header(«location:./view-profiles.php»);
  30.     exit;
  31. }
  32.  
  33. if ($msgToUserId !== 0) {
  34.  
  35.     $recentMsgQuery = «SELECT
  36.     *
  37. FROM
  38.     (
  39.     SELECT profile
  40.         .id,
  41.         profile.firstName,
  42.         profile.lastName,
  43.         profile.imgUrl,
  44.         (
  45.         SELECT
  46.             msg
  47.         FROM
  48.             messages
  49.         WHERE
  50.             messages.msg_from_user_id = profile.id OR messages.msg_to_user_id = profile.id
  51.         ORDER BY
  52.             id
  53.         DESC
  54.     LIMIT 1
  55.     ) AS lastMessage,
  56.     (
  57.     SELECT
  58.         msg_date
  59.     FROM
  60.         messages
  61.     WHERE
  62.         messages.msg_from_user_id = profile.id OR messages.msg_to_user_id = profile.id
  63.     ORDER BY
  64.         id
  65.     DESC
  66. LIMIT 1
  67. ) AS msgDate
  68. FROM profile
  69. WHERE
  70.     id <> :userId
  71. ) X
  72. LEFT JOIN (
  73.     Select DISTINCT ids
  74.     from (
  75.             select msg_from_user_id as ids
  76.             from messages
  77.             where msg_from_user_id =:userId  or msg_to_user_id=:userId
  78.             UNION
  79.             select msg_to_user_id as ids
  80.             from messages
  81.             where msg_from_user_id =:userId  or msg_to_user_id=:userId
  82.         )uniqueIdList
  83.         where ids <> :userId
  84.    )IdList on X.id=IdList.ids
  85. WHERE
  86.     ids IS NOT NULL
  87.     AND
  88.     lastMessage IS NOT NULL
  89.     ORDER BY msgDate desc»;
  90.     $recentQueryStmt = $connection->prepare($recentMsgQuery);
  91.     $recentQueryStmt->bindParam(‘:userId’, $userId);
  92.     $recentQueryStmt->execute();
  93.     $recentMsgList = $recentQueryStmt->fetchAll();
  94.    
  95.  
  96.  
  97.     $query = «SELECT m.id as msg_id
  98.       ,msg_from_user_id
  99.       ,msg_to_user_id
  100.       ,msg
  101.       ,msg_date
  102.       ,is_msg_read
  103.       ,msg_read_date
  104.       ,fromUser.id as fromUserId
  105.       ,fromUser.firstName as fromFirstName
  106.       ,fromUser.lastName as fromLastName
  107.       ,fromUser.imgUrl as fromUserImgUrl
  108.       ,toUser.id as toUserId
  109.       ,toUser.firstName as toUserFirstName
  110.       ,toUser.lastName as toUserLastName
  111.       ,toUser.imgUrl as toUserImgUrl
  112. FROM messages m
  113. left join profile as fromUser on m.msg_from_user_id=fromUser.id
  114. left JOIN profile as toUser on m.msg_to_user_id=toUser.id
  115. WHERE (msg_from_user_id =:userId and msg_to_user_id=:sentToUserID) or (msg_from_user_id=:sentToUserID and msg_to_user_id=:userId)»;
  116. //ORDER BY msg_date DESC»;
  117.  
  118.     $stmt = $connection->prepare($query);
  119.     $stmt->bindParam(‘:userId’, $userId);
  120.     $stmt->bindParam(‘:sentToUserID’, $_GET[«id»]);
  121.     $stmt->execute();
  122.     $msgList = $stmt->fetchAll();
  123.    
  124.  
  125.     if (count($msgList) > 0) {
  126.         $lastMsgRow = end($msgList);
  127.         if ($lastMsgRow[«msg_from_user_id»] === $msgToUserId && $lastMsgRow[«msg_to_user_id»] === $userId && intval($lastMsgRow[«is_msg_read»]) === 0) {
  128.             $updateAllMsgReadQuery = «UPDATE messages set is_msg_read=1,msg_read_date=NOW() where msg_from_user_id=:sentToUserID and msg_to_user_id=:userId and is_msg_read=0»;
  129.             $stmt = $connection->prepare($updateAllMsgReadQuery);
  130.             $stmt->bindParam(‘:sentToUserID’, $msgToUserId);
  131.             $stmt->bindParam(‘:userId’, $userId);
  132.             $stmt->execute();
  133.            
  134.         }
  135.     }
  136. }
  137.  
  138. ?>
 

После размещения сообщения в БД надо делать редирект.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *