Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exécution de code php stocké dans une table

    2 janvier 2018 à 22:48:55

    Bonjour à tous,

    Je suis en train de créer sur l’espace privé de mon site un formulaire me permettant d’envoyer des emails html.

    Le formulaire ne gère pour le moment l’envoi que d’un seul email (1 seul contenu) mais l’objectif serait de pouvoir en envoyer des différents (ex : rappel de rdv, confirmation de réservation, envoi de document, etc.).

    Le formulaire demande le nom, sexe et email (par la suite je mettrai une liste déroulante permettant de sélectionner l’email à envoyer quand il y en aura plusieurs).

    J’utilise phpMailer pour envoyer l’email et le contenu de l’email envoyé adapte l’orthographe et la conjugaison en fonction du sexe, et intègre le nom (ex : ‘Cher monsieur’ Martin/‘Chère madame Dupont’). Ce contenu n’est pour le moment que géré dans une variable php (pas stocké dans une base de données).

    Jusqu’ici tout fonctionne bien.

    Cependant, j’ai voulu faire en sorte qu’en plus de la version texte de l’email, l’utilisateur puisse accéder à l’email sur son navigateur via un lien qui ira sur une page dédiée sur mon site internet.

    Plutôt que de créer une page par email (même si pour le moment il n’y en n’a qu’un), cette fois-ci j’ai voulu faire en sorte que le lien redirige vers une seule et unique page qui affiche le bon email en fonction des paramètres présents dans l’url (nom, sexe, titre de l’email, clé qui sont scrupuleusement vérifiés) en récupérant le css et le contenu de l’email dans une table d’une base de données. Cela permet d’adapter le contenu comme mentionné précédemment et de faire également en sorte que personne d’autre ne puisse afficher les emails sans que l’url soit correcte (la clé de 32 caractères sert à identifier l’émail à afficher), ou même l’utilisateur lui-même en bidouillant l’url.

    Dans cette table, pour chaque email sont stockés l’identifiant, le nom de l’email, la clé, le css, le contenu de l’email.

    Voici la page en question :

    <?php
    	session_start();
    	include("config/config.php");
    ?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    		<meta name="robots" content="noindex">
    				
    		<style>
    
    			/*CSS commun à tous les emails*/
    			
    			<?php
    			
    				/* Vérification des paramètres de l'URL : $_GET['lastname'], $_GET['gender'], $_GET['type'], $_GET['key'] */
    				
    				$key = $_GET['key'];
    				$query_email = $db->prepare('SELECT emails_css, emails_content FROM emails WHERE emails_key = ?');
    				$query_email->execute(array($key));
    				if ($query_email->rowCount() == 1) {
    					$error = false;
    					$result_email = $query_email->fetch(PDO::FETCH_ASSOC);
    					echo ($result_email['emails_css']); /* Affichage du CSS propre à l'email correspondant à la clé */
    					$query_email->closeCursor();
    				}
    
    
    			?>
    				
    		</style>
    			
    		<title>EMAILS</title>
    			
    	</head>
    
    	<body id="emails">
    
    		<?php
    			
    			if (!$error) {
    				echo ($result_email["emails_content"]); /* Affichage du contenu de l'email */
    				
    			} else { ?>
    				<p>URL erronée</p>
    		<?php } ?>
    	</body>
    </html>

    Cependant, le contenu de l’email comporte du php qui n’est donc pas exécuté lors de l’affichage de l’email.

    Il est utilisé pour les adaptations du texte et de l’affichage de svg, par exemple :

    <!-- Adaptation en fonction du genre et nom -->
    
    <?php $patient_title = ($gender == 'm') ? "Cher monsieur " : "Chère madame "; ?>
    
    <p><?php echo($patient_title . $lastname); ?>,</p>
    
    <!-- Méthode 1 : Affichage d'un SVG en incluant le fichier .svg -->
    
    <div>
    	<div>
    		<a href='https://www.facebook.com/pg/florentretifosteo/reviews/?ref=page_internal'><?php include('http://www.blablabla/logo_facebook.svg'); ?></a>
    	</div>
    	<p>Laissez un like et un avis<br />Suivez la page</p>
    </div>
    
    <!-- Méthode 2 : Affichage d'un SVG en stockant le code du fichier .svg dans une variable php suivit d'un echo de la variable -->
    
    <?php
    	$logo_facebook = "<svg version='1.1' id='logo_facebook' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0' y='0' viewBox='0, 0, 408.788, 408.788'>
        <path d='M146,52 L349,52 L349,408.788 L146,408.788 L146,52 z' fill='#DDDDDD'/>
        <path d='M353.701,0 L55.087,0 C24.665,0 0.002,24.662 0.002,55.085 L0.002,353.701 C0.002,384.124 24.664,408.786 55.087,408.786 L202.362,408.786 L202.613,262.708 L164.662,262.708 C159.73,262.708 155.727,258.72 155.708,253.788 L155.526,206.701 C155.507,201.742 159.522,197.712 164.481,197.712 L202.363,197.712 L202.363,152.214 C202.363,99.414 234.61,70.664 281.711,70.664 L320.361,70.664 C325.306,70.664 329.316,74.673 329.316,79.619 L329.316,119.323 C329.316,124.267 325.309,128.275 320.366,128.278 L296.647,128.289 C271.032,128.289 266.072,140.461 266.072,158.324 L266.072,197.713 L322.357,197.713 C327.72,197.713 331.881,202.396 331.249,207.722 L325.668,254.809 C325.134,259.315 321.313,262.71 316.776,262.71 L266.323,262.71 L266.072,408.788 L353.703,408.788 C384.125,408.788 408.787,384.126 408.787,353.704 L408.787,55.085 C408.786,24.662 384.124,0 353.701,0 z' fill='#475993'/>
    </svg>";
    ?>
    
    <div>
    	<div>
    		<a href='https://www.facebook.com/pg/florentretifosteo/reviews/?ref=page_internal'><?php echo($logo_facebook); ?></a>
    	</div>
    	<p>Laissez un like et un avis<br />Suivez la page</p>
    </div>

    J’ai vu qu’il existait un moyen d’exécuter du php stocké dans une base de donnée avec eval() mais je ne parviens pas à faire marcher quoi que ce soit.

    Je vous remercie d’avance pour votre aide.

    -
    Edité par Flosteo 2 janvier 2018 à 22:50:32

    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2018 à 23:18:52

      Bonjour,

      Des idées de solution ou des éclaircissements sur l'utilisation d'eval() appliqué à mon cas ? :)

      • Partager sur Facebook
      • Partager sur Twitter
        17 janvier 2018 à 11:28:20

        Salut,

        tu stocke le mail en texte brut dans ta table et tu l'affiches dans un template.

        Où est ton problème ?

        ++

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2018 à 13:31:30

          Le mail est déjà stocké dans la table.

          Cependant, il faut que je regarde cette histoire de template parce que je ne sais pas ce que c'est. Un utilisateur du forum m'a parlé de Twig.

          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2018 à 0:15:32

            Comme je n'ai jamais utilisé de template, il faut que j'apprenne comment ça marche et je vois aussi que Twig est un template Symfony donc il faut également que je regarde ce que c'est et comment ça marche.

            Comme j'ai besoin d'envoyer ces emails rapidement, je vais faire autrement : pour le moment, je vais directement intégrer le code des svg dans le texte stocké dans la table et je fais une version pour le masculin et une pour le féminin.

            -
            Edité par Flosteo 20 janvier 2018 à 0:15:48

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2018 à 0:40:08

              >Un template (parfois appelé layout) est une page web sans contenu dont les éléments statiques sont déjà positionnés et mis en forme 1min30.com

              Salut, un template, c'est simplement ce que tu as fait. Tu souhaite générer e mail a envoyer depuis ce que tu stocks dans la base de données ou tu veux juste stocker dans la base de donnes les mails que tu as envoyé ?

              • Partager sur Facebook
              • Partager sur Twitter
              Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
                20 janvier 2018 à 13:48:03

                Ah ok !

                Je veux générer l'email en récupérant son contenu dans la base de donnée, pas archiver les emails envoyés. Contenu qui dans l'idéal pourrait s'adapter en fonction de certains paramètres. Là c'est le nom qui serait intégré dans le corps de l'email, et le texte qui serait version masculin/féminin, mais on peut imaginer d'autres paramètres pour d'autres emails.

                -
                Edité par Flosteo 20 janvier 2018 à 13:51:50

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2018 à 18:45:28

                  Salut,

                  Ce que tu peux faire, c'est creer deux tables :

                  • La premiere contients les donnenes principales de ton mail (destinataire, expediteur, date d'envoie, la clé de 32 caractères, etc...)
                  • La deuxième contient les variable (genre, titre, profession, etc...) avec une clé étrangère vers ta table de mail

                  Ensuite tu génères de nouveau ton mail à l'aide de ces données lorsque ton site est contacté. Tu utilises le même scripte que lorsque tu génères le mail et l'envois avec les paramètres rentrés par l'utilisateur.

                  L’idéal serait de créer une fonction (ou un objet) que tu peux appeler depuis tes deux pages (comme send_mail.php et show_mail.php)

                  -
                  Edité par Skayotix 20 janvier 2018 à 18:47:39

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

                  Exécution de code php stocké dans une table

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown