[GDRCD5] A capo Messaggi [risolto]
[GDRCD5] A capo Messaggi [risolto] postato il 20/04/2011 12:14:03 nel forum programmazione, open source e hosting e modificato da irenes il 21/04/2011 13:03:41
Rieccomi qui alla carica.
La questione stavolta riguarda i messaggi. Premettendo che i file messages_center.inc.php e messagi.inc.php non li ho toccati (quindi sono quelli nativi) ho visto che, quando si invia un messaggio di posta, non sono presi gli "a capo" in fase di lettura.
Esemplifico: se io mando un messaggio che è:
"Attenzione!
Vorrei avvisare tutti
Che succede questo"
il messaggio verrà visualizzato (nel senso.... letto dalla casella di posta) in un unico rigo, ovvero così: "Attenzione! Vorrei avvisare tutti Che succede questo".
Ecco... come posso agire per fare in modo che si mantengano gli a capo del messaggio?
Pagine → 1
20/04/2011 12:39:22 e modificato da last_day il 20/04/2011 12:40:46
c'è una funzione di php che serve proprio a questo :P
nl2br($testo_missiva);
20/04/2011 12:55:39 e modificato da digital-destiny il 20/04/2011 12:56:23
last_day ha scritto: c'è una funzione di php che serve proprio a questo :P
nl2br($testo_missiva);
Esattamente. La funzione nl2br prende il testo come stringa e trasforma i caratteri di newline in <br />... facile :)
Per fare il contrario, cioè per prendere la stringa dal formato con i <br /> e fare i newline fai così:
$myString=str_replace("<br />", "", $testoOriginal);
20/04/2011 20:58:09
ringrazio tutti ma... allora non capisco l'errore
/*Inserimento nuovo messaggio nel db*/
if (gdrcd_filter('get',$_POST['op'])=="send_message"){
if (gdrcd_filter('get',$_POST['multipli'])=='singolo'){
$check_dest=explode(',',gdrcd_filter('get',$_POST['destinatario']));
$destinat=trim($check_dest[0]);
$query="SELECT nome FROM personaggio WHERE nome = '".$destinat."'";
$result=mysql_query($query);
if ((mysql_num_rows($result)>0)&&(empty($destinat)===FALSE)){
$testo = nl2br($testo);
$query="INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')";
mysql_query($query);
$testo = nl2br($testo);
$query="INSERT INTO backmessaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')";
mysql_query($query);
}
dove sbaglio? <.<
21/04/2011 08:39:23 e modificato da last_day il 21/04/2011 08:57:18
Se sono ben riuscito a raccapezzarmi nel codice, l'errore dovrebbe stare qui:
$testo = nl2br($testo);
$query="INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')";
come puoi vedere, tu dichiari il testo come una variabile dal nome $testo, ma poi inserisci nel db il contenuto della variabile $_POST['testo']
prova così:
$query="INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".nl2br(gdrcd_filter('in',$_POST['testo']))."')";
e dovrebbe andare :P
21/04/2011 10:50:19
è consigliabile fare tutte le modifiche al testo di questo tipo prima delle visualizzazione del messaggio e non in fase inserimento. Nel DB inserisci il testo puro così come è venuto dal form (dopo aver controllato del sia un input valido), e fai tutti i cambiamenti nl->br o BBcode->HTML dopo aver richiamato il testo dal DB in fase di visualizzazione del messaggio. Così preservi il testo originale in caso che l'utente voglia modificare il messaggio.
21/04/2011 11:28:52
last_day ha scritto: Se sono ben riuscito a raccapezzarmi nel codice, l'errore dovrebbe stare qui:
$testo = nl2br($testo);
$query="INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".gdrcd_filter('in',$_POST['testo'])."')";
come puoi vedere, tu dichiari il testo come una variabile dal nome $testo, ma poi inserisci nel db il contenuto della variabile $_POST['testo']
prova così:
$query="INSERT INTO messaggi (mittente, destinatario, spedito, testo) VALUES ('".$_SESSION['login']."', '".gdrcd_capital_letter(gdrcd_filter('in',$destinat))."', NOW(), '".nl2br(gdrcd_filter('in',$_POST['testo']))."')";
e dovrebbe andare :P
così facendo l'unica cosa che ottengo è che, inviato il messaggio, in fase di lettura compaiono tanti </br> a seconda di quante volte si è schiacciato "invio" per andare a capo.
E proverò a guardare la scheda, anche se, francamente, non è che mi salti all'occhio chissà cosa, purtroppo <.<
Cioè... in scheda_modifica.inc c'è questo (è il pezzo sugli affetti preso ad esempio:
<div class='form_label'>
<?php print gdrcd_filter('out',$MESSAGE['interface']['sheet']['modify_form']['relationships']); ?>
</div>
<div class='form_field'>
<textarea type="textbox" name="modifica_affetti" class="form_textarea"><?php print $record['affetti']; ?></textarea>
</div>
<div class="form_info">
<?php print gdrcd_filter('out',$MESSAGE['interface']['help']['bbcode']); ?>
</div>
in scheda.inc c'è questo:
<div class="titolo_box">
<?php print gdrcd_filter('out',$MESSAGE['interface']['sheet']['box_title']['relationships']); ?>
</div>
<div class="body_box">
<?php print gdrcd_bbcoder(gdrcd_filter('out',$record['affetti'])); ?>
</div>
l'unica cosa che ritrovo in messages_center (in messaggi.inc non mi pare ci sia da agire) è
<!-- Testo -->
<div class='form_label'>
<?php print gdrcd_bbcoder(gdrcd_filter('out',$MESSAGE['interface']['messages']['body'])); ?>
</div>
<div class='form_field'>
<textarea type="textbox"
name="testo"><?php print gdrcd_filter('out', trim($_POST['testo'])); ?></textarea>
</div>
già provato a fare
<?php print gdrcd_bbcoder(gdrcd_filter('out', trim($_POST['testo']))); ?>
e non succede nulla <.<
21/04/2011 12:05:47
il principio sarebbe quello, che è proprio ciò che deve fare la funzione nl2br()
evidentemente in fase di lettura, hai una funzione applicata alla variabile che contiene il testo che blocca l'html, e quindi i <br> ti appaiono scritti.
puoi applicare la funzione nl2br() in fase di lettura a questo punto, facendogli prima svolgere la funzione che blocca l'html, in modo tale che i <br> che vengono aggiunti funzionino come devono... non so se mi sono spiegato D:
21/04/2011 13:03:25
ho trovato la soluzione.
non ho utilizzato nlb2r.
mi è bastato modificare in riga 183-185 di messages_center questo
<div class="read_message_box_text">
<?php print gdrcd_filter('out', $record['testo']);?>
</div>
facendolo diventare questo
<div class="read_message_box_text">
<?php print gdrcd_bbcoder(gdrcd_filter('out', $record['testo']));?>
</div>
ora i messaggi vanno a capo e leggono pure i BBcode u.u
prima modificavo nel punto sbagliato e.... niente, grazia a tutti per le dritte e i consigli, comunque ;)
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tibia ↗
State of Survival ↗
World of Tanks ↗
Fallen Gods ↗
Raja Dunia ↗
Sea of Conquest ↗
Seconda Era ↗