【问题标题】:PHP Validation Form with email sending an HTML template issue [duplicate]带有发送 HTML 模板问题的电子邮件的 PHP 验证表 [重复]
【发布时间】:2016-03-26 16:10:41
【问题描述】:

我正在为客户构建一个 PHP 表单,但在将数据收集到具有“发布”方法的表单中时遇到了一些问题,而 PHP 部分对我来说很复杂。

首先,我想使用自定义 HTML 模板,它显示得很好,但似乎帖子收集值是 brooke。此外,似乎没有添加 $headers 数据(电子邮件没有 $from 值,也没有 $to 值)。

我需要帮助。这是html和php部分。请注意,我不是 JavaScript 程序员,但我努力学习有我最好的知识和时间。我白手起家。

这是表单 HTML 结构(reCaptcha 缺少正常的):

<div class="col-md-offset-1 col-md-10 col-md-offset-1">

          <script type="text/javascript">
        var RecaptchaOptions = {
            lang : 'fr',
        };
        </script>

            <style type="text/css">
            .field-error .control-label,
            .field-error .help-block,
            .field-error .form-control-feedback {
                color: #ff0039;
            }

            .field-success .control-label,
            .field-success .help-block,
            .field-success .form-control-feedback {
                color: #2780e3;
            }
        </style>

    <form method="post" action="envoi_appel_de_service.php">                
    <p class="bg-primary lead" style="padding-top:7px; padding-left:10px; padding-bottom:7px; background-color:#337ab7 !important;">&nbsp;<i class="fa fa-building"></i>&nbsp;&nbsp;Informations sur l'adresse du service</p>

          <!-- Nom de la compagnie -->
          <div class="form-group row">
                <label for="nom_compagnie" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Nom de la compagnie</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="nom_compagnie" placeholder="Le nom de l'entreprise">
                </div>
          </div>

          <!-- Adresse -->
          <div class="form-group row">
                <label for="adresse" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Adresse</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="adresse" placeholder="Adresse de l'entreprise">
                </div>
          </div>

          <!-- Ville -->
          <div class="form-group row">
                <label for="ville" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Ville</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="ville" placeholder="Le nom de la ville de l'entreprise">
                </div>
          </div>

         <!-- Province -->
          <div class="form-group row">
                <label for="province" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;" id="province">Province</label>
                <div class="col-sm-5">
                    <select class="form-control">
                      <option>Alberta</option>
                      <option>Colombie-Britanique</option>
                      <option>Ile-du-Prince-Edouard</option>
                      <option>Manitoba</option>
                      <option>Nouveau-Brunswick</option>
                      <option>Nouvelle-Ecosse</option>
                      <option>Nunavut</option>
                      <option>Ontario</option>
                      <option selected="selected">Quebec</option>
                      <option>Saskatchewan</option>
                      <option>Terre-Neuve-Labrador</option>
                      <option>Territoires du Nord-Ouest</option>
                      <option>Yukon</option>
                      </select>
                 </div>
          </div>

            <!-- Code postale -->
          <div class="form-group row">
                <label for="code_postale" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Code postale</label>
                <div class="col-sm-4">
                    <input type="text" class="form-control" id="code_postale" placeholder="XXX XXX">
                </div>
          </div>

           <!-- Nom de la personne ressource -->
          <div class="form-group row">
                <label for="nom_responsable" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Nom du responsable</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="nom_responsable" placeholder="Nom de la personne ressource sur place">
                </div>
          </div>

           <!-- Telephone -->
          <div class="form-group row">
                <label for="telephone" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Téléphone</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="telephone" placeholder="X XXX XXX-XXX ext XXXX">
                </div>
          </div>

          <!-- Adresse courriel -->
          <div class="form-group row">
                <label for="courriel" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Adresse courriel</label>
                <div class="col-sm-8">
                    <input type="email" class="form-control" id="courriel" placeholder="Adresse courriel valide">
                </div>
          </div>


        <p class="bg-primary lead" style="padding-top:7px; padding-left:10px; padding-bottom:7px; background-color:#A41313 !important;">&nbsp;<i class="fa fa-print"></i>&nbsp;&nbsp;Informations sur le produit</p>

         <!-- Marque -->
          <div class="form-group row">
                <label for="marque" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Marque</label>
                <div class="col-sm-6">
                    <input type="text" class="form-control" id="marque" placeholder="Marque du produit">
                </div>
          </div>

             <!-- Modèle -->
          <div class="form-group row">
                <label for="modele" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Numéro de modèle</label>
                <div class="col-sm-6">
                    <input type="text" class="form-control" id="modele" placeholder="Veuillez inscrire le numéro de modèle">
                </div>
          </div>

            <!-- Garantie -->
          <div class="form-group row">
                <label for="garantie" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Garantie</label>
                <div class="col-sm-6">
                    <input type="text" class="form-control" id="garantie" placeholder="Est-ce que le produit est sous garantie?">
                </div>
          </div>

          <!-- Description du problème -->
          <div class="form-group row">
                <label for="description" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Description du problème</label>
                <div class="col-sm-8">
                    <textarea class="form-control" rows="4" id="description"></textarea>
                </div>
          </div>

          <p class="bg-primary lead" style="padding-top:7px; padding-left:10px; padding-bottom:7px; background-color:#337ab7 !important;">&nbsp;<i class="fa fa-calendar-o"></i>&nbsp;&nbsp;Préférences pour le rendez-vous</p>

          <!-- Disponibilité -->
          <div class="form-group row">
                <label for="disponibilite" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Disponibilité</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="disponibilite" placeholder="Quel est le meilleur moment pour vous joindre?">
                </div>
          </div>

          <!-- Coordonnées -->
          <div class="form-group row">
                <label for="coordonnees" class="col-sm-4 form-control-label text-right" style="font-size:16px; line-height:16px; padding-top:10px;">Coordonnées</label>
                <div class="col-sm-8">
                    <input type="text" class="form-control" id="coordonnees" placeholder="Optionel">
                </div>
          </div>

            <p class="bg-primary lead" style="padding-top:7px; padding-left:10px; padding-bottom:7px; background-color:#A41313 !important;">&nbsp;<i class="fa fa-lock"></i>&nbsp;&nbsp;Sécurité Anti-Spam</p>

          <!-- Validation reCaptcha franco Google -->
          <div class="form-group row">
                <label for="input12" class="col-sm-4 form-control-label text-right" style="padding-top:28px !important;">S&eacute;curit&eacute; anti-spam</label>
                <div class="col-sm-8">
                <div class="g-recaptcha" data-sitekey="MASKING"></div>
                      </div>    
                </div>

          <!-- Soumettre -->
          <div class="form-group row">
                <label for="submit" class="col-sm-4 form-control-label text-right">&nbsp;</label>
                <div class="col-sm-8">
                     <button name="submit" type="submit" value="submit" class="btn btn-primary">Soumettre</button>
                </div>
          </div>

          </form>

