【问题标题】:HTML to PHP form inputs through AJAX通过 AJAX 将 HTML 转换为 PHP 表单输入
【发布时间】:2021-06-03 15:22:16
【问题描述】:

我想从 html 表单中获取输入,并通过我的 JavaScript 将它们发送到 PHP。基本上我有一个非常简单的 html 表单,我想获取它的输入并使用 JavaScript 将它们发送到 PHP,因为我正在使用 AJAX。

问题在于,每当我填写表格并提交时,它只会向我发送一封电子邮件,但没有表格中的值——这正是我在 PHP 中已有的内容。

HTML 代码

<!-- CONTACT FORM START -->
<form id="contact-form" class="fade-up" method="post" action="">
    <div class="row">

        <!--NAME FIELD-->
        <div class="col-md-6">
            <input type="text" id="cf-name" class="input__field cf-validate" name="name" placeholder="Name">
        </div>

        <!--EMAIL FIELD-->
        <div class="col-md-6">
            <input type="text" id="cf-email" class="input__field cf-validate" name="email" placeholder="Email">
        </div>

        <!--MESSAGE BOX-->
        <div class="col-md-12">
            <textarea id="cf-message" class="input__field cf-validate" rows="8" name="message" placeholder="Your Message"></textarea>
        </div>

        <div class="alert-container col-md-12"></div>

        <!--SUBMIT BUTTON-->
        <div class="col-md-12">
            <button type="submit" id="cf-submit" name="subind" class="main-btn cursor-link">Send as an individual</button>

            <button type="submit" id="cf-submit" name="subbiz" class="main-btn cursor-link">Send as a business</button>
        </div>

    </div>
</form>
<!-- CONTACT FORM END -->

Javascript 代码

$(document).ready(function() {
    $('form').submit(function (event) {
        event.preventDefault()
        
        var name = document.getElementById('cf-name').value
        var email = document.getElementById('cf-email').value
        var msg = document.getElementById('cf-message').value
        
        //make a post request by AJAX
        
        $.post("mail.php",{name:name,email:email,msg:msg},function(data){
            console.log(data)
        })
    })
})

PHP 代码

<?php
    $name = $_POST['name'];echo $_POST['name'];
    $email = $_POST['email'];echo $_POST['email'];
    $message = $_POST['msg'];echo $_POST['msg'];
    $subject = "Client Mail - Individual";
    $to = "clients@growpile.com";
    $headers = "From: ".$email;
    $txt = "Name: ".$name." - Individual"."\n"."From: ".$email."\n\n".$message."\n\n".$ind;

    mail($to, $subject, $txt, $headers);
?>

【问题讨论】:

  • 那么您遇到的问题是什么?你有什么错误吗?你还没有具体说明你需要什么帮助。
  • 哎呀,我发送给自己的电子邮件没有我在表单中输入的任何数据。它们只是在值应该存在的地方带有空格的模板。

标签: javascript php html ajax forms


【解决方案1】:

调整您的表单,使其没有与之关联的操作,这是为了防止表单在 Javascript 执行之前提交 POST 请求。

<!-- CONTACT FORM START -->
<form id="contact-form" class="fade-up">
    <div class="row">

        <!--NAME FIELD-->
        <div class="col-md-6">
            <input type="text" id="cf-name" class="input__field cf-validate" name="cf-name" placeholder="Name">
        </div>

        <!--EMAIL FIELD-->
        <div class="col-md-6">
            <input type="text" id="cf-email" class="input__field cf-validate" name="cf-email" placeholder="Email">
        </div>

        <!--MESSAGE BOX-->
        <div class="col-md-12">
            <textarea id="cf-message" class="input__field cf-validate" rows="8" name="ccf-message" placeholder="Your Message"></textarea>
        </div>

        <div class="alert-container col-md-12"></div>

        <!--SUBMIT BUTTON-->
        <div class="col-md-12">
            <button type="submit" id="cf-submit" name="subind" class="main-btn cursor-link">Send as an individual</button>

            <button type="submit" id="cf-submit" name="subbiz" class="main-btn cursor-link">Send as a business</button>
        </div>

    </div>
</form>

您可以使用 JQuery 的val() 函数获取 HTML 字段的输入。

$(document).ready(function() {
    $('form').submit(function (event) {
        event.preventDefault()
        
        var name = $("#cf-name").val();
        var email = $("#cf-email").val();
        var message = $("#cf-message").val();
        
        // Make a post request by AJAX.
        $.post("mail.php", {name: name, email: email, message: message}, function(data) {
            console.log(data);
        });
    });
});

对于您的服务器端 POST 请求处理程序,您可以使用变量索引下的 filter_input 函数从 POST 请求中获取输入。

<?php
    $name = filter_input(INPUT_POST, "name");
    $email = filter_input(INPUT_POST, "email");
    $message = filter_input(INPUT_POST, "message");

    // Print the information from the form received.
    echo "Name: " . $name . "\n";
    echo "Email: " . $email . "\n";
    echo "Message: " . $message;

    $subject = "Client Mail - Individual";
    $to = "clients@growpile.com";
    $headers = "From: " . $email;
    $txt = "Name: " . $name . " - Individual" . "\n" . "From: " . $email . "\n\n" . $message . "\n\n" . $ind;

    mail($to, $subject, $txt, $headers);
?>

【讨论】:

  • 谢谢刚刚尝试过,但它似乎不起作用。现在我检查了控制台( f12 ),看起来我们在那里转储的值是空的?它可能来自我的html吗?图片:imgur.com/a/03wIxOZ
  • 你能确认你正在使用 jQuery 吗?
  • 另外,请尝试删除 &lt;form&gt; 标签中的 method="post" action="",以防在 JS 被触发之前它仍然触发它自己的 post 请求。我已经测试了代码,它给了我一个有效的结果。 i.imgur.com/DIfuU1k.png
  • 是的,我在“
猜你喜欢
  • 2016-08-17
  • 2015-08-29
  • 1970-01-01
  • 2013-03-20
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多