如何获取所有表单输入并将其发送给电子邮件?

时间:2019-02-10 23:57:02

标签: php html css bootstrap-4

我有一个表单页面,我需要收集所有输入数据并将其发送到我的电子邮件中。我该如何仅使用html,css,php或javascript?

这是页面的外观 https://www.dropbox.com/s/zjhqrldyprrofnl/FORM.PNG?dl=0

这是我的php代码

<?php 
$DATE = $_POST['DATE'];
$TIME = $_POST['TIME'];
$NAME = $_POST['NAME'];

$formcontent="From: $NAME \n Message: $DATE and $TIME";
$recipient = "rickyj250@gmail.com";
$subject = "Contact Form";
$mailheader = "From: $NAME \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "<script type='text/javascript'>alert('The Rocco's Team will contact 
you soon!')</script>";
?>

我尝试了不同类型的get和action方法,但到目前为止还没有运气。

这是HTML代码

<div class="tab-pane fade show active" id="submit" role="tabpanel" aria-labelledby="submit-tab">
         <div class="card-body text-center">

            <br>
            <h5 class="card-title"><u> DATE & TIME </u></h5>
            <h7>Order ready by:</h7>

            <form method="post" action="form.php">
             <div class=" container form-group">
                 <div class="col-12">
                    <input class="form-control" type="date" value="2012-12-12" id="DATE">
                  </div>

                  <div class="col-12">
                    <input class="form-control" type="time" value="13:45:00" id="TIME">
                  </div>
                </div>



              <h5 class="card-title"><u>ENTER INFO</u></h5>

        <div class="container">

            <div class="row" style="justify-content: center;">


                <div class="input-group col-12">
                  <div class="input-group-prepend">
                    <span class="input-group-text" id="NAME">First & Last Name</span>
                  </div>
                  <input type="text" class="form-control">
                  <input type="text" class="form-control">
                </div>


        <div class="container">
            <div class="row">


                <div class="input-group col-12">
                  <div class="input-group-prepend">
                    <span class="input-group-text" id="EMAIL">Email</span>
                  </div>
                  <input type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default">
                 </div>

                </div>

        </div>


                 <div class="input-group col-12">
                  <div class="input-group-prepend">
                  <span class="input-group-text">Phone Number</span>
                 </div>
                    <input class="form-control" type="tel" value="1-(555)-555-5555" id="PHONE">
                  </div>


            </div>
        </div>

        <div class="container">
            <div class="row">

            <div class="form-group col-12"><br>
                <h5 class="card-title"><u>ENTER YOUR ORDER</u></h5>
                <textarea class="form-control" placeholder="# of pizzas and toppings   Type of pasta and sauce    Full or Half Orders    ETC.." id="ORDER" rows="5"></textarea>
              </div>
                </form>

                        </div>
                    </div>

        <div class="container">
            <button type="button" class="btn btn-secondary btn-lg btn-block">Reset</button>
            <button type="submit" class="btn btn-primary btn-lg btn-block">Submit</button>
        </div>
        <br>


                </div> <!-- END OF SUBMIT CARD BODY-->
    </div><!-- END OF SUBMIT FORM-->

我希望将表单数据格式化为有序的电子邮件。

1 个答案:

答案 0 :(得分:2)

首先,您使用了太多的表单元素!
(请参见this stack overflow post)。

使用一个带有整个表单界面(文本区域和按钮)的表单标签。

此外,将type="submit"添加到“提交”按钮。

您还必须在PHP代码中添加另一行,以获取“ ORDER” textareas值。

$ORDER = $_POST['ORDER'];

然后您可以根据需要将其添加到电子邮件中。但是还需要考虑一件事:此表单非常脆弱且危险!

您正在直接从用户(可能是恶意黑客)那里获取输入,并将其直接输入到您的电子邮件中。这不好!即使是经验不足的黑客也可以利用此漏洞,然后将恶意代码键入“ DATE”字段(或任何其他字段)并提交。当您打开电子邮件时,w!他的代码被执行,黑客对您的计算机进行了恶行。请仔细阅读输入法/ HTML character escaping for PHP。您应该最终用$DATE包装POST和其他从htmlspecialchars()获取的PHP变量。 例如:。

$ORDER = htmlspecialchars($_POST['ORDER']);

现在,黑客无法将恶意代码放入您的ORDER字段中,因为当您在计算机上打开电子邮件时,恶意代码将被逃逸并且不会执行。

W3Schools has an alright explanation about handling input securely from forms.

也正如您所指出的,您需要在输入字段中使用name而不是id(我也很想念它,哎呀)。

此外,make sure that your webserver has mail sending capability。并非每个服务器都具有该功能。