这里是 PHP 部分:

 <?php
 if (isset($_POST["submit"])) {

 $to = "MASKING";
 $from = $_POST['courriel'];
 $subject = "Réception d'un appel de service";
 $nom_compagnie = $_POST['nom_compagnie']; // required
 $adresse = $_POST['adresse']; // required
 $ville = $_POST['ville'];
 $province = $_POST['province'];
 $code_postale = $_POST['code_postale'];
 $nom_responsable = $_POST['nom_responsable'];
 $courriel = $_POST['courriel'];
 $marque = $_POST['marque'];
 $numero_modele = $_POST['numero_modele'];
 $garantie = $_POST['garantie'];
 $description = $_POST['description'];              
 $disponibilite = $_POST['disponibilite']; // required
 $coordonnees = $_POST['coordonnees']; // required

 $headers = 'From: '.$courriel."\r\n".

'Reply-To: '.$from."\r\n" .

'X-Mailer: PHP/' . phpversion();



 $message = "
 <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<html>
<head>
<title>Appel de service (rempli sur le site internet)</title>
<style type=\"text/css\">
h1,h2,h3,h4,h5,h6 {
    font-family: Cambria, \"Hoefler Text\", \"Liberation Serif\", Times, \"Times New Roman\", serif;
    color: #272727;
}
</style>
</head>
<body>
<h2 style=\"font-size: 1.25em; font-family: Gotham, ʼHelvetica Neueʼ, Helvetica, Arial, sans-serif;\">Vous avez re&ccedil;u une demande dʼappel de service en ligne.</h2>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
  <tbody>
    <tr>
      <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Inations sur lʼadresse du service</h3></td>
    </tr>
    <tr>
      <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom de la compagnie</td>
      <td width=\"313\" align=\"left\" valign=\"middle\">$nom_compagnie</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse</td>
      <td align=\"left\" valign=\"middle\">$adresse</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Ville</td>
      <td align=\"left\" valign=\"middle\">$ville</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Province</td>
      <td align=\"left\" valign=\"middle\">$province</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Code postale</td>
      <td align=\"left\" valign=\"middle\">$code_postale</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Nom du responsable</td>
      <td align=\"left\" valign=\"middle\">$nom_responsable</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">T&eacute;l&eacute;phone</td>
      <td align=\"left\" valign=\"middle\">$telephone</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Adresse courriel</td>
      <td align=\"left\" valign=\"middle\">$courriel</td>
    </tr>
  </tbody>
</table>
<br>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
  <tbody>
    <tr>
      <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Informations sur le produit</h3></td>
    </tr>
    <tr>
      <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Marque</td>
      <td width=\"313\" align=\"left\" valign=\"middle\">$marque</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Num&eacute;ro de mod&egrave;le</td>
      <td align=\"left\" valign=\"middle\">$numero_modele</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Garantie</td>
      <td align=\"left\" valign=\"middle\">$garantie</td>
    </tr>
    <tr bgcolor=\"#D5D5D5\">
      <td colspan=\"2\" align=\"left\" valign=\"middle\">Description du probl&egrave;me :</td>
    </tr>
    <tr>
      <td height=\"75\" colspan=\"2\" align=\"left\" valign=\"top\">$description</td>
    </tr>
  </tbody>
</table>
<br>
<table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\">
  <tbody>
    <tr>
      <td colspan=\"2\" align=\"left\" valign=\"middle\" bgcolor=\"#84BDEC\"><h3>Pr&eacute;f&eacute;rences pour le rendez-vous</h3></td>
    </tr>
    <tr>
      <td width=\"155\" align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Disponibilit&eacute;</td>
      <td width=\"313\" align=\"left\" valign=\"middle\">$disponibilite</td>
    </tr>
    <tr>
      <td align=\"left\" valign=\"middle\" bgcolor=\"#D5D5D5\">Coordonn&eacute;es</td>
      <td align=\"left\" valign=\"middle\">$coordonnees</td>
    </tr>
  </tbody>
</table>
</body>
</html>
 ";

 // Always set content-type when sending HTML email

 mail($to, $courriel, $message, $headers,
 "From: $from\n" . 
        "MIME-Version: 1.0\n" . 
        "Content-type: text/html; charset=iso-8859-1"); 


 }
 ?> 

