Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494

    Eval non fa il suo dovere

    Salve a tutti,
    ho la necessità di mandare delle email alla fine di un processo, il template è salvato all'interno di un database interamente in html con le variabili da sostituire all'interno delle parentesi graffe {var}.
    Nella pagina in cui devo inviare l'email prelevo il codice html dal db, tramite la funzione preg_replace sostituisco le parentesi graffe con $, e in fine con eval valuto la stringa.

    Un po di codice:

    Codice PHP:
    //Tutte le variabili da sostituire
    $var1'testo';
    $var2'testo';
    $var3'testo';
    $var4'testo';
    $var5'testo';

    $email_template mysqli_query($conn"SELECT * FROM email_template WHERE email_type = 'nuova_prenotazione'");
    $email_Data  mysqli_fetch_array($email_template);

    $oggetto $email_Data['email_subject'];
    $messaggio $email_Data['email_message'];

    $pattern '/{(\w+)}/i';$replacement "$$1";
    $str preg_replace($pattern$replacement$messaggio);

    eval(
    "\$str = \"$str\";");

    echo 
    $str
    Questo codice mi stampa tutto il messaggio html, con le parentesi graffe sostituite ma con le variabili che rimangono variabili, quindi eval non fa il suo dovere.

    Da considerare il fatto che un normalissimo testo al posto del messaggio prelevato dal db funziona correttamente.

    Grazie anticipatamente!

  2. #2
    La sintassi della funzione eval() sembra corretta.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Si lo è, se provo a usare la stessa funzione su una frase quindi senza prelevare il testo dal db, funziona.

  4. #4
    Stampa la stringa prima del replace, dopo il replace e prima dell'eval ed infine dopo l'eval.
    Magari utilizza var_dump() probabilmente ci sono dei caratteri speciali tipo \n \t ecc.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Fatto, mi stampa per ogni var_dump:

    string(9107) "
    //resto del codice html con le parentesi graffe {var}
    "

    string(9094) "
    //resto del codice html con le variabili $var
    "

    string(9094) "
    //resto del codice html con le variabili $var
    "

  6. #6
    Se copi la stampa del var_dump con le variabili sostituite e la metti in una variabile e la passi ad eval() funziona?
    Non so sto solo proponendo delle prove da fare!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Ho provato e continua a non funzionare. Penso di aver capito qual'è il problema, ma non la soluzione. Se elimino dal testo tutti i tag html, funziona. Come mai?

    EDIT:

    non proprio tutti i tag
    Ultima modifica di lukezz; 19-08-2015 a 12:47

  8. #8
    Facendo una prova con tag html nella stringa non ho problemi. Deve esserci qualcosa che da problemi. Non è che ci sono apici o virgolette? Quali tag ti danno problemi?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Può essere perché ho compresso il codice html? (comunque non ci sono apici che danno problemi)

  10. #10
    Qualcuno una volta ha detto che "se la risposta è eval, la domanda è sbagliata".
    Crea un array con gli shortcodes presenti nel template ed un array per i relativi controvalori
    Codice PHP:
    //shortcodes nel template della mail
    $shortcodes=array(
       
    '{nome}',
       
    '{cognome}',
       
    '{indirizzo}'
    );

    //Tutte le variabili da sostituire
    $replaces=array(
       
    'Mario',//$var1
       
    'Rossi',//$var2
       
    'Via G. Verdi, 55'//$var3
    );
     
    $email_template mysqli_query($conn"SELECT * FROM email_template WHERE email_type = 'nuova_prenotazione'");
    $email_Data  mysqli_fetch_array($email_template);

    $oggetto $email_Data['email_subject'];
    $messaggio $email_Data['email_message'];

    $messaggio_dinamico=str_replace($shortcodes$replaces$messaggio); 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.