【问题标题】:Form submission PHP ajax表单提交 PHP ajax
【发布时间】:2015-09-14 16:18:54
【问题描述】:

我正在设置表单提交,但在让 Ajax 连接到 PHP 并将表单信息发送到所需的电子邮件地址时遇到了一些麻烦。不是这方面的专家,因为这是我第一次尝试 AJAX 提交表单信息。

感谢您就出了什么问题提出任何意见。

提前致谢

此代码现在可以正常工作了我已使用新代码更新了问题。

表格:

    <form name="contactform" id="contactsubmit" action="form_action.php">
        <h2>contact form</h2>
        <hr>
        <label class="Tgrey">name</label>
        <input type="text" name="name" id="name" required>
        <label class="Tgrey">email</label>
        <input type="email" name="email" id="email" required>
        <label class="Tgrey">Telephone</label>
        <input type="tel" name="telephone" id="telephone" required>
        <br>
        <br>
        <label class="Tgrey">Telephone</label>
        <br>
        <textarea name="message" rows="10" cols="50" id="message" required></textarea>
        <br>
        <input type="submit" value="send">
    </form>

JQUERY/AJAX

$("form").submit(function(e)
{
    event.preventDefault();
    $.ajax(
    {
        'url' : $(this).attr('action'),
        'type' : "POST",
        'data' : $(this).serialize(),
        success:function(success)
        {alert("HEY")},
    });
});

PHP

   if(isset($_POST['name'], $_POST['email'], $_POST['telephone'], $_POST['message'])){

    $name = $_POST['name'];
    $email = $_POST['email'];
    $telephone = $_POST['telephone'];
    $message = $_POST['message'];

    $to  = "name@email.com";
    $subject = "Message from $name via Web:";
    $txt = "This message has come website: \n
    $message \n
    Contact details:\n 
    Name: $name, Email: $email, Telephone: $telephone";
    $header = "From Website";

    mail($to,$subject,$txt,$headers);
}

【问题讨论】:

  • 仅供参考:&lt;form&gt; 不包含名称属性。那么这将失败if(isset($_POST['submit'])) {...} - 检查您的控制台并使用错误报告php.net/manual/en/function.error-reporting.php
  • PHP 代码不会被执行,因为没有带有 name 'submit' 的表单元素,所以isset($_POST['submit']) 返回 false。
  • 您也没有分配给$headers。再次...错误报告。
  • 哦,所有这些isset($_POST 也会失败。您可能正在尝试使用三元运算符,但只是错误的方式。 php.net/manual/en/language.operators.comparison.php - 但是,最好使用 !empty() 和三元组。
  • 感谢大家的帮助。我从你给我的输入从头开始并让它工作。以上代码已更新

标签: php jquery ajax forms


【解决方案1】:

$_POST['submit'] 不会在序列化的表单数据中发送。你应该做的是检查 POST 数组中是否有数据:

if(!empty($_POST)) {.. // if not empty, proceed

如果您不想更改您的 PHP,您可以将 &amp;submit=submit 附加到您的 AJAX 函数中保存序列化数据的变量:

'data' : $(this).serialize() + '&submit=submit',

此外,正如@Fred -ii- 指出的那样,您有一些未设置的变量($subject (除非您打算在代码中设置它,否则您的表单中也缺少该变量) em> 和$headers)。您需要在脚本中添加一些基本的错误检查来指示这些问题。在打开 &lt;?php 标记后立即将错误报告添加到文件顶部

error_reporting(E_ALL); 
ini_set('display_errors', 1);

【讨论】:

  • 不客气@AdamKhouryDesign 因为这有助于您通过单击旁边的复选标记来接受答案。
【解决方案2】:

这是我的简单解决方案

HTML

<span id="message"></span>

<form id="form" action="add.php" method="post">
    <label>First Name</label>
    <input type="text" name="firstname">
    <label>Last Name</label>
    <input type="text" name="lastname">

    <input type="submit" name="addUser">
</form>

JQUERY

frm = $('#form');

frm.submit(function(e) {

    e.preventDefault();

    $.ajax({
        url: frm.attr('action'),
        type: frm.attr('method'),

        // adds &addUser in the end of data
        // firstname=value1&lastname=value2&addUser
        data: frm.serialize()+'&'+frm.children(':submit').attr('name'),
        success: function(res) {
            $('#message').html(res);
            frm.trigger("reset");
        }
    });

});

PHP

<?php

include 'database.php';

if (isset($_POST['addUser'])) {
    $firstname= $_POST['firstname'];
    $lastname= $_POST['lastname'];

    $sql = "INSERT INTO tbl_name (firstname, lastname) VALUES ('$firstname', '$lastname')";

    if (mysqli_query($conn, $sql)) {
        echo "Success";
    } else {
        echo "Failed";
    }
}

mysqli_close($conn);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2014-02-14
    • 2011-10-03
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多