• User Attivo

    Controllo campi in un form email

    Ciao a tutti, ho un problemino con dei controlli in una mail, vi spiego direttamente postandovi il codice
    [php]
    <?
    // Connessione al DB
    require 'connessione/Config.php';
    require 'connessione/Connect.php';
    // Genera un boundary
    $mail_boundary = "=NextPart" . md5(uniqid(time()));
    if(isset($_POST['mail']))
    {
    $mittente=trim($_POST['mail']);
    $nome=trim($_POST['cognome']);
    $messaggio=trim(nl2br($_POST['richiesta']));

    if(get_magic_quotes_gpc())
    {
    $mittente=stripslashes($mittente);
    $nome=stripslashes($nome);
    $messaggio=stripslashes($messaggio);
    }
    $mittente=htmlspecialchars($mittente);
    $nome=htmlspecialchars($nome);
    $messaggio=htmlspecialchars($messaggio);

    $mittente=mysql_real_escape_string($mittente);
    $nome=mysql_real_escape_string($nome);
    $messaggio=mysql_real_escape_string($messaggio);

    // inserire mail destinatario
    $to = "pippochiocciolalibero.it";
    // Oggetto della mail
    $subject = "Informazioni dal sito xxx";
    // inserire mail mittente
    $sender = $mittente;

    $headers = "From: $sender\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/alternative;\n\tboundary="$mail_boundary"\n";
    $headers .= "X-Mailer: PHP " . phpversion();

    $testata = "Questo è un messaggio di risposta al tuo annuncio pubblicato sul Sito xxx.it";
    $html_msg = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
    </HEAD>
    <BODY>
    <font face = 'Impact' size = '3'>
    $testata
    </font><br><br>
    <font face = 'Comic Sans MS, Verdana' size = '2'>
    <b>Informazioni sul richiedente</b><br>
    Nome: $nome<br>
    Indirizzo e-mail: $mittente<br><br>
    <b>Messaggio</b><br>
    $messaggio
    </font><br>
    </BODY>
    </HTML>";

    $msg .= "\n--$mail_boundary\n";
    $msg .= "Content-Type: text/html; charset="iso-8859-1"\n";
    $msg .= "Content-Transfer-Encoding: 8bit\n\n";
    $msg .= $html_msg; // aggiungi il messaggio in formato HTML*/

    // Boundary di terminazione multipart/alternative
    $msg .= "\n--$mail_boundary--\n";

    // Imposta il Return-Path (funziona solo su hosting Windows)
    ini_set("sendmail_from", $sender);

    // Invia il messaggio, il quinto parametro "-f$sender" imposta il Return-Path su hosting Linux
    if (mail($to, $subject, $msg, $headers, "-f$sender"))
    { echo "Email inviata correttamente"; } else { echo "Email non inviata"; }}
    ?>
    [/php]
    nel messaggio ho scritto
    l'importante è
    che funzioni
    ciao
    come output ho avuto

    
    l\'importante è<br />\r\nche funzioni<br />\r\nCiao 
    
    

    mentre se modifico il codice in questo modo
    [php]
    <?
    // Connessione al DB
    require 'connessione/Config.php';
    require 'connessione/Connect.php';
    // Genera un boundary
    $mail_boundary = "=NextPart" . md5(uniqid(time()));
    if(isset($_POST['mail']))
    {
    $mittente=trim($_POST['mail']);
    $nome=trim($_POST['cognome']);
    $messaggio = trim(stripslashes(nl2br($_POST['richiesta'])));

    // inserire mail destinatario
    $to = "pippochiocciolalibero.it";
    // Oggetto della mail
    $subject = "Informazioni dal sito xxx";
    // inserire mail mittente
    $sender = $mittente;

    $headers = "From: $sender\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/alternative;\n\tboundary="$mail_boundary"\n";
    $headers .= "X-Mailer: PHP " . phpversion();

    $testata = "Questo è un messaggio di risposta al tuo annuncio pubblicato sul Sito xxx.it";
    $html_msg = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
    </HEAD>
    <BODY>
    <font face = 'Impact' size = '3'>
    $testata
    </font><br><br>
    <font face = 'Comic Sans MS, Verdana' size = '2'>
    <b>Informazioni sul richiedente</b><br>
    Nome: $nome<br>
    Indirizzo e-mail: $mittente<br><br>
    <b>Messaggio</b><br>
    $messaggio
    </font><br>
    </BODY>
    </HTML>";

    $msg .= "\n--$mail_boundary\n";
    $msg .= "Content-Type: text/html; charset="iso-8859-1"\n";
    $msg .= "Content-Transfer-Encoding: 8bit\n\n";
    $msg .= $html_msg; // aggiungi il messaggio in formato HTML*/

    // Boundary di terminazione multipart/alternative
    $msg .= "\n--$mail_boundary--\n";

    // Imposta il Return-Path (funziona solo su hosting Windows)
    ini_set("sendmail_from", $sender);

    // Invia il messaggio, il quinto parametro "-f$sender" imposta il Return-Path su hosting Linux
    if (mail($to, $subject, $msg, $headers, "-f$sender"))
    { echo "Email inviata correttamente"; } else { echo "Email non inviata"; }}
    ?>
    [/php]
    scrivendo il testo uguale a quello sopra ottengo nella mail

    
    l'importante è
    che funzioni
    ciao
    
    

    cioè il testo formattato bene.
    La domanda da porvi è questa: secondo voi è giusto che nel codice php manchi questa parte
    [php]
    if(get_magic_quotes_gpc())
    {
    $mittente=stripslashes($mittente);
    $nome=stripslashes($nome);
    $messaggio=stripslashes($messaggio);
    }
    $mittente=htmlspecialchars($mittente);
    $nome=htmlspecialchars($nome);
    $messaggio=htmlspecialchars($messaggio);

    $mittente=mysql_real_escape_string($mittente);
    $nome=mysql_real_escape_string($nome);
    $messaggio=mysql_real_escape_string($messaggio);
    [/php]
    così facendo potrei incorrere in pericoli tipo injection?

    Grazie a tutti


  • Moderatore

    la differenza sta nel fatto che la mail non la mandi in formato html e perciò non riconosce i tag html come <br /> tutto qui 😉

    comunque stiamo parlando di una mail, quindi se non la scrivi in un db per me ulteriori controlli sono solo un di più, ovvio dipende dal contesto.

    😉


  • User Attivo

    Ciao, è vero non la salvo nel db, ma...
    per puro caso un giorno mi dovrebbe servire come andrebbe risolto il problema?

    la differenza sta nel fatto che la mail non la mandi in formato htm
    

    scusami tanto allora questo codice a cosa serve

    $msg .= "\n--$mail_boundary\n";
    $msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
    $msg .= "Content-Transfer-Encoding: 8bit\n\n";
    $msg .= $html_msg;  // aggiungi il messaggio in formato HTML*/
    

    Ciao e grazie


  • User Attivo

    Hai associato una stringa di testo ad una variabile,per far sì che i comandi
    html devono essere trasformati da php devono essere preceduti da
    [php]
    echo "<br />";
    [/php]
    questo è un comando che viene interpretato come html;comunque,dico la
    mia,avrei impostato la pagina iniziale come xhtml e poi successivamente,
    dove necessario, avrei usato php con i tag
    [php]
    ...pagina iniziale xhtml con le dichiarazioni strict o transitional
    inizio pagina php dentro xhtml
    <?php
    e quì metti il codice della mail da inviare
    chiudo php
    ?>
    [/php]
    e quì ricomincia xhtml o chiude.
    :fumato:


  • User Attivo

    Grazie per la spiegazione
    seguirò il tuo consiglio, alla prossima:ciauz: