0

我有一个小型消息传递系统,其中的会话有问题。问题在于:我有 inbox.php 和 view_inbox.php,其中所有消息都将列在 inbox.php 上,当用户单击其中一条消息时,它将在第二页上显示消息正文。

另外我在 view_inbox.php 上有一个回复按钮来回复发件人。如果 user1 向 user2 发送消息,即使相互回复也可以正常工作,但是当 user3 发送消息并且我尝试回复 user3 时,它会发送给 user2 而不是 user3。

正如您在下面看到的,我正在使用会话来识别要回复的用户,问题是它正在插入旧会话(如果我回复了 user2 并再次尝试回复 user3 它不起作用;不起作用)。

我可以使用$_GET变量来避免这个问题,但我不想在 url 中显示发件人的姓名。有任何想法吗?

收件箱.php

$stmt = $mydb->prepare("SELECT * FROM messages where to_user = ?  and deleted = '' order by id desc");
 $stmt->bind_param('s', $username->username);
 $stmt->execute();

 <?php 
 while ($row = $stmt->fetch_assoc()) {

 $_SESSION['sender'] = $row['from_user']; 

  echo"<a href='view_inbox?messageid=".$row['id']."'>".$row['from_user']."</a>";
?>

view_inbox.php这只是导致问题的回复部分。

 $to_user = $_SESSION['sender']; 
if (isset($_POST['replyto']))
 $reply = $_POST['reply'];  {
 if(!empty($reply)){
  $date = date('m-d-Y h:i:s');


$insert = $mydb->prepare("insert into `messages`(`to_user`, `from_user`, `message`, `date`) values(?,?,?,?)");
echo $mydb->error;
$insert->bind_param('ssss', $to_user, $username->username, $reply, $date);
$insert->execute();
}
4

2 回答 2

1

session_start()在使用任何 $_SESSION 之前不要忘记使用


调试问题的最佳方法是在循环中注入一个打印语句,在该循环中将值分配给 SESSION。检查您的代码是否真正到达该部分。

while(...) {
   echo "Reach here and value is " . $row['from_user'];
   $_SESSION['sender'] = $row['from_user']; 
   echo"<a href='view_inbox?messageid=".$row['id']."'>".$row['from_user']."</a>";
}
于 2013-09-15T02:00:09.317 回答
0

在内部inbox.php,发送者会话变量在循环中不断被覆盖:

while ($row = $max->fetch_assoc()) {
    $_SESSION['sender'] = $row['from_user'];
}

如果收件箱中的最后一条消息来自 sender2,则无论您选择哪条消息,它都会回复 sender2。

最好让view_inbox.phpmessageid参数中确定发件人。

于 2013-09-15T02:09:06.883 回答