[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.
 
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>";
 
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:
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.
 
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?
 
Assicurati che HTML; non sia circondato da spazi. Deve stare all'inizio della riga.
 
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 :(
 
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>.
 
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!
 
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";
 
Molto strano, a me funziona. Cosa usi per leggere le mail? (Gmail, Outlook, ecc)
 
Utilizzo Gmail. In particolare le Google Apps...ma non credo ci siano differenze dalla "classica Gmail".
 
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.
 
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.
 
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