[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!