This question already has an answer here:
I'm creating for a school assignment a sort of social media platform. I've created a simple chat tool. Each friend relation has a single conversation.
The problem is that when I reload all the chat messages using Ajax, I can't use the $_GET
method to get the conversation id which I saved in the url. Without this id I can't use the function in my Chat
class.
I'm sorry if some code is written in Dutch.
The url looks like this chat.php?gesprek_id=1
. Gesprek
or Conversation
Id is like I said saved in the url. After the Ajax request I receive the notice:
'Notice: Undefined index: gesprek_id in ...'
It refers to the $_GET method in php.
My code:
Chat Class:
public function getNewMessages($gesprekId){
$conn = Db::getInstance();
$stm = $conn->prepare("SELECT * from chat WHERE gesprek_id = :gesprek_id AND tijd > :tijd");
$stm->bindValue(":gesprek_id", $gesprekId, PDO::PARAM_STR);
$stm->bindValue(":tijd", $_SERVER['REQUEST_TIME'], PDO::PARAM_STR);
$stm->execute();
$res = $stm->fetchAll();
return $res;
}
Php for Ajax
<?php
header('Content-Type: application/json');
include_once('../classes/Db.php');
include_once('../classes/Chat.php');
session_start();
$gesprekId = $_GET['gesprek_id'];
$chat = new \Kvm\Chat();
$newMessages = $chat->getNewMessages($gesprekId);
?>
<?php foreach ($newMessages as $message): ?>
<?php $profile = $chat->getUserMessage($message['user_id']); ?>
<?php if ($message['user_id'] == $_SESSION['user_id']): ?>
<div id="messageBlock" class="blockRed">
<div class="profile-chat">
<img class="profileSmall" src="<?php echo $profile['avatar']; ?>"/>
<div>
<h4 class="username"><?php echo $profile['firstname'] . ' ' . $profile['lastname']; ?></h4>
</div>
</div>
<p class="message"><?php echo $message['message'] ?></p>
</div>
<?php else: ?>
<div id="messageBlock" class="blockYellow">
<div class="profile-chat">
<img class="profileSmall src="<?php echo $profile['avatar']; ?>"/>
<div>
<h4 class="username"><?php echo $profile['firstname'] . ' ' . $profile['lastname']; ?></h4>
</div>
</div>
<p class="message"><?php echo $message['message'] ?></p>
</div>
<?php endif; ?>
<?php endforeach; ?>
Edit in Ajax (added a few lines to find the correct 'gesprek_id' with the solution of the $_GET issue) Ajax/Jquery:
$(document).ready(function () {
function loadchat() {
var messageList = $('#allMessages');
var gesprekId = $('.message').attr('data-gesprekId');
$(messageList).load('ajax/newChat.php?gesprek_id='+gesprekId);
}
setInterval(loadchat, 50000);
loadchat();
});
I hope that my question is clear.
It's also my first question asked in Stackoverflow so I'm sorry if something is not well described. (and sorry if I made some errors in English ;) ) Thank you by advance.
</div>