[GDRCD 5.4] Limitare temporalmente edit dei messaggi del forum
[GDRCD 5.4] Limitare temporalmente edit dei messaggi del forum postato il 22/02/2018 10:54:23 nel forum programmazione, open source e hosting e modificato da irenes il 22/02/2018 14:04:02
Buongiorno!
Il titolo è più complesso di quel che vorrei fare: far sì che un messaggio nel forum possa essere modificato dal suo autore (per gente da un certo permesso in poi questo limite non dovrebbe sussistere) solo entro 5 minuti dal suo "post". Pensavo semplicemente di realizzare questo tramite la comparsa/scomparsa del tasto "modifica".
Una zampotta sul come fare? xD
Pagine → 1
22/02/2018 12:19:36
Io credo tenterei la via del manipolare la IF che fa modificare solo all'autore aggiungendo un controllo in più in cui c'è anche che l'ora attuale sia minore dell'ora del post+5 minuti
Ma poi all'edit vuoi dare di nuovo 5 minuti dall'edit o sempre dal post per un eventuale secondo edit?
22/02/2018 12:35:16
seralia ha scritto:
Ma poi all'edit vuoi dare di nuovo 5 minuti dall'edit o sempre dal post per un eventuale secondo edit?
nel DB è già salvato, come dato, il "data_messaggio", dove c'è l'ora. Mi basterebbe che, fra quella e l'edit, siano passati meno di 5 minuti (perchè si possa editare per un utente normale)
22/02/2018 14:46:42
Guarda come è fatto nel login il controllo tra ora_entrata nel db e l'intervallo di 5 minuti del refresh...
Credo un procedimento simile sull'ora del messaggio da aggiungere alla IF dell'edit solo per autore (+ la nuova clausola) e mod dovrebbe funzionare.
(non ho gdrcd a portata di mano per guardare)
22/02/2018 18:36:29
Il controllo andrebbe messo in tre punti per voler fare la cosa fatta propriamente bene:
Il primo punto dove compar eil tasto per editare il messaggio.
Li il controllo è abbastanza semplice, la data del messaggio viene recuperata assieme agli altri dati del messaggio per comodità di interazione trasformerei la data in un formato time usando la funzione strtotime http://php.net/manual/en/function.strtotime.php ↗ e comparandola con il tempo attuale tipo un
//SE IL TIME DEL MESSAGGIO È MINORE DI QUELLO DI 5 MINUTI FA
if( strtotime($row['data_messaggio'] > (time() - 300))
|| $_SESSION['permessi'] >= MODERATOR){
//codice del bottone di edit
}
un controllo simile andrebbe messo anche:
nella pagina dove ti compare il testo del messaggio da editare
nella pagina dove partono le procedure di agigornamento del messaggio.
Il secondo e terzo controllo ti servono per impedire che si possa lo stesseo editar eil messaggio, richiamandone un altro modificando l'id del messaggio da modificare.
Se non ti interessa fare dei controlli di sicurezza più puntigliosi il secondo e terzo controllo lo puoi evitare, anche per evitare che i 5 minuti scadano mentr eil pg sta ancora editando il messaggio e l'edit non gli venga bloccato.
23/02/2018 11:43:44
dyrr ha scritto:
grazie per la risposta, Dyrr.
io ho messo il codice prima dei pulsanti di edit e modifica così
if(($_SESSION['login']==$row['autore'] && $chiuso == 0) || (strtotime($row['data_messaggio'] > (time() - 300))) || ($_SESSION['permessi']>=MODERATOR))
{
...
}
ma niente, i tasti restano.
specifico che poco sopra il dato mi risulterebbe regolarmente estratto dal DB
$r
esult = gdrcd_query("SELECT messaggioaraldo.id_messaggio, messaggioaraldo.id_messaggio_padre, messaggioaraldo.titolo, messaggioaraldo.messaggio, messaggioaraldo.autore, messaggioaraldo.data_messaggio, messaggioaraldo.chiuso, araldo.tipo, araldo.nome, araldo.proprietari, personaggio.url_img_chat, araldo.id_araldo FROM messaggioaraldo LEFT JOIN araldo ON messaggioaraldo.id_araldo = araldo.id_araldo LEFT JOIN personaggio ON messaggioaraldo.autore = personaggio.nome WHERE (messaggioaraldo.id_messaggio_padre = ".gdrcd_filter('num',$_REQUEST['what'])." AND messaggioaraldo.id_messaggio_padre != -1) OR messaggioaraldo.id_messaggio = ".gdrcd_filter('num',$_REQUEST['what'])." ORDER BY id_messaggio_padre, data_messaggio", 'result');
$row = gdrcd_query($result, 'fetch');
23/02/2018 12:29:35
E' sbagliato l'if:
Il tuo if (lo indento per rendere più chiara la sequenza di condizioni):
if( ( $_SESSION['login'] == $row['autore']
&& $chiuso == 0)
|| (strtotime($row['data_messaggio'] > (time() - 300)))
|| ($_SESSION['permessi'] >= MODERATOR)) {
se l'autore è uguale al pg loggeto E il topic non è chiuso
O
il messaggio è più recente di 5 minuti
O
il pg loggato ha i permessi da moderatore
mostra i messaggi.
perchè quell'if sia valido basta che una delle tre condizioni dell'OR sia valida
quindi se il pg è l'autore l'if sarà valido indipendentemente da quando è postato ilmessaggio
sarà valido anche nel caso in cui l'autore non sia il pg loggato se il messaggio è più recente di 5 minuti.
L'if dovrebbe essere:
if( ( $_SESSION['login'] == $row['autore']
&& $chiuso == 0
&& (strtotime($row['data_messaggio'] > (time() - 300))))
|| ($_SESSION['permessi'] >= MODERATOR)) {
Impostato così devono
O
essere contemporaneamente vere tutte e tre le condizioni dentro la parentesi ovvero
autore = pg loggato
topic aperto
messaggio più recente di 5 minuti
o la seconda condizione.
23/02/2018 12:41:50 e modificato da irenes il 23/02/2018 12:45:59
dyrr ha scritto:
grazie! in effetti l'if era palesemente errato.resta un problema, però: il tastino di modifica ora non compare MAI :\
23/02/2018 13:02:09
Perchè mi sono accorto ora che c'è anche un errore nelle parentesi:
tu hai messo
if( ( $_SESSION['login'] == $row['autore']
&& $chiuso == 0
&& (strtotime($row['data_messaggio'] > (time() - 300))))
|| ($_SESSION['permessi'] >= MODERATOR)) {
faacendo così la funzione strtotime prende sia data_messaggio che time
invece deve convertire solo data_messaggio
if( ( $_SESSION['login'] == $row['autore']
&& $chiuso == 0
&& (strtotime($row['data_messaggio']) > (time() - 300)))
|| ($_SESSION['permessi'] >= MODERATOR)) {
echo "Modifica 1\n";
}
26/02/2018 08:57:49
funziona perfettamente! grazie mille, Dyrr :)
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Seconda Era ↗
RAID Shadow Legends ↗
Enlisted ↗
War Thunder ↗
Exclusive Villa GdR ↗
Project Entropy ↗
Crossout ↗
Sea of Conquest ↗