[GDRCD 5.1] [RISOLTO] Eliminazione messaggi inviati
[GDRCD 5.1] [RISOLTO] Eliminazione messaggi inviati postato il 20/07/2016 16:29:22 nel forum programmazione, open source e hosting e modificato da hantaywee il 20/07/2016 22:44:49
Salve ragazzi, eccomi di nuovo qui.
Ancora una volta non sono riuscita a risolvere da sola il problema, pur avendoci provato e riprovato.
Il problema sta nella pagina dei Messaggi Inviati.
Pur selezionando i messaggi e cliccando su "Cancella messaggi selezionati" viene fuori una pagina nera. Non c'è stata nessuna eliminazione, nessuna operazione. E' successo a qualcuno di voi? Spero di non essermi persa un post uguale.
Immagino debba toccare il file messages_center.inc.php.
Potreste darmi una mano, per favore?
Pagine → 1 2
20/07/2016 18:59:20
Ciao!
Nella pagina nera non c'era scritto nessun messaggio d'errore ? Magari a causa dello sfondo poteva non essere visibile, di norma se c'è stato un problema con qualche query ci dovrebbe essere un report d'errore e sarebbe molto utile poterlo conoscere ;)
20/07/2016 19:07:36
La cosa strana è proprio che non dà nessun messaggio di errore!
Anche per questo non so proprio dove mettere le mani per incollare qualche pezzo di codice. Sob.
20/07/2016 19:42:52
Ok, trovato l'errore (grazie ancora!)
Il pezzo di codice in questione dovrebbe essere questo:
<?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="main.php?page=messages_center&offset=0"><?php echo gdrcd_filter('out',$MESSAGE['interface']['messages']['go_back']); ?></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="main.php?page=messages_center&offset=0"><?php echo gdrcd_filter('out',$MESSAGE['interface']['messages']['go_back']); ?></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="main.php?page=messages_center&offset=0"><?php echo gdrcd_filter('out',$MESSAGE['interface']['messages']['go_back']); ?></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="main.php?page=messages_center&offset=0"><?php echo gdrcd_filter('out',$MESSAGE['interface']['messages']['go_back']); ?></a>
</div>
<?php
}
}
Per il momento mi preme che i messaggi inviati vengano eliminati dalla pagina originale del pacchetto. Quel "messaggipop" è stato creato successivamente dal programmatore che ci aveva aiutate, ed è una cosa che stiamo cercando di eliminare o quantomeno sistemare - dal momento che "messaggi" e "messaggipop" coesistono. Modificando la pagina "messaggi" non sarà poi un problema copiare il tutto di là. E purtroppo no, io personalmente non capisco abbastanza di programmazione da riuscire a risolvere questo problemino da sola v.v
20/07/2016 21:34:39 e modificato da blancks il 20/07/2016 21:38:01
Rhllor, chissà se gira ancora da queste parti :-D
Il problema, esponendolo per bene per tutti, è che in sostanza tanto per i messaggi inviati quanto per quelli ricevuti si controlla che l'utente sia il proprietario del messaggio, ovvero il destinatario.
Ma per i messaggi inviati invece la proprietà dell'utente del messaggio dovrebbe identificata dal fatto che lui sia il mittente.
Tornando quindi al codice, il pezzo incriminato è questo qui:
gdrcd_query("DELETE FROM messaggi WHERE id = ".$id_messaggio." and destinatario = '". $_SESSION['login'] ."' LIMIT 1");
Ti mostro come va modificato, ma dal momento che gdr-online cambia gli apostrofi con degli apici dovrai trasporre le modifiche manualmente perché il copia-incolla ti darebbe dei problemi:
gdrcd_query("DELETE FROM messaggi WHERE id = ".$id_messaggio." and (destinatario = '". $_SESSION['login'] ."' OR mittente = '". $_SESSION['login'] ."') LIMIT 1");
Fammi sapere come va ;-)
20/07/2016 22:44:10
Problema risolto!
Allego qui i codici che sono stati modificati nel file messages_center.inc così chiunque riscontrasse lo stesso problema potrà risolvere facilmente.
Oltre al codice sopracitato, dev'essere modificata anche questa riga (che da me è 345)
$query="DELETE FROM messaggi WHERE (destinatario='".gdrcd_filter('in', $_SESSION['login'])."' OR mittente='".gdrcd_filter('in', $_SESSION['login'])."') AND id IN (".$msgs.")";
gdrcd_query($query);
if(gdrcd_query("",'affected')>0){
?>
21/07/2016 09:04:47
Il problema che però puoi riscontrare modificando in questa maniera, è che il mittente quando va a rimuovere un messaggio inviato dalla sua lista, in automatico va ad eliminarlo anche nella lista dei messaggi del destinatario.
21/07/2016 11:27:50 e modificato da blancks il 21/07/2016 11:40:00
staff shadowland ha scritto: Il problema che però puoi riscontrare modificando in questa maniera, è che il mittente quando va a rimuovere un messaggio inviato dalla sua lista, in automatico va ad eliminarlo anche nella lista dei messaggi del destinatario.
Uhm, si è vero non ho considerato il contesto nel suggerire, bisogna capire però se non era nelle intenzioni di hantaywee questa meccanica.
Brava per l'occhio comunque ;-)
21/07/2016 19:37:11
Non me ne sono accorta!
Direi di no, ognuno dovrebbe essere libero di cancellare i messaggi indesiderati dalla propria casella.
05/03/2017 01:47:07
Riporto in auge questo thread, perché non ho capito le conversazioni qui sopra.
Qualcuno può gentilmente ripetere cosa bisogna fare per risolvere il problema?
Fase 1
fase 2
etc...
sarebbe gentilissimo
31/05/2017 12:45:19
hantaywee ha scritto: Non me ne sono accorta!
Direi di no, ognuno dovrebbe essere libero di cancellare i messaggi indesiderati dalla propria casella.
per caso hai risolto in qualche modo? confesso che sarebbe bello se le cose funzionassero come dici xD
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Exclusive Villa GdR ↗
RAID Shadow Legends ↗
Imperion ↗
World of Warship ↗
Tibia ↗
Enlisted ↗
AlterEgo ↗
Fallen Gods ↗
Tiles Survive ↗
Sea of Conquest ↗
Wuthering Waves ↗