• User

    phpmailer e fckeditor

    ciao a tutti, ho implementato una newsletter utilizzando il phpmailer per l'invio e l'fckeditor come editor..
    oltre all'invio della mail memorizzo il contenuto dei campi input in un db in maniera tale da potere successivamente riutilizzare le mail inviate, importarle, modificarle e reinviarle ad altre liste.. La struttura è questa:

    gestione mail
    invia newsletter
    email inviate

    cliccando su email inviate si apre una pagina contenente i record memorizzati:
    data oggetto intestazione e 3 pulsanti: elimina, anteprima e importa.
    Cliccando su importa si apre una pagina con i campi già riempiti e si puo' reinviare senza ricompilare dall'inizio come per la prima volta..

    il tutto funziona abbastanza bene tranne che per un problema presentatosi oggi e cioè:
    se all'interno del campo messaggio (gestito da fckeditor) incollo del testo preso da internet o da documenti esterni e premo invia la mail arriva tranquillamente ma i dati non li memorizza nel db..
    se non incollo ma riempio il campo a manina comprese immagini e roba varia la mail viene memorizzata..
    Ora mi chiedo se puo' dipendere da fck o da qche riga di codice scritta male (anche se il codice mi pare pulito)..
    il codice per la memorizzazione dei campi nel db è il seguente:

    $db2 = @mysql_select_db($database_email,$email);
    $sql2 = "SELECT * FROM lista_messaggi";
    $query2 = mysql_query ($sql2, $email) or die ("impossibile eseguire la query");
    //$lista = $row['EMAIL']; 
    $mex = stripslashes($_POST['messaggio']);
    $mex2 = stripslashes($_POST['messaggio_secondario']);
    $ogg = $_POST['oggetto'];
    $int = $_POST['intestazione'];
    $data = date ("d-m-Y H:i:s");
    $lnk1 = $_POST['link1'];
    $lnk2 = $_POST['link2'];
    $lnk3 = $_POST['link3'];
    $lnk4 = $_POST['link4'];
    $lnk5 = $_POST['link5'];
    $lnk6 = $_POST['link6'];
        $messaggio = "INSERT INTO lista_messaggi(data,oggetto,intestazione,messaggio,messaggio_secondario,messaggio_completo,img1,img2,img3,img4,img5,img6,link1,link2,link3,link4,link5,link6,allegato1,allegato2,allegato3) VALUES('$data','$ogg','$int','$mex','$mex2','$mailBody','$pathn1','$pathn2','$pathn3','$pathn4','$pathn5','$pathn6','$lnk1','$lnk2','$lnk3','$lnk4','$lnk5','$lnk6','$pathn7','$pathn8','$pathn9')";
    $risultato = mysql_query($messaggio);
    ```ripeto viene memorizzato tutto tranne se incollo (anche se a volte ha funzionato.. boh) nel campo gestito da fckeditor...
    
    avete qche parere o consiglio?
    vi ringrazio in anticipo
    Paolo

  • User Attivo

    Non ho mai utilizzato fckeditor, ma credo sia un WYSIWYG Editor, cioè permette di scrivere in formato RTF.
    In questo caso gli editor utilizzano un campo di testo per mostrare il messaggio effettivo e hanno un campo nascosto per "salvare" il formato html del messaggio.
    La conversione viene fatta attraverso JS quando avviene una modifica nel campo di testo visibile dove l'utente modifica il messaggio (onclick, onkeydown, onchange, ecc.).
    Forse nel tuo caso, il copia ed incolla del testo non provoca nessuna azione interpretata da JS e quindi il messaggio effettivo che viene spedito, cioè quello in formato html, rimane vuoto.
    Prova ad utilizzare un browser diverso ed un debugger JS per vedere cosa avviene durante l'elaborazione.

    Ciao!


  • User Attivo

    Non ho mai utilizzato fckeditor, ma credo sia un WYSIWYG Editor, cioè permette di scrivere in formato RTF.
    In questo caso gli editor utilizzano un campo di testo per mostrare il messaggio effettivo e hanno un campo nascosto per "salvare" il formato html del messaggio.
    La conversione viene fatta attraverso JS quando avviene una modifica nel campo di testo visibile dove l'utente modifica il messaggio (onclick, onkeydown, onchange, ecc.).
    Forse nel tuo caso, il copia ed incolla del testo non provoca nessuna azione interpretata da JS e quindi il messaggio effettivo che viene spedito, cioè quello in formato html, rimane vuoto.
    Prova ad utilizzare un browser diverso ed un debugger JS per vedere cosa avviene durante l'elaborazione.

    Ciao!


  • User

    Grazie per la risposta..
    il mio problema è proprio il fatto che la mail viene spedita perfettamente ma il contenuto non viene memorizzato nel database..
    quindi il messaggio effettivo arriva a destinazione ma si "rifiuta" di andare a memorizzarsi nel db..


  • User Attivo

    Quindi la mail contiene tutte le informazioni, compreso l'eventuale messaggio "incollato", mentre nel db non arriva niente ($mex e/o $mex2 sono vuoti)?


  • User

    esatto, e nel db non memorizza nulla nemmeno gli altri campi input $ogg, $int, $data ecc.


  • User Attivo

    Riesci a postare il codice per l'invio della mail oltre che per il db?

    Mi sono accorto adesso, INSERT INTO lista_messaggi(data, ... è una parola chiave di SQL, prova a convertire la query in questo modo:

    INSERT INTO lista_messaggi(data, ...

    ` in linux = ALT GR + '
    in windows = ALT + 96


  • User

    Certo ecco il codice per l'invio (ho omesso una parte che si occupa di altro se vuoi te lo scrivo lo stesso):

    <?php
    $db = @mysql_select_db($database_mailing,$mailing);
    $sql = "SELECT * FROM email";
    $query = mysql_query ($sql, $mailing) or die ("impossibile eseguire la query");
    
    while ($row=@mysql_fetch_array ($query)) {
    
    $mail = new PHPMailer();
    $mail->From     = "[email protected]";
    $mail->FromName = "newsletter";
    $mail->AddBCC($row['EMAIL']);
    $mail->IsHTML(true);
    
    //$mailBody = '<table><tr><td><img alt="Nanologico" src="cid:nanologico" /></td></tr></table>';    
    $mailBody = '<div style="width:800px; margin:0 auto; font: 12px/1.4 Verdana,Arial,sans-serif; background:#FFF; color: #444; text-align: center;"><div><table width="100%" style="background-image:url(link);border:1px solid #CCC)"><tr><td width="17%" align="center"><a href="link"><img src="link" border="0" align="middle" alt="a" width="65" height="114"style="margin: 5px 15px 5px 0"></a></td><td width="83%" align="center"><a href="link"><img src="link" alt="logo" width=179 height=38 border=0></a></td>
          </tr></table></div><table border=0 cellspacing=0 cellpadding=5 style="margin:0;font-size:12px;width:800px">
    <tbody style="border:1px;"><tr>
        <td colspan="3" valign=top style="border-left:1px solid; border-right:1px solid; font:16px/1.4 Verdana, Geneva, sans-serif; text-align: center;">';
    $mailBody .= $_POST['intestazione'];
    $mailBody .= '</td></tr><tr><td style="width:140px;border:1px solid" valign=top>
    <table width="100%" border="0" cellspacing="10"><tr><td><a href="'.$_POST['link1'] .'"><img src="';
    $mailBody .= 'link'.$pathn1 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link2'] .'"><img src="';    
    $mailBody .= 'link'.$pathn2 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link3'] .'"><img src="';
    $mailBody .= 'link'.$pathn3 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link4'] .'"><img src="';    
    $mailBody .= 'link'.$pathn4 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link5'] .'"><img src="';
    $mailBody .= 'link'.$pathn5 .'" border="0"></a></td></tr><tr><td><a href="'.$_POST['link6'] .'"><img src="';
    $mailBody .= 'link'.$pathn6 .'" border="0"></a></td></tr><tr><td>';
    $mailBody .= '</td></tr></table><td style="text-align: left;border-top:1px solid #ccc;" valign=top>';
    $mailBody .= stripslashes($_POST['messaggio']);
    $mailBody .= '</td><td style="background: #ffffff;border-left:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;" valign=top><table width="100%" style="font: 12px/1.4 Verdana,Arial,sans-serif;"><tr><td>';
    $mailBody .= stripslashes($_POST['messaggio_secondario']);
    $mailBody .= '</td></tr></table></td></tr></tbody></table><div style="border:1px solid;background: #ccc;color: #333;text-align:center;font-size:90%">
    <p style="margin:5px">intestazione</p></div><br><div style="font-size:9px;"><p>Qualora  non desideriate ricevere da parte nostra ulteriori informazioni vi preghiamo di  volere inviare una eMail a pippo con l&rsquo;oggetto cancellare. Vi porgiamo le nostre scuse per il disturbo.</p></div></div>';
        $mail->Body .= $mailBody; // assegnare il body in un unico passaggio
        $mail->Subject = $_POST['oggetto'];
    $mail->AddAttachment($_FILES['allegato1']['tmp_name'],$_FILES['allegato1']['name']);
    $mail->AddAttachment($_FILES['allegato2']['tmp_name'],$_FILES['allegato2']['name']);
    $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']);
    
    $msg = "Mail inviata con successo";
       
        if(!$mail->Send()) $msg = "Si e' verificato un errore nell'invio della mail<br />";
            echo $msg;
        header("Refresh: 2; URL=link");
        }
        $db2 = @mysql_select_db($database_email,$email);
    $sql2 = "SELECT * FROM lista_messaggi";
    $query2 = mysql_query ($sql2, $email) or die ("impossibile eseguire la query");
    //$lista = $row['EMAIL']; 
    $mex = stripslashes($_POST['messaggio']);
    $mex2 = stripslashes($_POST['messaggio_secondario']);
    $ogg = $_POST['oggetto'];
    $int = $_POST['intestazione'];
    $data = date ("d-m-Y H:i:s");
    $lnk1 = $_POST['link1'];
    $lnk2 = $_POST['link2'];
    $lnk3 = $_POST['link3'];
    $lnk4 = $_POST['link4'];
    $lnk5 = $_POST['link5'];
    $lnk6 = $_POST['link6'];
        $messaggio = "INSERT INTO lista_messaggi(data,oggetto,intestazione,messaggio,messaggio_secondario,messaggio_completo,img1,img2,img3,img4,img5,img6,link1,link2,link3,link4,link5,link6,allegato1,allegato2,allegato3) VALUES('$data','$ogg','$int','$mex','$mex2','$mailBody','$pathn1','$pathn2','$pathn3','$pathn4','$pathn5','$pathn6','$lnk1','$lnk2','$lnk3','$lnk4','$lnk5','$lnk6','$pathn7','$pathn8','$pathn9')";
    $risultato = mysql_query($messaggio);
        ?>
    

  • User Attivo

    A cosa ti serve un refresh con redirect nel codice:

    
    header("Refresh: 2;  URL=link");
    
    

    Su link c'è l'url della pagina di ritorno.
    Se questo avviene al primo invio dell'email esce dallo script e non salva nulla nel db, inoltre invia solo un'email, cioè la prima che ricava dalla query.
    Modifica in questo modo:

    
    ...
    $mail = new PHPMailer();
    
    while ($row=@mysql_fetch_array ($query)) {
    $mail->AddBCC($row['EMAIL']);
    }
    
    $mail->From     = "[email protected]";
    $mail->FromName = "newsletter";
    ...
    $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']);
    
    $db2 = @mysql_select_db($database_email,$email);
    ...
    $risultato = mysql_query($messaggio);
    
    $msg_a = "Mail inviata con successo<br />";
    $msg_b = "Si e' verificato un errore nell'invio della mail<br />";
    
    header("Refresh: 5;  URL=link");
    
    if(!$mail->Send())
    	echo $msg_b;
    else
    	echo $msg_a;
    
    

    Ora dovrebbe funzionare.
    Inoltre fa attenzione ad utilizzare header dopo aver fatto echo di qualche cosa, perchè genera errore.


  • User Attivo

    A cosa ti serve un refresh con redirect nel codice:

    
    header("Refresh: 2;  URL=link");
    
    

    Su link c'è l'url della pagina di ritorno.
    Se questo avviene al primo invio dell'email esce dallo script e non salva nulla nel db, inoltre invia solo un'email, cioè la prima che ricava dalla query.
    Modifica in questo modo:

    
    ...
    $mail = new PHPMailer();
    
    while ($row=@mysql_fetch_array ($query)) {
    $mail->AddBCC($row['EMAIL']);
    }
    
    $mail->From     = "[email protected]";
    $mail->FromName = "newsletter";
    ...
    $mail->AddAttachment($_FILES['allegato3']['tmp_name'],$_FILES['allegato3']['name']);
    
    $db2 = @mysql_select_db($database_email,$email);
    ...
    $risultato = mysql_query($messaggio);
    
    $msg_a = "Mail inviata con successo<br />";
    $msg_b = "Si e' verificato un errore nell'invio della mail<br />";
    
    header("Refresh: 5;  URL=link");
    
    if(!$mail->Send())
    	echo $msg_b;
    else
    	echo $msg_a;
    
    

    Ora dovrebbe funzionare.
    Inoltre fa attenzione ad utilizzare header dopo aver fatto echo di qualche cosa, perchè genera errore.


  • User

    Le tue considerazioni sono giuste e ti ringrazio ma il problema persiste..
    cioè se scrivo in mex o mex2 del testo a mano la mail arriva e salva tutto nel db, se copio incollo dell'html esterno la mail arriva ma il db rimane vuoto..
    A questo punto posso provare a cambiare WYSIWYG Editor, giusto per curiosità, e vedere se il problema persiste..
    altro "esperimento" potrebbe essere quello di cambiare server (ormai mi appiglio a tutto :))..


  • User Attivo

    Hai provato ad utilizzare un altro browser?


  • User

    Si certo il problema lo da sia con IE che con Firefox


  • User Attivo

    Prova a fare un echo di tutte le variabili, compresa la query che per inserire il messaggio nel db, poi posta il risultato.
    Forse c'è qualche errore sql con determinati dati contenenti caratteri speciali.


  • User Attivo

    Prova a fare un echo di tutte le variabili, compresa la query che per inserire il messaggio nel db, poi posta il risultato.
    Forse c'è qualche errore sql con determinati dati contenenti caratteri speciali.


  • User

    Mail inviata con successo
    Ecco il testo incollato:
    "ROMA, 2 settembre 2010 - "Annamo a vince". Ecco parte del messaggio che Daniele De Rossi ha spedito a Marco Borriello e che ha contribuito a spostare l'attenzione dell'attaccante da Torino a Roma. Nella conferenza stampa di presentazione, al termine del suo primo allenamento con Ranieri, l'ultimo acquisto giallorosso spiega così la sua scelta: "Rosella Sensi mi ha convinto, ho sentito la passione nelle sue parole. Poi De Rossi mi ha mandato quell'sms bellissimo, ho ancora la pelle d'oca. Mi ha scritto che sarà il miglior momento della mia vita e carriera. Si chiudeva con un annamo a vince"."
    02-09-2010 14:17:59INSERT INTO lista_messaggi(data,oggetto,intestazione,messaggio,messaggio_secondario,messaggio_completo,img1,img2,img3,img4,img5,img6,link1,link2,link3,link4,link5,link6,allegato1,allegato2,allegato3) VALUES('02-09-2010 14:17:59','','','Ecco il testo incollato:
    "ROMA, 2 settembre 2010 - "Annamo a vince". Ecco parte del messaggio che Daniele De Rossi ha spedito a Marco Borriello e che ha contribuito a spostare l'attenzione dell'attaccante da Torino a Roma. Nella conferenza stampa di presentazione, al termine del suo primo allenamento con Ranieri, l'ultimo acquisto giallorosso spiega così la sua scelta: "Rosella Sensi mi ha convinto, ho sentito la passione nelle sue parole. Poi De Rossi mi ha mandato quell'sms bellissimo, ho ancora la pelle d'oca. Mi ha scritto che sarà il miglior momento della mia vita e carriera. Si chiudeva con un annamo a vince"."
    ','','

    qui ho tolto la mail formattata in html
    [CENTER]
    [/CENTER]
    ','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','images/vuoto.jpg','','','','','','','upload/','upload/','upload/')


  • User Attivo

    Aggiungi questo è vedi se da errore:

    
    ...
    $risultato = mysql_query($messaggio);
    
    if(!$risultato) {
        die("ERRORE: " . mysql_error());
    }
    
    

  • User Attivo

    Aggiungi questo è vedi se da errore:

    
    ...
    $risultato = mysql_query($messaggio);
    
    if(!$risultato) {
        die("ERRORE: " . mysql_error());
    }
    
    

  • User

    Effettivamente da errore:

    ERRORE: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'venuto il momento che l'Italia si dia una seria politica indust

    e questo quello che ho incollato:
    E' venuto il momento che l'Italia ecc. ecc.


  • User Attivo

    Immaginavo, usa stripslashes() oppure addslashes() sul messaggio che inserisci nel db.