【问题标题】:PMs - Deleting messages from outbox PHP/MYSQLPMs - 从发件箱 PHP/MYSQL 中删除消息
【发布时间】:2014-02-16 03:49:37
【问题描述】:

我正在尝试创建一个基本的 PM 系统。我希望它发送/接收消息。我还想通过创建收件箱/发件箱来记录这些消息。在收件箱中我希望能够删除/回复消息,而在发件箱中只能删除消息。

我无法从 OUTBOX 中删除邮件。发生的情况是,当按下 DELETE 按钮删除消息 1 时,它会删除最新的 OUTBOX 条目。例如,如果我有消息 1、消息 2、消息 3,并且我按消息 1 上的 DELETE 按钮,将删除消息 3。

奇怪的是,INBOX 的完全相同的代码运行良好,甚至响应。

消息表由以下列组成: 1)message_id (PRIMARY INT) 2)发件人 3)接收器 4)消息 5)sent_deleted (默认值 = NO) 6)received_deleted (默认值 = NO) 7)send_date

以下是 OUTBOX 的代码:

<html>
<body>

<?php

//calling the variable using $_SESSION[]
session_start();
$sender = $_SESSION['USER'];
echo $sender;


//opening connection with database
require('C:\wamp\www\TEST\connect_db.php');

//to delete outbox message
if(isset($_POST['DELETE_MSG']))
{


$id = $_POST['DELETE_ID']; 


$query="UPDATE messages SET sent_deleted='YES' WHERE sender='$sender' AND     message_id='$id' ";
$results = mysqli_query($dbc,$query);

if(false ===$results)
{
    echo mysqli_error($dbc);
}

echo "Message succesfully deleted from your outbox<p>";
echo '<br>|<a href="main_page.php">HOME</a>|';

exit();

}

//searching for all messages that you have send a.k.a outbox and you havent deleted yet
$query = "SELECT * FROM messages WHERE sender='$sender' AND sent_deleted='NO' ";
$results = mysqli_query($dbc,$query);


if(false ===$results)
    {
        echo mysqli_error($dbc);
    }

$num = mysqli_num_rows($results);


$i=1; //initialize counter for outbox messages
$unread_outbox_id = array(); 


echo '<h1>OUTBOX</h1><br>'; 
if($num === 0) //check if the user has no outbox messages
{
echo "No OUTBOX messages!<br>";
echo '<br>|<a href="main_page.php">HOME</a>|';
exit();

}
else
{
while($row = mysqli_fetch_array($results,MYSQLI_BOTH))
    {

        $unread_outbox_id[$i][$row['message_id']] = $row['message_id'];


        echo "<p><font color='blue'><u><b>MESSAGE $i</b></u></font><br>";
        echo '<p><b><u>To</u></b>:' .$row['sender'].'<br>';
        echo '<b><u>From:</u></b>' .$row['receiver'].'<br>';
        echo '<b><u>Message:</u></b><br>' .$row['message'].'<br>';
        echo '<b><u>Date Received</u></b><br>' .$row['send_date'].'<br>';
    ?>


<form action="outbox.php" method="POST">
<input type="hidden" name="DELETE_ID" value="<?php echo $unread_outbox_id[$i]   [$row['message_id']]; ?>">
<input type="submit" name="DELETE_MSG" value="Delete message <?php echo $i; ?>">
</fomr>


<?php


    $i++;                           

    }


}


?>


</body>


<br>|<a href="main_page.php">Home</a>|

</html>

我所做的是,我将正确的 message_id 设置为隐藏输入,并且一旦用户按下 DELETE 消息 1,它就会跳转到 if(isset($_POST['DELETE_MSG'])) 并执行代码。代码将 sent_deleted 字段更新为“YES”,其中 message_id 等于正确的 message_id。

我找不到问题。删除消息 # 始终删除最新条目。有什么想法吗?

提前致谢。

【问题讨论】:

  • 有可能你关闭的表单标签不正确,所以它把整个页面当作1个表单
  • 你做过调试吗?在您的代码路径中,您期望的消息 ID 值与您实际获得的值有何不同?
  • 我一完成问题,我也看到了问题!这是错误。更正 --> 解决了这个问题。谢谢!
  • @bumperbox:将其升级为答案,以便我可以删除我的;)

标签: php mysql


【解决方案1】:

&lt;/fomr&gt; 不会关闭表单,浏览器/用户代理会尝试应对,并将您的所有提交和隐藏输入设置在一个大表单中,使最后一个 DELETE_ID 成为一个以$_POST['DELETE_ID'] 结尾。故事的寓意:验证你的 HTML,它比你想象的更重要:)。

【讨论】:

  • 啊,在我给出答案之前,我看到 cmets 现在出现了……嗯,如果 @bumperbox 将他的评论升级为答案,我会删除这个 ;)
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
相关资源
最近更新 更多