在Bootstrap中使用JavaScript和PHP制作的模式表单在提交时不发送电子邮件

Modal form made in Bootstrap with JavaScript and PHP not sending email on submit

本文关键字:提交 表单 模式 电子邮件 Bootstrap JavaScript PHP      更新时间:2023-09-26

我使用一个按钮创建了这个页面,以触发一个具有联系人表单的模态。

<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#stayInformed">Stay Informed</button>

我正试图将该表单提交到页面顶部的php,以便给自己发送一封电子邮件。然而,php既没有发送电子邮件,也没有显示echos。

<?php
$myemail = 'user@email.com';
if (isset($_POST['name'])) {
$name = strip_tags($_POST['name']);
$email = strip_tags($_POST['email']);
$company = strip_tags($_POST['company']);
echo "<span class='"alert alert-success'" >Your message has been received. Thanks! Here is what you submitted:</span><br><br>";
echo "<stong>Name:</strong> ".$name."<br>"; 
echo "<stong>Email:</strong> ".$email."<br>";   
echo "<stong>Company:</strong> ".$company."<br>";

$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. ".
" Here are the details:'n Name: $name 'n ".
"Email: $email'n Company 'n $company";
$headers = "From: $myemail'n";
$headers .= "Reply-To: $email";
mail($to,$email_subject,$email_body,$headers);
}?>

底部有一个JavaScript,它应该触发表单POST。

<script>
 $(document).ready(function () {
    $('form#contact').on('submit', function(event) {
        event.preventDefault();
        $.ajax({
            type: "POST",
            url: "index.php", 
            data: $('form.contact').serialize(),
            success: function(msg){
                $("#stayInformed").modal('hide');
                alert(document.getElementById("name").value + " " + document.getElementById("email").value + " " + document.getElementById("company").value);
            },
            error: function(){
                alert("failure");
            }   
        });
    });
 });
</script>

按钮正确地触发了模态,JavaScript似乎运行正常。它在提交时关闭模态,如果我将php指针更改为不存在的东西,就会抛出错误。

整个页面的模态张贴在下面:

<?php
$myemail = 'user@email.com';
if (isset($_POST['name'])) {
$name = strip_tags($_POST['name']);
$email = strip_tags($_POST['email']);
$company = strip_tags($_POST['company']);
echo "<span class='"alert alert-success'" >Your message has been received. Thanks! Here is what you submitted:</span><br><br>";
echo "<stong>Name:</strong> ".$name."<br>"; 
echo "<stong>Email:</strong> ".$email."<br>";   
echo "<stong>Company:</strong> ".$company."<br>";

$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. ".
" Here are the details:'n Name: $name 'n ".
"Email: $email'n Company 'n $company";
$headers = "From: $myemail'n";
$headers .= "Reply-To: $email";
mail($to,$email_subject,$email_body,$headers);
}?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Modal Form Test</title>
    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>
    </div>
    </nav>
    <div class="jumbotron">
      <div class="container">
        <p><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#stayInformed">Stay Informed</button>
          </p>
 </div> <!-- /container -->          
</div> <!-- /jumbotron -->
<!-- stayInformed Modal -->
<div class="modal fade" id="stayInformed" tabindex="-1" role="dialog" aria-labelledby="stayInformed">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">Stay Informed!</h4>
      </div>
      <div class="modal-body">
          <form class="form-horizontal" id="contact" role="form" method="post" action="index.php">
  <fieldset>
    <legend>Register Below</legend>
    <div class="form-group">
      <label for="textArea" class="col-lg-2 control-label">Name</label>
      <div class="col-lg-10">
        <input type="text" class="form-control" id="name" placeholder="First Last"></input> 
      </div>
      </div>
      <div class="form-group">
      <label for="textArea" class="col-lg-2 control-label">Email</label>
      <div class="col-lg-10">
        <input type="text" class="form-control" id="email" placeholder="name@company.com"> 
      </div>
    </div>
    <div class="form-group">
      <label for="textArea" class="col-lg-2 control-label">Company</label>
      <div class="col-lg-10">
        <input type="text" class="form-control" id="company" placeholder="Company"></input> 
      </div>
      </div>
          <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
          <input type="submit" name="submit" value="Submit" id="submit" class="btn btn-primary" form="contact"></input>
    </div>
  </fieldset>
</form>
    </div>
  </div>
</div>
</div>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
<!-- JavaScript for modal form -->
<script>
 $(document).ready(function () {
    $('form#contact').on('submit', function(event) {
        event.preventDefault();
        $.ajax({
            type: "POST",
            url: "index.php", 
            data: $('form.contact').serialize(),
            success: function(msg){
                $("#stayInformed").modal('hide');
                alert(document.getElementById("name").value + " " + document.getElementById("email").value + " " + document.getElementById("company").value);
            },
            error: function(){
                alert("failure");
            }   
        });
    });
 });
</script>
</body>
</html>

编辑:我稍微更改了javascript和一些id的值,以消除重复。仍然不起作用。我现在可以在成功警报中看到这些值,但似乎仍然没有PHP正在执行。

编辑2:经过一些故障排除后,$_POST中似乎没有变量发送到php。我不知道为什么。。。

只需更改此项:

$("input#submit").click(function(){
   // stuff
});

通过这个:

$('form#stayInformed').on('submit', function(event) {
     event.preventDefault();
     // stuff
});

简历:不监听点击按钮,您必须监听表单提交事件。preventDefault()方法禁用默认操作,即不使用ajax提交表单。有了这个代码,一切正常。

下次,请自己尝试一下,并在谷歌上搜索它的制作过程。这是javascript的基本前提。

祝好运

编辑

注意,ID#stayInformation在DIV和FORM中是重复的。这是非常糟糕的做法。请确保html代码中的ID没有重复。

我将JavaScript代码更改为:

<script>
 $(document).ready(function () {
    $('#contact').submit(function(event) {
        var formData = {
            'name'              : $('input[id=name]').val(),
            'email'             : $('input[id=email]').val(),
            'company'           : $('input[id=company]').val()
        };
        event.preventDefault();
        $.ajax({
            type: "post",
            url: "index.php", 
            data: formData,
            success: function(msg){
                $("#stayInformed").modal('hide');
            },
            error: function(){
                alert("form post failed");
            }   
        });
    });
 });
</script>

这是有效的。