[PHP] inserire HTML in una stringa

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Ciao,
ho un blocco di codice PHP con all'interno, fra l'altro, la seguente situazione:

Codice:
$email_body = "Questi sono i dettagli:\n\nNome: $name\nCognome: $surname\nEmail: $email\nTelefono: $phone\nNazionalità: $nationality\nCamera: $rooms\nData di partenza: $calendarstart\nData di arrivo: $calendarend\nMessaggio: $message\nAccettazione Privacy: $checkbox";

Vorrei creare una lista usando i tag HTML ed eliminare quindi tutti i simboli \n. Vorrei in oltre fare delle parti in grassetto.

Come potrei fare?
Grazie.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Ciao,
puoi semplicemente sostituire il newline \n con il break tag HTML <br>.

Per quanto riguarda la formattazione in grassetto, basta includere il testo all'interno del tag <strong>.

Avrai, quindi, una stringa come questa (ho abbreviato il tuo codice).
PHP:
$email_body = "Questi sono i dettagli:<br><br><strong>Nome:</strong> $name<br><strong>Cognome:</strong> $surname<br><strong>Email:</strong> $email<br><strong>Telefono:</strong> $phone<br>";


Hai detto di voler creare una lista. Se intendevi una lista nel senso HTML del termine, allora puoi procedere impiegando i tag appositi per la creazione di liste (ol, ul, li). Utilizzando questo approccio, ecco che puoi fare a meno del tag break, in quanto HTML gestisce automaticamente la formattazione delle liste.

Ecco qui un esempio:
PHP:
$email_body = "Questi sono i dettagli:<ul><li><strong>Nome:</strong> $name</li><li><strong>Cognome:</strong> $surname</li><li><strong>Email:</strong> $email</li><li><strong>Telefono:</strong> $phone</li></ul>";
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Ti ringrazio per avermi risposto. Mi hai confermato che il mio approccio a inserire codice HTML nella stringa era giusto.

Ma perché nel corpo della mail vedo i tag?
Perché non vengono letti come codice HTML ma considerato "testo classico"?
GUARDA L'IMMAGINE

Grazie.
 
Ultima modifica:

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Questo avviene poiché inserisci il testo all'interno della stringa. Nonostante alcuni browser riescano a parsare il tutto correttamente, ciò non avviene in altri contesti, probabilmente per una questione di escaping.

Una soluzione è la sintassi Heredoc. In questo caso, ti basta sostituire le virgolette con <<<HTML HTML;.

PHP:
<?php 

$nome = 'world';

$stringa = <<<HTML

<!--tag html e varibili php-->

<p>Hello $nome.</p>

HTML;

echo $stringa;

?>


Presta attenzione alle regole sintattiche. In particolare, nella stessa riga dell'apertura, dopo <<<HTML non deve esserci nient'altro se non il ritorno a capo. Stessa regola per la riga di chiusura: HTML; e nient'altro.
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Ti ringrazio per avermi risposto. Purtroppo riscontro un errore. Questo è il mio codice:
PHP:
$email_body = <<<HTML
   //tag html e varibili php
   <ul>
   <li><b>Nome:</b> $name.</li>
   <li><b>Cognome:</b> $surname.</li>
   <li><b>E-mail:</b> $email.</li>
   </ul>
   HTML;
da l'error.log viene riscontrato il seguente errore:

PHP Parse error: syntax error, unexpected end of file in /home/xxxxxxx/public_html/xxxxxx/mail/contact_it.php on line 66
dove la linea 66 corrisponde all'ultima riga del mio documento php.

Sbaglio a scrivere qualcosa?
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Assicurati che HTML; non sia circondato da spazi. Deve stare all'inizio della riga.
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
La bella notizia è che avevi ragione, in quanto c'erano degli spazi prima di HTML;.
Adesso l'e-mail viene correttamente inviata.
La brutta notizia è che nell'e-mail continuo a vedere i tag HTML :(
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Prova inserendo l'intera struttura del DOM.

PHP:
<?php

$email_body = <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Titolo pagina</title>
    </head>
    <body>
        <!--CORPO MAIL-->
        <ul>
           <li><strong>Nome:</strong> $name.</li>
           <li><strong>Cognome:</strong> $surname.</li>
           <li><strong>E-mail:</strong> $email.</li>
        </ul>
    </body>
</html>
HTML;

echo $email_body;

?>

Una precisazione: il tag <b>, nonostante funzioni, è ormai deprecato, utilizza invece <strong>.
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Purtroppo continuo a vedere HTML nella mail.
Ti incollo tutto il codice della mia pagina PHP nella speranza di farti faticare meno possibile visto il grande aiuto che mi stai dando. Se posso fare altro ti basta chiedere!

PHP:
<?php

// Controllo della variabile empty

if(empty($_POST['name'])           ||
empty($_POST['surname'])      ||
empty($_POST['email'])          ||
empty($_POST['phone'])          ||
empty($_POST['nationality'])  ||
empty($_POST['rooms'])          ||
empty($_POST['calendarstart'])||
empty($_POST['calendarend'])  ||
empty($_POST['message'])         ||
!filter_var($_POST['email'],FILTER_SANITIZE_EMAIL,FILTER_VALIDATE_EMAIL))

{
   echo "<div class='uk-alert uk-alert-danger uk-margin-top' id='not-sent' data-uk-alert>
   <a href='' class='uk-alert-close uk-close'></a>
   <p>Messaggio non inviato!</p>
   </div>";
}

else

{
   $name = $_POST['name'];
   $surname = $_POST['surname'];
   $email = $_POST['email'];
   $phone = $_POST['phone'];
   $nationality = $_POST['nationality'];
   $rooms = $_POST['rooms'];
   $calendarstart = $_POST['calendarstart'];
   $calendarend = $_POST['calendarend'];
   $message = $_POST['message'];
   $checkbox = $_POST['checkbox'] == "true" ? "si" : "no";

   // Creazione e-mail e invio del messaggio

   $to = '[email protected]'; // <--- inserire e-mail destinatario
   $email_subject = "Ti ha scritto dal tuo sito:  $name";

   //$email_body = "Questi sono i dettagli:\n\nNome: $name\nCognome: $surname\nEmail: $email\nTelefono: $phone\nNazionalità: $nationality\nCamera: $rooms\nData di partenza: $calendarstart\nData di arrivo: $calendarend\nMessaggio: $message\nAccettazione Privacy: $checkbox";

   //$email_body = "Questi sono i dettagli:<ul><li><strong>Nome:</strong> $name</li><li><strong>Cognome:</strong> $surname</li><li><strong>Email:</strong> $email</li><li><strong>Telefono:</strong> $phone</li></ul>";

   $email_body = <<<HTML
   //tag html e varibili php
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
   <html>
       <head>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
           <title>Titolo pagina</title>
       </head>
       <body>
           <!--CORPO MAIL-->
           <ul>
              <li><strong>Nome:</strong> $name.</li>
              <li><strong>Cognome:</strong> $surname.</li>
              <li><strong>E-mail:</strong> $email.</li>
           </ul>
       </body>
   </html>
HTML;

   $headers = "Da: [email protected]\n"; // Non modificare questo indirizzo e-mail
   $headers .= "Reply-To: $email";
   $invio_mail = mail($to,$email_subject,$email_body,$headers);

   echo "<div class='uk-alert uk-alert-success uk-margin-top' id='sent'>
   <a href='' class='uk-alert-close uk-close'></a>
   <p>Messaggio inviato!</p>
   </div>";
}

?>

Grazie!
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Dimmi se estendendo la header come sotto riesci a risolvere.
PHP:
$headers = "Da: [email protected]\n"; // Non modificare questo indirizzo e-mail
$headers .= "Reply-To: $email";

// da aggiungere
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1";
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Molto strano, a me funziona. Cosa usi per leggere le mail? (Gmail, Outlook, ecc)
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Utilizzo Gmail. In particolare le Google Apps...ma non credo ci siano differenze dalla "classica Gmail".
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Ho leggermente alleggerito il tuo codice per testare la tua problematica. Lo riporto per intero di seguito. A me funziona. Dovrebbe anche a te (dovresti copiarlo tale e quale e testarlo).


PHP:
<?php

// Controllo della variabile empty
if(isset($_POST['nome']) ){

if (empty($_POST['nome'])) {

   echo "<div class='uk-alert uk-alert-danger uk-margin-top' id='not-sent' data-uk-alert>
   <a href='' class='uk-alert-close uk-close'></a>
   <p>Messaggio non inviato!</p>
   </div>";
}

else

{
   $nome = $_POST['nome'];
   $to = $_POST['to'];
   // Creazione e-mail e invio del messaggio

   $email_subject = "Ti ha scritto dal tuo sito:  $nome";

   //$email_body = "Questi sono i dettagli:\n\nNome: $nome\nCognome: $surnome\nEmail: $email\nTelefono: $phone\nNazionalità: $nationality\nCamera: $rooms\nData di partenza: $calendarstart\nData di arrivo: $calendarend\nMessaggio: $message\nAccettazione Privacy: $checkbox";

   //$email_body = "Questi sono i dettagli:<ul><li><strong>Nome:</strong> $nome</li><li><strong>Cognome:</strong> $surnome</li><li><strong>Email:</strong> $email</li><li><strong>Telefono:</strong> $phone</li></ul>";

   $email_body = <<<HTML
   //tag html e varibili php
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
   <html>
       <head>
           <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
           <title>Titolo pagina</title>
       </head>
       <body>
           <!--CORPO MAIL-->
           <ul>
              <li><strong>Nome:</strong> $nome.</li>

           </ul>
       </body>
   </html>
HTML;

$headers = "Da: [email protected]\n"; // Non modificare questo indirizzo e-mail
$headers .= "Reply-To: $email";
$headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1";



   $invio_mail = mail($to,$email_subject,$email_body,$headers);

   echo "<div class='uk-alert uk-alert-success uk-margin-top' id='sent'>
   <a href='' class='uk-alert-close uk-close'></a>
   <p>Messaggio inviato!</p>
   </div>";
}
}

