我有一个小的消息系统,我遇到了会话问题。问题是:我有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();
}
答案 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.php
从messageid
参数中确定发件人。