Javascript 发送电子邮件并从同一表单插入

Javascript 发送电子邮件并从同一表单插入,javascript,php,html,forms,Javascript,Php,Html,Forms,我有一个页面,其中有一个表单,可以通过电子邮件发送数据。 我希望当我点击提交按钮时,除了通过电子邮件发送数据外,我还希望在有插入脚本的页面中发送数据。 这是我的页面代码: <!doctype html> <html lang="en"> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <?php requir

我有一个页面,其中有一个表单,可以通过电子邮件发送数据。
我希望当我点击提交按钮时,除了通过电子邮件发送数据外,我还希望在有插入脚本的页面中发送数据。

这是我的页面代码:

<!doctype html>
<html lang="en">

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

<?php

require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/config.php';

session_start();

if (!empty($_SESSION['_contact_form_error'])) {
    $error = $_SESSION['_contact_form_error'];
    unset($_SESSION['_contact_form_error']);
}

if (!empty($_SESSION['_contact_form_success'])) {
    $success = true;
    unset($_SESSION['_contact_form_success']);
}

?>
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">

    <title>Appointmenta</title>

    <!-- reCAPTCHA Javascript -->
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-8 offset-md-2">
            <div class="card mt-5">
                <div class="card-body">
                    <h1 class="card-title">
                        Add an Appointment
                    </h1>

                    <?php
                    if (!empty($success)) {
                        ?>
                        <div class="alert alert-success">Message sent successfully.</div>
                        <?php
                    }
                    ?>

                    <?php
                    if (!empty($error)) {
                        ?>
                        <div class="alert alert-danger"><?= $error ?></div>
                        <?php
                    }
                    ?>

                    <?php $Field1= $_POST['Field1']; ?>
                    <?php $Field2= $_POST['Field2']; ?>
                    <?php $Field3= $_POST['Field3']; ?>
                    <?php $Field4= $_POST['Field4']; ?>
                    <?php $Field5= $_POST['Field5']; ?>
                    <?php $Field6= $_POST['Field6']; ?>
                    <?php $Field7= $_POST['Field7']; ?>
                    <?php $Field8= $_POST['Field8']; ?>
                    <?php $Field9= $_POST['Field9']; ?>

                    <form id="target" method="post">
                        <div class="form-group">
                            <label for="name">Field 1</label>
                            <input type="text" name="Field1" id="Field1" class="form-control" 
                                   value="<?php echo $Field1?>">
                        </div>

                        <div class="form-group">
                            <label for="subject">Field 2</label>
                            <input type="text" name="Field2" id="Field2" class="form-control"
                                   value="<?php echo $Field2?>">
                        </div>

                        <div class="form-group">
                            <label for="email">Field 3</label>
                            <input type="text" name="Field3" id="Field3" class="form-control" 
                                   value="<?php echo $Field3?>">
                        </div>

                        <div class="form-group">
                            <label for="subject">Field 4</label>
                            <input type="text" name="Field4" id="Field4" class="form-control"
                                   value="<?php echo $Field4?>">
                        </div>

                        <div class="form-group">
                            <label for="subject">Field 5</label>
                            <input type="text" name="Field5" id="Field5" class="form-control"
                                   value="<?php echo $Field5?>">
                        </div>

                        <div class="form-group">
                            <label for="subject">Field 6</label>
                            <input type="text" name="Field6" id="Field6" class="form-control"
                                   value="<?php echo $Field6?>">
                        </div>

                        <div class="form-group">
                            <label for="subject">Field 7</label>
                            <input type="text" name="Field7" id="Field7" class="form-control"
                                   value="<?php echo $Field7?>">
                        </div>
                   
                        <div class="form-group">
                            <label for="subject">Field 8</label>
                            <input type="text" name="Field8" id="Field8" class="form-control"
                                   value="<?php echo $Field8?>">
                        </div>

                        <div class="form-group">
                            <label for="message">Field 9</label>
                            <input type="text" name="Field9" id="Field9" class="form-control" 
                                   value="<?php echo $Field9?>">
                        </div>

                        <div class="form-group text-center">
                            <div align="center" class="g-recaptcha" data-sitekey="<?= CONTACTFORM_RECAPTCHA_SITE_KEY ?>"></div>
                        </div>

                        <button "name="submit" class="btn btn-primary btn-block"> Send Email</button>
                    </form>

                    <form action="../list.php">
                        <p><br></p>
                        <button class="btn btn-primary btn-block">Return home.</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

<script language="Javascript">
<!--

$('form').submit(function(event) {
        event.preventDefault();
        $.ajax({
            method: 'POST',
            url: 'submit.php',
            data: $( this ).serialize()
        });
    });
-->
</script>
<?php

require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/functions.php';
require_once __DIR__.'/config.php';

session_start();

// Basic check to make sure the form was submitted.
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
echo "The form must be submitted with POST data.";
exit();
}

require "appointment.php";

// Do some validation, check to make sure the name, email and message are valid.
if (empty($_POST['g-recaptcha-response'])) {
    echo "Please complete the CAPTCHA.";
}

$recaptcha = new \ReCaptcha\ReCaptcha(CONTACTFORM_RECAPTCHA_SECRET_KEY);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_REQUEST['REMOTE_ADDR']);

if (!$resp->isSuccess()) {
    $errors = $resp->getErrorCodes();
    $error = $errors[0];

    $recaptchaErrorMapping = [
        'missing-input-secret' => 'No reCAPTCHA secret key was submitted.',
        'invalid-input-secret' => 'The submitted reCAPTCHA secret key was invalid.',
        'missing-input-response' => 'No reCAPTCHA response was submitted.',
        'invalid-input-response' => 'The submitted reCAPTCHA response was invalid.',
        'bad-request' => 'An unknown error occurred while trying to validate your response.',
        'timeout-or-duplicate' => 'The request is no longer valid. Please try again.',
    ];

    $errorMessage = $recaptchaErrorMapping[$error];
    echo "Please retry the CAPTCHA: ".$errorMessage;
}

// Everything seems OK, time to send the email.

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);

try {
    //Server settings
    $mail->SMTPDebug = CONTACTFORM_PHPMAILER_DEBUG_LEVEL;
    $mail->isSMTP();
    $mail->Host = CONTACTFORM_SMTP_HOSTNAME;
    $mail->SMTPAuth = true;
    $mail->Username = CONTACTFORM_SMTP_USERNAME;
    $mail->Password = CONTACTFORM_SMTP_PASSWORD;
    $mail->SMTPSecure = CONTACTFORM_SMTP_ENCRYPTION;
    $mail->Port = CONTACTFORM_SMTP_PORT;

    // Recipients
    $mail->setFrom(CONTACTFORM_FROM_ADDRESS, CONTACTFORM_FROM_NAME);
    //$mail->addAddress(CONTACTFORM_TO_ADDRESS, CONTACTFORM_TO_NAME);
    //$mail->addAddress(CONTACTFORM2_TO_ADDRESS, CONTACTFORM2_TO_NAME);
    $mail->addAddress(CONTACTFORM3_TO_ADDRESS, CONTACTFORM3_TO_NAME);
    //$mail->addAddress(CONTACTFORM4_TO_ADDRESS, CONTACTFORM4_TO_NAME);
    //$mail->addReplyTo("marketing@lgp-italia.it");


    // Content
    $mail->Subject = "Appointment at ".$_POST['Field1'];
    $mail->Body    = <<<EOT
    Appointment at:  {$_POST['Field1']},  {$_POST['Field2']}
    {$_POST['Field3']}
    {$_POST['Field4']}
    {$_POST['Field5']}
    {$_POST['Field6']}
    {$_POST['Field7']}

EOT;

    $mail->send();
    
} catch (Exception $e) {
    echo "An error occurred while trying to send your message: ". $mail->ErrorInfo;
}

    

<?php

if (isset($_POST['submit'])) {

    require "../../../security/config.php";
    require "../../../security/common.php";

    try  {
        $connection = new PDO($dsn, $username, $password, $options);
       
            $new_call = array(
                "Field1"  => $_POST['Field1'],
                 [...]
            );

        echo var_dump("1");

        $sql = sprintf(
                "INSERT INTO %s (%s) values (%s)",
                "db.appointments",
                implode(", ", array_keys($new_call)),
                ":" . implode(", :", array_keys($new_call))
        );

        echo var_dump("2");
        
        $statement = $connection->prepare($sql);
        $statement->execute($new_call);

        echo var_dump("3");

    } catch(PDOException $error) {
        echo $sql . "<br>" . $error->getMessage();
    }

    echo var_dump("4");
}
    echo var_dump("5");
?>


任命a
添加约会
消息已成功发送。
字段1

您在代码中添加了jquery了吗?为什么不将数据发送到一个PHP脚本来完成这两项任务,而不是两个AJAX请求呢?这会更有意义。另外,
async:false
也不推荐使用,您真的不应该使用它,它会造成糟糕的用户体验。还有,为什么您要使用AJAX,然后重定向到同一页面?这毫无意义。使用AJAX的全部目的是避免进行任何重新加载、刷新、重定向或类似操作,只允许用户保持在同一页面上。如果你只是想在使用AJAX后重定向到该页面,那么你最好先将表单发布到该页面,而不必使用AJAX。另外,还不清楚——你在“submit.php”的问题部分向我们展示的代码是另一个页面还是其他页面?如果你编辑了表单,应该不需要进行任何重定向。这就是使用AJAX的全部意义所在。为什么不完全删除
window.location.href
行?和
window.open(“index.php”)毫无意义。你为什么要改变这一点?对代码做一些思考,而不是猜测。另外,如果你根本不想让那个窗口打开,那么你需要回头看看我说的话