0

nullテキスト ボックスから値を取得しています。

日付は完全に機能していますが、入力ボックスからデータを取得できません。

(function () {

    if ($('#contactform').length) {

        var $form = $('#contactform'),
            $loader = '<img src="images/preloader.gif" alt="Loading..." />';
        $form.append('<div class="hidden" id="contact_form_responce">');

        var $response = $('#contact_form_responce');
        $response.append('<p></p>');

        $form.submit(function (e) {

            $response.find('p').html($loader);

            var data = {
                action: "contact_form_request",
                values: $("#contactform").serialize()
            };

            //send data to server
            $.post("php/contact-send.php", data, function (response) {

                $(".wrong-data").removeClass("wrong-data");
                $response.find('img').remove();

                if (response.is_errors) {

                    $response.find('p').removeClass().addClass("error type-2");
                    $.each(response.info, function (input_name, input_label) {

                        $("[name=" + input_name + "]").addClass("wrong-data");
                        $response.find('p').append('Please enter correctly "' + input_label + '"!' + '</br>');
                    });

                } else {

                    $response.find('p').removeClass().addClass('success type-2');

                    if (response.info == 'success') {

                        $response.find('p').append('Your email has been sent!');
                        $form.find('input:not(input[type="submit"], button), textarea, select').val('').attr('checked', false);
                        $response.delay(1500).hide(400);
                    }

                    if (response.info == 'server_fail') {
                        $response.find('p').append('Server failed. Send later!');
                    }
                }

                // Scroll to bottom of the form to show respond message
                var bottomPosition = $form.offset().top + $form.outerHeight() - $(window).height();

                if ($(document).scrollTop() < bottomPosition) {
                    $('html, body').animate({
                        scrollTop: bottomPosition
                    });
                }

                if (!$('#contact_form_responce').css('display') == 'block') {
                    $response.show(450);
                }

            });

            e.preventDefault();

        });

    }

})();

そして、ここにphpがあります:

require_once "../includes/database.php";

$cname    = $_POST['name'];
$cemail   = $_POST['email'];
$cmessage = $_POST['message'];
$date     = date("Y-m-d");  
$sql      = "INSERT INTO messages (sendername,senderemail,message,datesent) VALUES (:name,:email,:message,:date)";
$qry      = $db->prepare($sql);

$qry->execute(array(
  ':name'    =>$cname,
  ':email'   =>$cemail,
  ':message' =>$cmessage,
  ':date'    =>$date
));
4

3 に答える 3

2

問題は、POST データを$.post関数に割り当てる方法にあります。

面倒なコード

var data = {
   action: "contact_form_request",
   values: $("#contactform").serialize()
};

何が起こっているのかというと、データが多次元配列として送り返されているため、それを PHP ページに含める必要があります。

jQuery の形式に合わせて に変更$_POST['name']してみてください。$_POST['values']['name']POST 変数ごとにこの変更を行う必要があります。var_dump($_POST); die;配列のネストを確実にするためにいつでも行うことができます。

POST データに (元の php のように) 直接アクセスしたい場合は、jQuery .post()ドキュメントを確認する必要があります。

POST に直接アクセスするための構文 ( $_POST['name']) には、次のコードが必要です。

$.post('mypostpage.php', $('myform').serialize(), function(response) {
    //do work
});
于 2013-01-07T13:13:07.013 に答える
0

e.preventDefault()を関数の先頭に移動してみてください。そうしないと、すべての jQuery の実行を待たずにフォームが送信される可能性があります

于 2013-01-07T13:10:02.483 に答える
0

あなたがフォームのHTMLコードを投稿

コードをラップしてみてください

$('document').ready(function() {

  });
于 2013-01-07T13:12:59.380 に答える