?>

<form action method="post">
    <input name="nome" placeholder="il tuo nome"><br>
    <input name="to" placeholder="destinatario"><br>
    <input type="submit">


</form>

Sono richiesti solamente due campi. Il nome e l'indirizzo al quale inviare la mail.
 

eleumas

Utente Attivo
16 Ago 2015
67
2
8
Ti confermo che il codice che mi hai postato funziona. Deduco allora che il problema sta nel codice seguente.
Il form viene gestito da una chiamata Ajax. Questa per la precisione:

Codice:
function ContactForm(){   
    $("#myform").on("submit",function(e) {
        e.preventDefault();
                   
        $("#alert").show(); // mostra alert durante il caricamento   

        var data = {
            name: $("#name").val(),
            surname: $("#surname").val(),
            email: $("#email").val(),
            phone: $("#phone").val(),
            nationality: $("#nationality").val(),
            rooms: $("#rooms").val(),
            calendarstart: $("#calendarstart").val(),
            calendarend: $("#calendarend").val(),
            message: $("#message").val(),
            checkbox: $("#checkbox").is(":checked")
        };

        $.ajax({
            type: "POST",
            url: "mail/contact_it.php",
            data: data,
                         
            //Inizio visualizzazione errori
            success: function(msg){
                $("#alert").hide();  // nascondi alert finito di caricare
                $("#result").html(msg); // messaggio di avvenuto invio
            },
                         
            error: function()         
            {alert("Si è verificato un errore!");} // messaggio di errore
                         
        });
       
        return false;
    });
};

Grazie.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Cosa succede se aggiungi il datatype alla chiamata Ajax?

Codice:
[...]

$.ajax({
      type: "POST",
      url: "mail/contact_it.php",
      data: data,
     
      // aggiungere 
      dataType: "html",

[...]
 
Discussioni simili
Autore Titolo Forum Risposte Data
A inserire variabile php colore in div html PHP 2
M [PHP] Come inserire codice html in un ciclo while PHP 2
M [wordpress-galleria immagini]Inserire classe php in html PHP 0
L [PHP/HTML] Inserire metodo di pagamento PHP 4
A Inserire codice html gooole maps in una variabile php PHP 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
D [Javascript] inserire uno script in un file php Javascript 6
P [PHP] Inserire stringhe in input(text),memorizzarle e stamparle in file successivo PHP 0
Shyson [PHP] Inserire testo nel codice PHP 2
Alex_70 Inserire photo in php PHP 0
spider81man [PHP] Inserire file .pdf in db PHP 6
A [PHP] Ciclare array multidimensionale e inserire valori in DB PHP 2
M [PHP] Inserire array nel db PHP 6
G [PHP] inserire risultato di una query in una tabella PHP 3
C Inserire dati tabella leggendo parte di altra tabella con php PHP 13
crealatualista [PHP] Inserire nomi nel database PHP 1
L [PHP] Inserire google recaptcha in uno form contatti PHP 1
T4MAR4 [PHP] Inserire piu campi di ricerca PHP 2
D Come inserire opzioni menù prelevandole dal database con PHP ? PHP 12
M PHP/SQL Inserire più valori in una colonna di tipo integer - Checkbox - PHP 3
G Google recaptcha in verify.php - dove inserire il codice PHP 1
G [Javascript] jQuery PHP MySql - inserire variabile nel DataBase Javascript 8
giancadeejay inserire condizione php PHP 6
N [PHP] inserire campi tabella in file word PHP 0
9 inserire contenuto in un file pdf aperto sul browser tramite script php PHP 0
A [PHP] inserire paginazione su script php/mysql PHP 6
S Come inserire file in database Mysql senza scrivere codice PHP? PHP 0
L Inserire codice php dentro al javascript PHP 4
M inserire articolo nel blog php PHP 7
D inserire foto in database php PHP 2
D Inserire script php in un sito PHP 1
neo996sps Inserire grafico google analytics in pagina PHP Google Analytics 0
T Inserire automaticamente Categorie in hikashop da php mysql PHP 0
T [PHP] inserire un file pdf da poter far scaricare... PHP 22
M inserire codice php in articolo joomla Joomla 2
A PHP calendario, come inserire i giorni precedenti? PHP 1
D php e maschera per inserire dati in mysql PHP 4
P [PHP] Inserire email in un database PHP 2
A inserire nel codice php una stringa xml PHP 0
A inserire messaggio php al centro pagina PHP 4
N come inserire un supporto php per il web ? HTML e CSS 1
Matt89 [php gd library] inserire un'immagine in un canvas PHP 3
M Aiuto come inserire dati tramite php? PHP 1
L Inserire uno file TXT....in PHP PHP 1
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1

Discussioni simili