你可以看到,所有的值都是空的,标题也是。我卡住了,不知道为什么它不起作用。如果有人可以帮助我解决这个问题,非常感谢。

IMAGE: Email received from the php form

【问题讨论】:

  • 表单中显示的任何表单字段都没有name 属性(它们有id,实际上应该是name),除了提交按钮。所以为他们提供name 属性,然后你的价值观就会到来。
  • 所以我只是要重命名 id 有一个 name="" 并且会被解决?但另一点是 $to 和 $from,也会被修复吗?我现在就试试这个。
  • 99%,是的。但是你的标题会失败。 RTM php.net/manual/en/function.mail.php 您正在使用 5 个参数。有第 5 个可用,但不用于您正在做的事情。
  • 哦,太好了!我将立即阅读功能邮件。这是我需要的。谢谢。
  • 不客气,Stéphane,但接受我的回答 stackoverflow.com/a/36237925/1415724 是 Stack 滚动的方式,哈哈 meta.stackexchange.com/questions/5234/…@StéphaneRobert 并为我的回答 stackoverflow.com/a/36237925/1415724 做同样的事情

标签: php forms email header


【解决方案1】:

您的代码中几乎没有错误(不仅仅是缺少名称属性)。

您的任何输入都没有name 属性,并且错误报告会给您带来一些相关信息。

即:对于$_POST['courriel'],您需要将您的电子邮件输入更改为:(您不能单独依赖“id”)。

<input type="email" name = "courriel" class="form-control" id="courriel" placeholder="Adresse courriel valide">
                    ^^^^^^^^^^^^^^^^^

并对所有其他输入遵循相同的模式。

但是,正如我在 cmets 中所说的那样。您的标头将失败。

您正在使用 5 个参数。有第 5 个可用,但不用于您正在做的事情。

mail($to, $courriel, $message, $headers,
 "From: $from\n" . 
        "MIME-Version: 1.0\n" . 
        "Content-type: text/html; charset=iso-8859-1");

语法是:

  • 收件人:
  • 主题:
  • 消息:
  • 标题

按照mail()上的手册:

第5个参数是:

bool 邮件(字符串 $to ,字符串 $subject ,字符串 $message [,字符串 $additional_headers [,字符串 $additional_parameters ]])

5 个参数的示例:

mail('nobody@example.com', 'the subject', 'the message', null,  '-fwebmaster@example.com');

手册中关于使用 4 个参数并以 HTML 格式发送的示例:

<?php
// multiple recipients
$to  = 'aidan@example.com' . ', '; // note the comma
$to .= 'wez@example.com';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
?>

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存阶段显示错误,而不是在生产阶段。

【讨论】:

  • 我在安装 reCaptcha 验证时遇到了另一个问题。我需要重建 PHP 部分:如果验证码失败,电子邮件仍会发送。我需要重建代码,不知道如何。这里是 PHP 代码:
  • @StéphaneRobert Une question à la fois mon cher。 Il faudrait que tu accèptes ma réponse afin de marquer ta question en étant résolue ;-)
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2013-07-06
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多