简体   繁体   English

如何制作Ajax联系表格

[英]How to make an Ajax Contact Form

PS edited to remove unnecessary code PS编辑已删除不必要的代码

Can you tell me what I'm doing wrong here? 你能告诉我我在做什么错吗? The error log doesn't show a thing. 错误日志未显示任何内容。

Here's my html, js, and php. 这是我的html,js和php。

sample.js sample.js

  // this is to prevent page refresh, right? stepsForm.prototype.options = { onSubmit : function() { return false; } }; // submits the form, but i add some js in sample.html, so this one will not work. stepsForm.prototype._submit = function() { this.options.onSubmit( this.el ); } 

sample.html sample.html

 <div class="container"> <section> <form id="theForm" class="simform" autocomplete="off" action="form-process.php"> <div class="simform-inner"> <ol class="questions"> <li> <span><label for="q1">What's your name / full name?</label></span> <input id="q1" name="q1" type="text" /> </li> <li> <span><label for="q2">What's your email address?</label></span> <input id="q2" name="q2" type="text" data-validate="email" /> </li> <li> <span><label for="q3">What's your phone number?</label></span> <input id="q3" name="q3" type="text" data-validate="phone" /> </li> <li> <span><label for="q4">Type your question below?</label></span> <input id="q4" name="q4" type="text" /> </li> </ol> <!-- /questions --> <button class="submit" type="submit">Send answers</button> <div class="controls"> <button class="next"></button> <div class="progress"></div> <span class="number"> <span class="number-current"></span> <span class="number-total"></span> </span> <span class="error-message"></span> </div> <!-- / controls --> </div> <!-- /simform-inner --> <span class="final-message"></span> </form> <!-- /simform --> </section> </div> <!-- /container --> <script src="js/classie.js"></script> <script src="js/stepsForm.js"></script> <!-- this is the script that will replace the one in the sample.js --> <script> var theForm = document.getElementById('theForm'); new stepsForm(theForm, { onSubmit: function(form) { classie.addClass(theForm.querySelector('.simform-inner'), 'hide'); var name = $("#q1").val(); var email = $("#q2").val(); var number = $("#q3").val(); var message = $("#q4").val(); $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", dataType: "json", url: "form-process.php", data: JSON.stringify({ name: name, email: email, number: number, message: message }), success: function(response) { var data = response.d; var messageEl = theForm.querySelector('.final-message'); messageEl.innerHTML = 'Thank you! We\\'ll be in touch.'; classie.addClass(messageEl, 'show'); } }); } }); </script> 

sample.php sample.php

  $EmailTo = "mail@mail.com"; $Subject = "New Message Received"; // prepare email body text $Body = ""; $Body .= "Name: "; $Body .= $name; $Body .= "\\n"; $Body .= "Email: "; $Body .= $email; $Body .= "\\n"; $Body .= "Phone Number: "; $Body .= $number; $Body .= "\\n"; $Body .= "Message: "; $Body .= $message; $Body .= "\\n"; // send email $success = mail($EmailTo, $Subject, $Body, "From:".$email); // redirect to success page 

so the step for this process is get the input from html, process it with ajax (js), then send it to sample.php to mail it, right? 因此,此过程的步骤是从html获取输入,使用ajax(js)处理它,然后将其发送到sample.php进行邮寄,对吗? but I cant seem to pass the ajax process or sample.php. 但我似乎无法通过ajax进程或sample.php。 my code result in blank page and no outgoing email. 我的代码导致空白页,没有外发电子邮件。

Since I'm new to php and js, I mostly reverse engineer the source to make it suitable for me. 由于我是php和js的新手,所以我主要对源进行反向工程以使其适合我。 This time I have taken the "minimalist form interface" from codrops. 这次,我采用了codrops的“极简主义形式接口”。

and this is also my first post in SO, so please be gentle :) 这也是我在SO上的第一篇文章,所以请保持温柔:)

You chose a very complicated example. 您选择了一个非常复杂的示例。 Here is a MUCH simpler AJAX contact form to learn from. 这是要学习的更简单的AJAX联系表。

index.php index.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/index.js" type="text/javascript"></script>

<!--  Whatever code you have above the contact form  -->

<!--  A very simple contact form -->
<div id="frmContact">
    Name: <input id="name" type="text" />
    Email: <input id="email" type="text" />
    Comment: <textarea id="comment" rows="4" cols="40"></textarea>
    <button id="mybutt">Send</button>
</div>

index.js index.js

$(document).ready(function(){
    $('#mybutt').click(function(){
        var na = $('#name').val();
        var em = $('#email').val();
        var cm = $('#comment').val();

        if (na=='' || em=='' || cm==''){
            alert("Please complete all fields");
            return false;
        }

        $.ajax({
            type: 'post',
             url: 'your_php_ajax_file.php',
            data: 'na='+na+'&em='+em+'&cm='+cm,
            success: function(d){
                if (d.length) alert(d);
            }
        }); //END ajax
    }); //END #mybutt.click
});

your_php_ajax_file.php your_php_ajax_file.php

<?php

    function sanitize($data) {
        return htmlentities(strip_tags(mysql_real_escape_string($data)));
    }

    // sanitize your inputs 
    $na = sanitize($_POST['na']);
    $em = sanitize($_POST['em']);
    $cm = sanitize($_POST['cm']);

    $dt = date('Y-M-d H:i:s');

    $body = '
        <div style="width:100%;text-align:center;margin:0 0 30px 0;font-family:Arial;font-size:30px;font-weight:bold;">Website Contact Form</div>
        <div style="text-align:left;margin:10px 0;font-family:Arial;font-size:22px;">'.$dt.'</div>
        <div style="text-align:left;margin:10px 0;font-family:Arial;font-size:22px;">'.$na.'</div>
        <div style="text-align:left;margin:10px 0;font-family:Arial;font-size:22px;">'.$em.'</div>
        <hr style="color:#cccccc;">
        <div style="text-align:left;margin:10px 0;font-family:Arial;font-size:22px;">'.$cm.'</div>
    ';


    $headers = "";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";
    $headers .= "From: website@example.com\n";
    $headers .= "Organization: example.com\n";
    $headers .= "X-Priority: 3\n";
    $headers .= "X-Mailer: PHP". phpversion() ."\n" . PHP_EOL;
    $msg = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">';
    $msg .= $body;

    mail($to, $subject, $msg, $headers);
    mail('youremail@hotmail.com', 'Contat form', $msg, $headers);

    echo 'Contact form sent';

Regarding AJAX, here are some good posts for getting the basics of AJAX: 关于AJAX,以下是一些不错的帖子,可帮助您了解AJAX的基本知识:

A simple example 一个简单的例子

More complicated example 更复杂的例子

Populate dropdown 2 based on selection in dropdown 1 根据下拉列表1中的选择填充下拉列表2

NB: Note that the PHP AJAX processor code cannot be part of the same PHP file (eg index.php) that you are calling it from (or else it won't work and the entire page will be echoed back to you as the "ajax response") 注意:请注意,PHP AJAX processor代码不能属于您要从中调用的同一PHP文件(例如index.php)的一部分(否则它将无法正常工作,并且整个页面将作为“ ajax响应”)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM