我正在尝试创建一个基本的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。
我找不到问题。删除消息#始终删除最新条目。有什么想法吗?
提前致谢。
答案 0 :(得分:1)
</fomr>
没有关闭表单,浏览器/用户代理会尝试应对,并设置所有提交的内容&amp; 一个大格式中的隐藏输入,使最后DELETE_ID
成为$_POST['DELETE_ID']
中的最后一个{{1}}。故事的道德:验证你的HTML,这比你想的更重要:)。