[GDRCD 5.4] - Messaggi stile WA
20/07/2021 11:31:26 e modificato da haruka il 20/07/2021 11:42:58
Ti copio tutto il mio indexnew.
<?php
//Determinazione pagina
$pagebegin = isset($_REQUEST['offset']) === false ? 0 : (int)$_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
$pageend = $PARAMETERS['settings']['messages_per_page'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY conversazioni.personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
?>
<div class="elenco_record_gioco">
<!-- link scrivi messaggio -->
<div class="link_back">
<a href="main.php?page=messages_center_new&op=createnew">
<?php echo $MESSAGE['interface']['messages']['new']; ?>
</a>
</div>
<br><br>
<!-- link scrivi messaggio -->
<?php
if($numresults > 0) { ?>
<table class="tabellamessaggi">
<tr>
<td class="checkmessaggi" style="width:10%!important; background:none;">
<span class="titoli_elenco" style="font-weight:bold;">
Svuota la <br> conversazione
</span>
</td>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="elementi_elenco_data" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Ultimo messaggio del:
</span>
</td>
<td class="elementi_elenco_mittente" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Conversazione con:
</span>
</td>
<td class="elementi_elenco_preview">
<span class="titoli_elenco" style="font-weight:bold;">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['preview']); ?>
</span>
</td>
</tr>
<?php
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td class="checkmessaggi" style="text-align:center;">
<form action="main.php?page=messages_center_new" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminatutto" />
<input type="hidden" name="dest" value="<?php echo $row['personaggio_conversazione']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; margin-top: 20px;" />
</div>
</form>
</td>
<td class="checkmessaggi">
<div class="elementi_elenco_checkmessaggi">
<?php
if($row['letto'] == 0) { ?>
<img src="imgs/icons/mail_new.png" class="colonna_elengo_messaggi_icon">
<?php
} else { ?>
<img src="imgs/icons/mail_read.png" class="colonna_elengo_messaggi_icon">
<?php
} ?>
</div>
</td>
<td class="elementi_elenco_data">
<div>
<?php
$quando = explode(" ", $row['spedito']);
echo gdrcd_format_date($quando[0]).'<br/>'.gdrcd_filter('out', $MESSAGE['interface']['messages']['time']).' '.gdrcd_format_time($quando[1]);
?>
</div>
</td>
<td class="elementi_elenco_mittente">
<div>
<?php
echo '<a href="main.php?page=scheda&pg='.$row['personaggio_conversazione'].'">'.$row['personaggio_conversazione'].'</a>';
?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><i><b style="color:#1a7aba;">Oggetto messaggio: <?php echo gdrcd_filter('out', substr($row['oggetto'], 0, 100)); ?></b></i><br><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
<td style="display:none;">
<?php
if($_GET['op'] != 'inviati') { ?>
<div class="controlli_elenco" style="display:none;">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="Rispondi" />
</form>
</div>
</div>
<?php
} else { ?>
<div class="controlli_elenco">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['destinatario']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['reply']); ?>" />
</form>
</div>
</div>
<?php
} ?>
</td>
</tr>
<?php
$_SESSION['last_istant_message'] = $row['id'];
}//while
gdrcd_query($result, 'free');
;
?>
</table>
<?php
echo '';
} else {
if($totaleresults > $PARAMETERS['settings']['messages_limit']) {
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['please_erase']).'</div>';
}
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['no_message']).'</div>';
}
?>
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
</div>
genera ancora l'errore:
GDRCD MySQLi Error [File: indexnew.inc.php; Line: 48]
Error Code: 1054
Error String: Unknown column 'conversazioni.personaggio_conversazione' in 'group statement'
Error Detail: SELECT conversazioni.personaggio AS personaggio_conversazione, conversazioni.testo, conversazioni.spedito, conversazioni.letto FROM ( SELECT IF(destinatario = 'Haruka', mittente, destinatario) AS personaggio, messaggi.* FROM messaggi ) AS conversazioni INNER JOIN ( SELECT MAX(spedito) AS spedito, IF(destinatario = 'Haruka', mittente, destinatario) AS personaggio FROM messaggi WHERE 1 AND ( (destinatario = 'Haruka' AND destinatario_del = 0) || (mittente = 'Haruka' AND mittente_del = 0) ) GROUP BY personaggio ) AS ultimo_messaggio_conversazione ON ( conversazioni.spedito = ultimo_messaggio_conversazione.spedito AND conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio ) WHERE 1 AND ( (conversazioni.destinatario = 'Haruka' AND conversazioni.destinatario_del = 0) || (conversazioni.mittente = 'Haruka' AND conversazioni.mittente_del = 0) ) GROUP BY conversazioni.personaggio_conversazione ORDER BY conversazioni.spedito DESC LIMIT 0, 40
20/07/2021 11:37:06 e modificato da kasa il 20/07/2021 11:38:43
haruka ha scritto: ...
Prova così a rimuovere conversazioni da conversazioni.personaggio_conversazione in GROUP BY della query. Probabilmente, ho disabilitato qualche parametro nella mia versione di MySQL e questo errore non salta fuori.
Quindi, da:
GROUP BY conversazioni.personaggio_conversazione
a:
GROUP BY personaggio_conversazione
Kasa.
20/07/2021 11:41:02 e modificato da haruka il 20/07/2021 11:42:28
Così funziona e le pagine sono corrette ;)
<?php
//Determinazione pagina
$pagebegin = isset($_REQUEST['offset']) === false ? 0 : (int)$_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
$pageend = $PARAMETERS['settings']['messages_per_page'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
?>
<div class="elenco_record_gioco">
<!-- link scrivi messaggio -->
<div class="link_back">
<a href="main.php?page=messages_center_new&op=createnew">
<?php echo $MESSAGE['interface']['messages']['new']; ?>
</a>
</div>
<br><br>
<!-- link scrivi messaggio -->
<?php
if($numresults > 0) { ?>
<table class="tabellamessaggi">
<tr>
<td class="checkmessaggi" style="width:10%!important; background:none;">
<span class="titoli_elenco" style="font-weight:bold;">
Svuota la <br> conversazione
</span>
</td>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="elementi_elenco_data" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Ultimo messaggio del:
</span>
</td>
<td class="elementi_elenco_mittente" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Conversazione con:
</span>
</td>
<td class="elementi_elenco_preview">
<span class="titoli_elenco" style="font-weight:bold;">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['preview']); ?>
</span>
</td>
</tr>
<?php
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td class="checkmessaggi" style="text-align:center;">
<form action="main.php?page=messages_center_new" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminatutto" />
<input type="hidden" name="dest" value="<?php echo $row['personaggio_conversazione']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; margin-top: 20px;" />
</div>
</form>
</td>
<td class="checkmessaggi">
<div class="elementi_elenco_checkmessaggi">
<?php
if($row['letto'] == 0) { ?>
<img src="imgs/icons/mail_new.png" class="colonna_elengo_messaggi_icon">
<?php
} else { ?>
<img src="imgs/icons/mail_read.png" class="colonna_elengo_messaggi_icon">
<?php
} ?>
</div>
</td>
<td class="elementi_elenco_data">
<div>
<?php
$quando = explode(" ", $row['spedito']);
echo gdrcd_format_date($quando[0]).'<br/>'.gdrcd_filter('out', $MESSAGE['interface']['messages']['time']).' '.gdrcd_format_time($quando[1]);
?>
</div>
</td>
<td class="elementi_elenco_mittente">
<div>
<?php
echo '<a href="main.php?page=scheda&pg='.$row['personaggio_conversazione'].'">'.$row['personaggio_conversazione'].'</a>';
?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><i><b style="color:#1a7aba;">Oggetto messaggio: <?php echo gdrcd_filter('out', substr($row['oggetto'], 0, 100)); ?></b></i><br><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
<td style="display:none;">
<?php
if($_GET['op'] != 'inviati') { ?>
<div class="controlli_elenco" style="display:none;">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="Rispondi" />
</form>
</div>
</div>
<?php
} else { ?>
<div class="controlli_elenco">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['destinatario']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['reply']); ?>" />
</form>
</div>
</div>
<?php
} ?>
</td>
</tr>
<?php
$_SESSION['last_istant_message'] = $row['id'];
}//while
gdrcd_query($result, 'free');
;
?>
</table>
<?php
echo '';
} else {
if($totaleresults > $PARAMETERS['settings']['messages_limit']) {
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['please_erase']).'</div>';
}
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['no_message']).'</div>';
}
?>
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
</div>
20/07/2021 11:44:19 e modificato da kasa il 20/07/2021 11:46:50
Tra l'altro, avevo notato che venivano generate più pagine di quelle effettive ( una in più, per l'esattezza ). Ho corretto anche quello.
Kasa.
20/07/2021 11:47:40
kasa ha scritto: Tra l'altro, avevo notato le venivano generate più pagine di quelle effettive ( una in più, per l'esattezza ). Ho corretto anche quello.
Kasa.
Mi hai messo una pulce nell'orecchio. Ho rimesso il vecchio sistema, dunque, io ho 3 pagine paginate se uso il vecchio sistema, per un totale di 97 conversazioni.
Se metto il nuovo, mi tronca l'ultima pagina e ne vedo solo 80 (solo prime due pagine). Ti riferisci a questo?
20/07/2021 11:59:09 e modificato da kasa il 20/07/2021 12:25:18
haruka ha scritto: ...
Allora...
Originariamente, GDRCD inseriva (quasi) sempre una pagina in più non appena veniva innescata la paginazione dei messaggi, a prescindere che fosse riempita o meno.
Quindi, se avevi ad esempio 4 messaggi e impagini per 2, potevi avere comunque 3 pagine a disposizione. L'ultima era vuota.
Ho modificato questa cosa per le conversazioni, dato che non era proprio giusta. Il motivo per cui vedi troncato è perchè manca una modifica che ho fatto, in cui sostituisco la funzione floor() (che arrotonda sempre per difetto) con la funzione ceil() (che arrotonda sempre per eccesso) nel ciclo for della generazione delle pagine.
Nello specifico, da così:
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= floor($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
a così:
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= ceil($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
Ora il mio messagges/indexnew.inc.php è così:
<?php
//Determinazione pagina
$pagebegin = isset($_REQUEST['offset']) === false ? 0 : (int)$_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
$pageend = $PARAMETERS['settings']['messages_per_page'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
?>
<div class="elenco_record_gioco">
<?php
if($numresults > 0) { ?>
<table class="tabellamessaggi">
<tr>
<td class="checkmessaggi" style="width:10%!important; background:none;">
<span class="titoli_elenco" style="font-weight:bold;">
Svuota la <br> conversazione
</span>
</td>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="elementi_elenco_data" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Ultimo messaggio del:
</span>
</td>
<td class="elementi_elenco_mittente" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Conversazione con:
</span>
</td>
<td class="elementi_elenco_preview">
<span class="titoli_elenco" style="font-weight:bold;">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['preview']); ?>
</span>
</td>
</tr>
<?php
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td class="checkmessaggi" style="text-align:center;">
<form action="main.php?page=messages_center_new" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminatutto" />
<input type="hidden" name="dest" value="<?php echo $row['personaggio_conversazione']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; margin-top: 20px;" />
</div>
</form>
</td>
<td class="checkmessaggi">
<div class="elementi_elenco_checkmessaggi">
<?php
if($row['letto'] == 0) { ?>
<img src="imgs/icons/mail_new.png" class="colonna_elengo_messaggi_icon">
<?php
} else { ?>
<img src="imgs/icons/mail_read.png" class="colonna_elengo_messaggi_icon">
<?php
} ?>
</div>
</td>
<td class="elementi_elenco_data">
<div>
<?php
$quando = explode(" ", $row['spedito']);
echo gdrcd_format_date($quando[0]).'<br/>'.gdrcd_filter('out', $MESSAGE['interface']['messages']['time']).' '.gdrcd_format_time($quando[1]);
?>
</div>
</td>
<td class="elementi_elenco_mittente">
<div>
<?php
if(is_numeric($row['personaggio_conversazione']) == true) {
echo gdrcd_filter('out', $MESSAGE['interface']['messages']['to_guild']);
} else {
echo '<a href="main.php?page=scheda&pg='.$row['personaggio_conversazione'].'">'.$row['personaggio_conversazione'].'</a>';
}
?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
</tr>
<?php
$_SESSION['last_istant_message'] = $row['id'];
}//while
gdrcd_query($result, 'free');
;
?>
</table>
<?php
echo '';
} else {
if($totaleresults > $PARAMETERS['settings']['messages_limit']) {
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['please_erase']).'</div>';
}
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['no_message']).'</div>';
}
?>
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= ceil($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
</div>
<!-- link scrivi messaggio -->
<div class="link_back">
<a href="main.php?page=messages_center_new&op=createnew">
<?php echo $MESSAGE['interface']['messages']['new']; ?>
</a>
</div>
Kasa.
20/07/2021 12:40:45
Con ceil funziona.
Rimetto il mio, ma solo perché il tuo deve avere qualcosa che non va con la tabella perché vedo alcune righe che si accavallano.
<?php
//Determinazione pagina
$pagebegin = isset($_REQUEST['offset']) === false ? 0 : (int)$_REQUEST['offset'] * $PARAMETERS['settings']['messages_per_page'];
$pageend = $PARAMETERS['settings']['messages_per_page'];
// Elimina tutti i messaggi
if(gdrcd_filter('get', $_POST['op']) == 'eliminatutto') {
gdrcd_query(" UPDATE messaggi SET mittente_del = IF(mittente = '".gdrcd_filter('in', $_SESSION['login'])."', 1, mittente_del), destinatario_del = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, destinatario_del), letto = IF(destinatario = '".gdrcd_filter('in', $_SESSION['login'])."', 1, letto) WHERE (mittente = '".gdrcd_filter('in', $_SESSION['login'])."' AND destinatario = '".$_POST['dest']."') OR (destinatario = '".gdrcd_filter('in', $_SESSION['login'])."' AND mittente ='" .$_POST['dest']. "') ");
}
// Costruisco la query per raccogliere le conversazioni
$sqlConversazioni = "
SELECT conversazioni.personaggio AS personaggio_conversazione,
conversazioni.testo, conversazioni.spedito, conversazioni.letto
FROM (
SELECT IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio,
messaggi.*
FROM messaggi
) AS conversazioni
INNER JOIN (
SELECT MAX(spedito) AS spedito,
IF(destinatario = '".$_SESSION['login']."', mittente, destinatario) AS personaggio
FROM messaggi
WHERE 1
AND (
(destinatario = '".$_SESSION['login']."' AND destinatario_del = 0)
||
(mittente = '".$_SESSION['login']."' AND mittente_del = 0)
)
GROUP BY personaggio
) AS ultimo_messaggio_conversazione
ON (
conversazioni.spedito = ultimo_messaggio_conversazione.spedito
AND
conversazioni.personaggio = ultimo_messaggio_conversazione.personaggio
)
WHERE 1
AND (
(conversazioni.destinatario = '".$_SESSION['login']."' AND conversazioni.destinatario_del = 0)
||
(conversazioni.mittente = '".$_SESSION['login']."' AND conversazioni.mittente_del = 0)
)
GROUP BY personaggio_conversazione
ORDER BY conversazioni.spedito DESC
";
$result = gdrcd_query($sqlConversazioni. " LIMIT ".$pagebegin.", ".$pageend, 'result');
$numresults = gdrcd_query($result, 'num_rows');
// Conteggio i record totali per l'impaginazione
$totaleresults = gdrcd_query(gdrcd_query($sqlConversazioni, 'result'), 'num_rows');
?>
<div class="elenco_record_gioco">
<br><br>
<!-- link scrivi messaggio -->
<?php
if($numresults > 0) { ?>
<table class="tabellamessaggi">
<tr>
<td class="checkmessaggi" style="width:10%!important; background:none;">
<span class="titoli_elenco" style="font-weight:bold;">
Svuota la <br> conversazione
</span>
</td>
<td class="checkmessaggi" style="background:none;">
<!-- Checkbox -->
</td>
<td class="elementi_elenco_data" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Ultimo messaggio del:
</span>
</td>
<td class="elementi_elenco_mittente" style="width: 18%!important;">
<span class="titoli_elenco" style="font-weight:bold;">
Conversazione con:
</span>
</td>
<td class="elementi_elenco_preview">
<span class="titoli_elenco" style="font-weight:bold;">
<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['preview']); ?>
</span>
</td>
</tr>
<?php
while($row = gdrcd_query($result, 'fetch')) {
?>
<tr>
<td class="checkmessaggi" style="text-align:center;">
<form action="main.php?page=messages_center_new" method="post">
<div class="form_submit">
<input type="hidden" name="op" value="eliminatutto" />
<input type="hidden" name="dest" value="<?php echo $row['personaggio_conversazione']; ?>" />
<input type="image" src="imgs/icons/erase.png" style="width:20px; height:20px; margin-top: 20px;" />
</div>
</form>
</td>
<td class="checkmessaggi">
<div class="elementi_elenco_checkmessaggi">
<?php
if($row['letto'] == 0) { ?>
<img src="imgs/icons/mail_new.png" class="colonna_elengo_messaggi_icon">
<?php
} else { ?>
<img src="imgs/icons/mail_read.png" class="colonna_elengo_messaggi_icon">
<?php
} ?>
</div>
</td>
<td class="elementi_elenco_data">
<div>
<?php
$quando = explode(" ", $row['spedito']);
echo gdrcd_format_date($quando[0]).'<br/>'.gdrcd_filter('out', $MESSAGE['interface']['messages']['time']).' '.gdrcd_format_time($quando[1]);
?>
</div>
</td>
<td class="elementi_elenco_mittente">
<div>
<?php
echo '<a href="main.php?page=scheda&pg='.$row['personaggio_conversazione'].'">'.$row['personaggio_conversazione'].'</a>';
?>
</div>
</td>
<td class="elementi_elenco_preview">
<div>
<a href="main.php?page=messages_center_new&op=readnew&personaggio_conversazione=<?php echo $row['personaggio_conversazione'] ?>"><i><b style="color:#1a7aba;">Oggetto messaggio: <?php echo gdrcd_filter('out', substr($row['oggetto'], 0, 100)); ?></b></i><br><?php echo gdrcd_filter('out', substr($row['testo'], 0, 100)); ?>
...
</a>
</div>
</td>
<td style="display:none;">
<?php
if($_GET['op'] != 'inviati') { ?>
<div class="controlli_elenco" style="display:none;">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="Rispondi" />
</form>
</div>
</div>
<?php
} else { ?>
<div class="controlli_elenco">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['destinatario']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['reply']); ?>" />
</form>
</div>
</div>
<?php
} ?>
</td>
</tr>
<?php
$_SESSION['last_istant_message'] = $row['id'];
}//while
gdrcd_query($result, 'free');
;
?>
</table>
<?php
echo '';
} else {
if($totaleresults > $PARAMETERS['settings']['messages_limit']) {
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['please_erase']).'</div>';
}
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['interface']['messages']['no_message']).'</div>';
}
?>
<div class="pager">
<?php
if($totaleresults > $PARAMETERS['settings']['messages_per_page']) {
echo gdrcd_filter('out', $MESSAGE['interface']['pager']['pages_name']);
for($i = 0; $i <= ceil($totaleresults / $PARAMETERS['settings']['messages_per_page']) - 1; $i++) {
if($i != $_REQUEST['offset']) { ?>
<a href="main.php?page=messages_center_new&offset=<?php echo $i; ?>"><?php echo ($i+1); ?></a>
<?php } else {
echo ' '.($i+1).' ';
}
}
}
?>
</div>
</div>
20/07/2021 12:54:31
haruka ha scritto: ...
Riesci a darmi qualche spiegazione in più sull'anomalia che hai individuato? Anche in formato screen, come preferisci. Così provo a vedere dove potrebbe essere l'errore.
Aggiungi in fondo alla pagina che hai messo qui sopra questo:
<!-- link scrivi messaggio -->
<div class="link_back">
<a href="main.php?page=messages_center_new&op=createnew">
<?php echo $MESSAGE['interface']['messages']['new']; ?>
</a>
</div>
Per l'inserimento di nuovi messaggi.
Questa parte qui non serve in teoria, dato che la risposta è interna alla conversazione.
<td style="display:none;">
<?php
if($_GET['op'] != 'inviati') { ?>
<div class="controlli_elenco" style="display:none;">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['mittente']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="Rispondi" />
</form>
</div>
</div>
<?php
} else { ?>
<div class="controlli_elenco">
<div class="controllo_elenco">
<!-- reply -->
<form action="main.php?page=messages_center_new" method="post">
<input type="hidden" name="reply_dest" value="<?php echo $row['destinatario']; ?>" />
<input type="hidden" name="genitore" value="<?php echo $row['id']; ?>" />
<input type="hidden" name="op" value="reply" />
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['messages']['reply']); ?>" />
</form>
</div>
</div>
<?php
} ?>
</td>
Kasa.
20/07/2021 13:00:12 e modificato da haruka il 20/07/2021 13:01:27
Succede questo:
mentre con la index che ho postato io non mi fa questo problema.
20/07/2021 13:49:03
haruka ha scritto: ...
Sto provando a replicare l'errore, ma senza alcun risultato.
Hai usato ESATTAMENTE la versione che ho postato?
Kasa.
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Cafuné ↗
Crossout ↗
World of Tanks ↗
New Orleans ↗
Storie di Agarthi ↗
Wuthering Waves ↗
Enlisted ↗
Foundation Galactic Frontier ↗