簡體   English   中英

嘗試通過javascript提交時,我的表單數據之一似乎沒有正確設置

[英]One of my form's data doesn't seem to be setting properly when attempting to submit via javascript

我正在開發一個網站,提交2個表單,一個隱藏的表單將數據發送到數據庫,可見的表單將表單內容郵寄給用戶。 我查找了如何通過javascript發送多個表單,當我發送它時,將數據發送到數據庫的表單將起作用,但是在電子郵件中發送數據的表單不會,電子郵件將是空的。 我目前正在進行本地測試的hMailServer設置。

**index.php forms
<form id="form1" name="form1" method="POST" action="sendData.php">
                    <div class="col-sm-6">
                        <div class="form-controls left-sec">
                            <input id="name" name="name" type="text" placeholder="Your Name" pattern="[a-zA-Z0-9\s]+" required>
                            <input id="email" name="email" type="text" placeholder="Your Email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,3}$" required>
                            <input id="subject" name="subject" type="text" placeholder="Subject" required>
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-controls right-sec">
                            <textarea id="message" name="message" placeholder="Type Message" required></textarea>
                        </div>
                    </div>
                    <div class="col-sm-12">
                        <div class="form-controls">
                            <input id="submitButton" type="button" name="submit1" class="btn" value="Send Message">
                        </div>
                    </div>
                    </form>
<form id="form2" name="form2" style="display:none;" type="hidden" method="POST" action="sendData.php">
                        <input style="display:none;" type="hidden" id="dbname" name="dbname">
                        <input style="display:none;" type="hidden" id="dbemail" name="dbemail">
                        <input style="display:none;" type="hidden" id="dbsubject" name="dbsubject">
                        <input style="display:none;" type="hidden" id="dbmessage" name="dbmessage">
</form>
<script>
    "use strict";
    var btn = document.getElementById("submitButton");
    btn.onclick = submitForms; // calls function in forms.js, forms.js is included in index.php
</script>
// forms.js
"use strict";
function submitForms(){
    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;
    var subject = document.getElementById("subject").value;
    var message = document.getElementById("message").value;
    var dbname = document.getElementById("dbname");
    var dbemail = document.getElementById("dbemail");
    var dbsubject = document.getElementById("dbsubject");
    var dbmessage = document.getElementById("dbmessage");
    debugger;
    dbname.value = name;
    dbemail.value = email;
    dbsubject.value = subject;
    dbmessage.value = message;
    var f1 = document.getElementById("form1");
    var f2 = document.getElementById("form2");
    f1.submit();
    f2.submit();

}
// forms.js debugging, lines cut out for convenience, f1 and f1 elements dont seem to be registering correctly as inputs
"use strict";
function submitForms(){
    var name = document.getElementById("name").value; name = "testname"
    var dbname = document.getElementById("dbname"); dbname = input#dbname {accept: "", alt: "", autocomplete: "", autofocus: false, defaultChecked: false, …}
    var f1 = document.getElementById("form1"); f1 = form#form1
    var f2 = document.getElementById("form2"); f2 = form#form2 {0: input#dbname, 1: input#dbemail, 2: input#dbsubject, 3: input#dbmessage, acceptCharset: "", action: "http://localhost/test/sendData.php", autocomplete: "on", enctype: "application/x-www-form-urlencoded", encoding: "application/x-www-form-urlencoded", …}

    f1.submit();
    f2.submit();

}
// sendData.php
<?php
session_start();
include("../Include/storeData.php");
include("../Include/sendMail.php");
if(isset($_POST["name"])){ // if I use just isset($_POST), database info sends but mail is empty, I put in $_POST["name"] to test my theory that it wasn't setting correctly
    echo "<h1 style='font-weight: bolder; color: green; text-align: center;'>Message has been sent. Thank you!</h1>";
    echo "<script>setTimeout(\"location.href = 'index.php';\",1500);</script>";
    $_SESSION = [];
}
?>
// storeData.php
<?php
$host = "localhost";
$username = "root";
$password = "";
$link = mysqli_connect($host, $username, $password);
if(!$link){
    die("Could not connect: " . mysqli_error());
}

function checkExists($l){
    $db_selected = mysqli_select_db($l, "luberlaw");
    if(!$db_selected){
        $sql = "CREATE DATABASE db";
        if(mysqli_query($l, $sql)){
            mysqli_select_db($l, "db");
            $query = "CREATE TABLE msgData (ID int(11) AUTO_INCREMENT,
                      sName varchar(255) NOT NULL, sEmail varchar(255) NOT NULL, 
                      sSubject varchar(255) NOT NULL, sMessage varchar(3000) NOT NULL,
                      dateEntered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
                      PRIMARY KEY (ID))";
            $result = mysqli_query($l, $query);
        }else{
            echo "Error creating database: " . mysqli_error() . ".\n";
        }
    }
}

function storeData($l){
    $name = $_POST["dbname"];
    $email = $_POST["dbemail"];
    $subject = $_POST["dbsubject"];
    $message = $_POST["dbmessage"];
    $db_selected = mysqli_select_db($l, "luberlaw");
    $sql = "INSERT INTO msgData (sName, sEmail, sSubject, sMessage) VALUES (?, ?, ?, ?)";
    $stmt = mysqli_prepare($l, $sql);
    $stmt->bind_param("ssss", $name, $email, $subject, $message);
    $stmt->execute();
    $stmt->close();
    mysqli_close($l);
}

if(isset($_POST["name"])){
    checkExists($link);
    storeData($link);
}
//sendmail.php
<?php

function sendMail(){
    $name = $_POST["name"];
    $email = $_POST["email"];
    $subject = "website message: " . $_POST["subject"];
    $message = $_POST["message"];
    $to = "websiteownersemail";
    $body = "<html>
                <head>
                <title>website Message</title>
                </head>
                <body>
                <table>
                <tr>
                <th>Name</th>
                </tr>
                <tr>
                <td>$name</td>
                </tr>
                </table>
                <p>$message</p>
                </body>
                </html>";
    $headers[] = "MIME-Version: 1.0";
    $headers[] = "Content-type: text/html; charset=iso-8859-1";
    $headers[] = "Bcc: myemail"; //testing purposes
    mail($to, $subject, $body, implode("\r\n", $headers));
}

if(isset($_POST["name"]))
    sendMail();
?>

我希望這兩個表單都能提交,但顯然有些東西與form1無法正常工作。 我最初只是在我的php文件中使用了isset($ _ POST),這將允許填充數據庫,但發送的電子郵件是空的。 我把isset($ _ POST [“name”])作為測試來查看form1數據是否正在設置,而不是。

編輯包含sendmail和storedata php文件

你正在以錯誤的方式處理它。 你有form1中的提交按鈕,它只將form1數據傳遞給PHP文件,你怎么期望它也會發送form2

請將所有隱藏字段移動到form1並從所有隱藏字段中刪除樣式屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM