Suppression d'un message privé.

Fermé
Suan01 Messages postés 18 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 24 mai 2011 - 16 mars 2011 à 16:14
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 - 21 mars 2011 à 09:22
Bonjour,
J'ai créé un code pour supprimer un message, mais le problème, c'est que quand l'utilisateur1 supprime le message de l'utilisateur2, et bien le message est aussi supprimé dans la messagerie privée de l'utilisateur2, et je ne vois pas comment faire pour que l'utilisateur2 garde une copie afin de la supprimer quand bon lui semble.

Voici le code de la messagerie privée:
  <?php
//On verifie que lutilisateur est connecte
if(isset($_SESSION['pseudo']))
{
	if ($suppr) {
$result=mysql_query ("DELETE FROM pm WHERE id='$suppr'") or die ("Erreur de suppression");}

//On affiche la liste des messages de l'utilisateur sous la forme dun tableau
//Deux requettes sont executees, une pour recuperer les messages non-lus et une pour les messages lus
$req1 = mysql_query('select m1.id, m1.title, m1.timestamp, count(m2.id) as reps, test.id as userid, test.pseudo from pm as m1, pm as m2,test where ((m1.user1="'.$_SESSION['userid'].'" and m1.user1read="no" and test.id=m1.user2) or (m1.user2="'.$_SESSION['userid'].'" and m1.user2read="no" and test.id=m1.user1)) and m1.id2="1" and m2.id=m1.id group by m1.id order by m1.id desc');
$req2 = mysql_query('select m1.id, m1.title, m1.timestamp, count(m2.id) as reps, test.id as userid, test.pseudo from pm as m1, pm as m2,test where ((m1.user1="'.$_SESSION['userid'].'" and m1.user1read="yes" and test.id=m1.user2) or (m1.user2="'.$_SESSION['userid'].'" and m1.user2read="yes" and test.id=m1.user1)) and m1.id2="1" and m2.id=m1.id group by m1.id order by m1.id desc');
?>
</p>
<div class="boutoncomp" ><a href="new_pm.php" class="link_new_pm" style="text-decoration : none"><font color="#424242"><strong>Rédiger</strong></font></a></div>
<div class="boutoncomp" ><a href="esme.php" class="link_new_pm" style="text-decoration : none"><font color="#424242"><strong>Retour au compte</strong></font></a></div>
<br />
<br />
<h3>&nbsp;</h3>
<h3>Messages non-lus(<?php echo intval(mysql_num_rows($req1)); ?>):</h3>
<table>
	<tr>
    	<th class="title_cell">Titre</th>
        <th>Nb. Réponses</th>
        <th>Participant</th>
        <th>Date d'envoi</th>
        <td align="center" bgcolor="#FFFFFF">&nbsp;</td>
    </tr>
<?php
//On affiche la liste des messages non-lus
while($dn1 = mysql_fetch_array($req1))
{
?>
	<tr>
    	<td class="left"><a href="read_pm.php?id=<?php echo $dn1['id']; ?>"><?php echo htmlentities($dn1['title'], ENT_QUOTES, 'UTF-8'); ?></a></td>
    	<td><?php echo $dn1['reps']-1; ?></td>
    	<td><a href="profile.php?id=<?php echo $dn1['userid']; ?>"><?php echo htmlentities($dn1['pseudo'], ENT_QUOTES, 'UTF-8'); ?></a></td>
    	<td><?php echo date('d/m/Y H:i:s' ,$dn1['timestamp']); ?></td>
        
    </tr>
     
<?php
}

//Sil na aucun message non-lu, on le dit
if(intval(mysql_num_rows($req1))==0)
{
?>
	<tr>
    	<td colspan="4" class="center">Vous n'avez aucun message non-lu.</td>
        <td align="center" bgcolor="#FFFFFF">&nbsp;</td>
    </tr>
<?php
}
?>
</table>
<br />
<h3>Messages lus(<?php echo intval(mysql_num_rows($req2)); ?>):</h3>
<table>
	<tr>
    	<th class="title_cell">Titre</th>
        <th>Nb. Réponses</th>
        <th>Participant</th>
        <th>Date d'envoi</th>
          <td align="center" bgcolor="#FFFFFF">&nbsp;</td>
        
    </tr>
<?php
//On affiche la liste des messages lus
while($dn2 = mysql_fetch_array($req2))
{
?>
	<tr>
    
    	<td class="left"><a href="read_pm.php?id=<?php echo $dn2['id']; ?>"><?php echo htmlentities($dn2['title'], ENT_QUOTES, 'UTF-8'); ?></a></td>
    	<td><?php echo $dn2['reps']-1; ?></td>
    	<td><a href="profile.php?id=<?php echo $dn2['userid']; ?>"><?php echo htmlentities($dn2['pseudo'], ENT_QUOTES, 'UTF-8'); ?></a></td>
    	<td><?php echo date('d/m/Y H:i:s' ,$dn2['timestamp']); ?></td>
         <td bgcolor="#FFFFFF"><a href="delete_ac.php?id=<? echo $dn2['id']; ?>">Supprimer</a></td> 
    </tr>
<?php
}

//Sil na aucun message lu, on le dit
if(intval(mysql_num_rows($req2))==0)
{
?>
	<tr>
    	<td colspan="4" class="center">Vous n'avez aucun message lu.</td>
          <td align="center" bgcolor="#FFFFFF">&nbsp;</td>
    </tr>
<?php
}
?>
</table>
<p>
  <?php
}
else
{
	echo 'Vous devez être connecté pour accéder à cette page.';
}
?>


Et voici le code qui permet de supprimer le message:

<?php

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar
$id=$_GET['id'];

// Delete data in mysql from row that has this id
$sql="DELETE FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

// if successfully deleted
if($result){
echo "Message supprimé.";
echo "<BR>";
echo "<a href='list_pm.php'>Retour</a>";
}

else {
echo "ERROR";
}

// close connection
mysql_close();

?>


J'espère que vous pourrez m'aider,

S.
A voir également:

3 réponses

Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
17 mars 2011 à 11:21
Bonjour,

je pense pas que ton probleme soit un probleme de code mais plutot d'analyse de ton application.

le message privé et le message "publique" qui peut etre supprimé par un autre utilisateur est-il le meme en BD?

si c'est le meme, ce que je pense, la meilleur solution est de rajouter un champ (booléen) dans ta table indiquant si le message peut etre vu par les autres utilisateurs. la "suppréssion" du message par un autre utilisateur ne fera donc que modifier ce booléen indiquant que ce message ne peut plus etre lu par les autre mais reste présent en BDD et donc accessible via les message privés.


bon j'espere avoir bien compris ton soucis...

bon courage
0
Suan01 Messages postés 18 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 24 mai 2011 2
19 mars 2011 à 15:31
Oui les utilisateurs partagent la même table, si un utilisateur envoie un e-mail à un autre utilisateur, les données du message sont dans la même table pour les deux utilisateurs.
Donc, avec un booléen, on va dire que par défaut c'est 0 alors le message reste visible pour les deux utilisateurs, et si un des deux utilisateurs décide de le supprimer, la valeur passe à 1 et le message disparaît pour celui qui a choisit de le supprimer, mais pas pour l'autre car l'autre utilisateur n'a pas choisit de supprimer le message, c'est bien ça ? Et le message reste donc dans la base de donnée.
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
21 mars 2011 à 09:22
Bonjour,

c'est exactement ca, juste un booléen de visibilité. sinon pour faire "plus propre" il aurait fallut discossier les tables, faire une table propre aux messages mais ce n'est pas une obligation, comme ca ca marchera =)

0