[Risolto] Problema eliminazione messaggi (GDRCD 5.2?)
[Risolto] Problema eliminazione messaggi (GDRCD 5.2?) postato il 05/04/2019 23:08:34 nel forum programmazione, open source e hosting e modificato da staff shadowland il 13/04/2019 09:07:18
Saluti a tutti. Scusate se apro un Topic analogo ma quello di riferimento non è stato risolto del tutto e venire a capo di questo problema a distanza di tempo almeno per me è complicato, magari assieme si riesce ad arrivare ad una soluzione essendo un punto presente in tutte le implementazioni dei messaggi inviati se si è seguito passo passo la spiegazione rilasciata qui nel portale. Ora non è che sia una cosa di primaria importanza ma se si riuscisse a sistemarlo sarebbe fantastico.
Si tratta del codice della pagina messages_center di gdrcd (non ricordo la versione giusta su cui fu rilasciata), il problema riguarda l'eliminazione dei messaggi e la relativa lista messaggi inviati.
In pratica quando un utente invia un messaggio se il destinatario lo elimina, il messaggio scompare dalla lista di messaggi inviati del mittente.
il codice è il seguente:
<?php /*Eliminazione di un messaggio*/
if ($_POST['op']=='erase')
{
$id_messaggio=gdrcd_filter('num',$_POST['id_messaggio']);
/** * Bugfix: correzione di un bug che permetteva la cancellazione di messaggi non inviati all'utente.
* Viene quindi aggiunta nella clausola where il controllo sulla proprietà del messaggio.
* Inoltre viene effettuato un controllo sul numero di righe cancellate. Se non è stato cancellato nulla
* non verrà mostrato nessun messaggio ma solo il link per tornare alla schermata messaggi.
* @author Rhllor
*/
//gdrcd_query("DELETE FROM messaggi WHERE id = ".$id_messaggio." LIMIT 1");
gdrcd_query("DELETE FROM messaggi WHERE id = ".$id_messaggio." and destinatario = '". $_SESSION['login'] ."' LIMIT 1");
if (gdrcd_query("",'affected') > 0) {
?>
<div class="warning">
<?php echo gdrcd_filter('out',$PARAMETERS['names']['private_message']['sing'].$MESSAGE['interface']['messages']['erased']); ?>
</div>
<div class="link_back">
<a href="popup.php?page=messages_center&offset=0">Torna ai messaggi</a>
</div>
<?php } else {
/** * Enhancement: in caso di nessuna riga cancellata si controlla l'esistenza del messaggio,
* @author Rhllor
*/
$result=gdrcd_query("SELECT destinatario FROM messaggi WHERE id = ".gdrcd_filter('num',$_REQUEST['id_messaggio'])." and ( destinatario = '". $_SESSION['login'] ."') LIMIT 1", 'result');
if (gdrcd_query($result, 'num_rows') == 0){
?>
<div class="warning">
Il messaggio che stai tentando di cancellare non esiste
</div>
<div class="link_back">
<a href="popup.php?page=messages_center&offset=0">Torna ai messaggi</a>
</div>
<?php
} else {
$record=gdrcd_query($result, 'fetch');
gdrcd_query($result, 'free');
}
}
}
if($_POST['op']=='erase_checked'){
if(!empty($_POST['ids'])){
foreach($_POST['ids'] as $k=>$v){
if(is_numeric($v)){
$POST['ids'][$k]=(int)$v;
}
else{
unset($_POST['ids'][$k]);
}
}
$msgs=implode(',',$_POST['ids']);
$query="DELETE FROM messaggi WHERE destinatario='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$msgs.")";
gdrcd_query($query);
if(gdrcd_query("",'affected')>0){
?>
<div class="warning">
<?php echo gdrcd_filter('out',$PARAMETERS['names']['private_message']['plur'].$MESSAGE['interface']['messages']['all_erased']); ?>
</div>
<div class="link_back">
<a href="popup.php?page=messages_center&offset=0">Torna ai messaggi</a>
</div>
<?php
}
}
else{
?>
<div class="warning">
<?php echo gdrcd_filter('out',$PARAMETERS['names']['private_message']['plur'].$MESSAGE['interface']['messages']['erased']); ?>
</div>
<div class="link_back">
<a href="popup.php?page=messages_center&offset=0">Torna ai messaggi</a>
</div>
<?php
}
}
/*Eliminazione di tutti i messaggi*/
if ($_REQUEST['op']=='eraseall'){
gdrcd_query("DELETE FROM messaggi WHERE destinatario = '".$_SESSION['login']."' AND letto = 1");
?>
<div class="warning">
<?php echo gdrcd_filter('out',$PARAMETERS['names']['private_message']['sing'].$MESSAGE['interface']['messages']['erased']); ?>
</div>
<div class="link_back">
<a href="popup.php?page=messages_center&offset=0">Torna ai messaggi</a>
</div>
<?php } ?>
<?php /*Elenco messaggi (visualizzazione di base della pagina)*/
if ((($_REQUEST['op']=='')||($_REQUEST['op']=='inviati'))&&(isset($_REQUEST['newmessage'])===FALSE)){
//Determinazione pagina
if (isset($_REQUEST['offset'])===FALSE){$pagebegin=0;}
else {$pagebegin=(int)$_REQUEST['offset']*$PARAMETERS['settings']['messages_per_page'];}
$pageend=$PARAMETERS['settings']['messages_per_page'];
//Conteggio messaggi totali
$record=gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."'");
$totaleresults=$record['COUNT(*)'];
//Elenco messaggi paginato
if($_GET['op'] == 'inviati') {
$result=gdrcd_query("SELECT * FROM messaggi WHERE mittente = '".$_SESSION['login']."' AND mittente_del = 0 ORDER BY spedito DESC LIMIT ".$pagebegin.", ".$pageend."", 'result');
$record=gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE mittente = '".$_SESSION['login']."' AND mittente_del = 0");
$totaleresults=$record['COUNT(*)'];
} else {
$result=gdrcd_query("SELECT * FROM messaggi WHERE destinatario = '".$_SESSION['login']."' AND destinatario_del = 0 ".$extracond." ORDER BY spedito DESC LIMIT ".$pagebegin.", ".$pageend."", 'result');
$record=gdrcd_query("SELECT COUNT(*) FROM messaggi WHERE destinatario = '".$_SESSION['login']."' AND destinatario_del = 0 ".$extracond."");
$totaleresults=$record['COUNT(*)'];
}
$numresults=gdrcd_query($result, 'num_rows');
?>
Pagine → 1
05/04/2019 23:22:50
La funzione di erase del mittente cancella il messaggio dal db
gdrcd_query("DELETE FROM messaggi WHERE id = ".$id_messaggio." and destinatario = '". $_SESSION['login'] ."' LIMIT 1");
Una volta cancellato, quando viene fatto il SELECT dei messaggi inviati, non lo trova più in DB
09/04/2019 12:30:22
il modo più semplice è crearti una nuova tabella chiamata messaggi_inviati con gli stessi campi della tabella messaggi, ma l'id della tabella messaggi_inviati non deve essere "auto_increment".
a questa riga
if($_POST['op']=='erase_checked'){
metti:
if($_GET['op']=='inviati')
{
$query="DELETE FROM messaggi_inviati WHERE mittente='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$msgs.")";
}
else
{
$query="DELETE FROM messaggi WHERE destinatario='".gdrcd_filter('in', $_SESSION['login'])."' AND id IN (".$msgs.")";
}
a questa riga:
if ((gdrcd_query($result, 'num_rows')>0)&&(empty($destinat)===FALSE))
metti:
$mex=gdrcd_query("SELECT max(id) as id from messaggi where mittente='".$_SESSION['login']."'");
gdrcd_query("INSERT INTO messaggi_inviati (id,mittente, destinatario, spedito, testo, stato) VALUES (".$mex['id'].",'".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."', ".gdrcd_filter('in',$_POST['stato']).")");
a questa riga:
if (($record['destinatario']==$_SESSION['login'])&&($record['letto']==0
metti:
gdrcd_query("UPDATE messaggi_inviati SET letto = 1 WHERE id = ".gdrcd_filter('num',$_REQUEST['id_messaggio'])." LIMIT 1");
credo sia tutto, fammi sapere ciao!
13/04/2019 09:08:12
Grazie ad entrambi ed in special modo a Darkblade, ho risolto il problema dell'eliminazione messaggi =)
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Crossout ↗
Project Entropy ↗
World of the Sea Battle ↗
Foundation Galactic Frontier ↗