2014-01-25 4 views
0

Я пытаюсь создать базовую систему PM. Я хочу, чтобы он отправлял/получал сообщения. Также я хочу сохранить запись этих сообщений, создав папку «Входящие»/«Исходящие». В папке «Входящие» я хотел бы иметь возможность удалять/отвечать на сообщения (сообщения) и «исходящие» только для удаления сообщений.PMs - Удаление сообщений из outbox PHP/MYSQL

У меня возникли проблемы с удалением сообщений из OUTBOX. Случается, что при нажатии кнопки DELETE для удаления сообщения 1 он удаляет последнюю запись OUTBOX. Например, если у меня есть сообщение 1, сообщение 2, сообщение 3 и я нажимаю кнопку DELETE в сообщении 1, собирается удалить сообщение 3.

Странно, что тот же самый код для INBOX работает отлично, даже если ответьте.

В таблице сообщений состоит из следующих столбцов: 1) message_id (ПЕРВИЧНЫЙ 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.

Я не могу найти проблему. Сообщение «Удалить» всегда удаляет последнюю запись. Есть предположения?

Заранее спасибо.

+2

Возможно, что вы закрываете тег формы неверно, поэтому он обрабатывает всю страницу как 1 форму – bumperbox

+0

Проводили ли вы какую-либо отладку? Где в вашем кодовом пути значение, которое вы ожидаете от идентификатора сообщения, отличается от того, что вы на самом деле получаете? –

+0

Как только я завершил вопрос, я тоже увидел проблему! Это ошибка. Исправлена ​​ошибка ->. Благодаря! – christostsang

ответ

1

</fomr> не закрывает форму, браузер/Агент пользователя пытается справиться, и устанавливает все ваше скрытые & вносит представление входов в один большой форме, что делает последний DELETE_ID тот, который заканчивается в $_POST['DELETE_ID']. Мораль истории: подтвердите свой HTML, это важнее, чем вы думаете :).

+0

А, я вижу комментарии, появляющиеся сейчас, прежде чем мой ответ был дан ... Ах, хорошо, если @bumperbox обновит свой комментарий до ответа, я удалю этот ;) – Wrikken

Смежные вопросы