php会话无法正常工作

时间:2013-09-15 01:54:30

标签: php mysql session mysqli

我有一个小的消息系统,我遇到了会话问题。问题是:我有inbox.php和view_inbox.php,其中所有消息都将在onbox.php中列出,当用户点击其中一条消息时,它将在第二页显示消息正文。

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

正如您在下面看到的,我正在使用会话来确定要回复的用户,问题是它是否正在插入旧会话(如果我已经回复了user2并再次尝试回复user3它没有; t工作)。

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

inbox.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();
}

2 个答案:

答案 0 :(得分:1)

在使用任何$ _SESSION

之前,请不要忘记使用session_start()

调试问题的最佳方法是在循环中注入一个print语句,将值赋给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>";
}

答案 1 :(得分:0)

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

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

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

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