Использование.Post() для передачи переменной JQuery в PHP

Я пытаюсь создать поле ввода подписки по электронной почте с помощью JQuery, но по какой-то причине введенные адреса электронной почты не вставляются в базу данных MySql, кто-нибудь может мне помочь?

Вот код, который у меня есть в моем файле newsletter.js:

jQuery(function($){

var validateRegexps = {
    email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/,
    "default": /.{4}/ 
    }

if ($("#newsletter form").length == 0) return

var defaultMessage = $("#newsletter").attr("data-default")
var subscribedMessage = $("#newsletter").attr("data-subscribed")
var newsletterForm = $("#newsletter form")

 /* newsletter code */
function newsletter(send) {
        var subscribe = true
        newsletterForm.find('input[type="submit"]').val(subscribe ? "Sign Up" : "Unsubscribe")

        var email = newsletterForm.find('input[name="email"]')
        var check = true

        if (email.val() == defaultMessage || email.val() == subscribedMessage) {
            email.val("")
            if (!send) check = false
        } 

        if (check) {
            if(validateRegexps["email"].test(email.val())) {
                    // valid mail
                    email.removeClass("error")
                    if (send) {
                            $.post("php/newsletter.php",{add: email.val()},  function(data) {
                                    email.val(subscribedMessage)
                            });
                            email.val("sending")
                    }

            } else {
                    // invalid mail
                    email.addClass("error")
            }
        }


        return false
}

function restore(e) {
    var jqEl = $(e.currentTarget) 
    if (jqEl.val() == "") {
        jqEl.val(defaultMessage)
    }
    return true
}

function signUp() {
        return newsletter(false)
}

function signUpAndSend() {
        return newsletter(true)
}

newsletterForm.find('input[name="email"]').focus(signUp).focusout(restore)
newsletterForm.change(signUp)
newsletterForm.submit(signUpAndSend)

});

Вот код в моем файле newsletter.php:

require("config.php");

$db = mysql_connect($dbhost, $dbuser, $dbpassword);
mysql_select_db($dbdatabase, $db);

$subsql = "INSERT INTO subscribe(email) VALUES(".$_POST['add'].");";
mysql_query($subsql);

And here is the code in my other php page to display the input box:

<div id="newsletter" data-default="youremail@yourdomain.com" data-subscribed="Thank you for subscribing.">

<form action="#" method="POST">
<input type="text" name="email" value="youremail@yourdomain.com" />
<input type="submit" value="submit" />
</form>
<h2>Sign Up to Our Newsletter!</h2>

</div>

Любая помощь с благодарностью. Заранее большое спасибо!!!

1 ответ

Хм! Просмотр вашего кода напрямую не указывает на какие-либо ошибки, но наиболее очевидная проблема, по-видимому, заключается в запросе INSERT, что адрес электронной почты не заключен в одинарные кавычки. Пожалуйста, напишите ваш запрос как:

$subsql = "INSERT INTO subscribe(email) VALUES('" . $_POST['add'] . "');";

Надеемся, что вышеупомянутая вставка должна работать нормально. Если проблема все еще существует, попробуйте выяснить, может ли запрос генерировать какие-либо ошибки:

$subsql = "INSERT INTO subscribe(email) VALUES('" . $_POST['add'] . "');";
mysql_query($subsql);
if (mysql_error()) {
    echo mysql_error();
}

Если ошибок не обнаружено и проблема все еще существует, возможно, имеет смысл изучить другие основы, например:

  1. Является $_POST['add'] доступно в "newsletter.php"?
  2. Правильно ли установлено соединение с MySQL в "newsletter.php"?
  3. Есть ли какая-либо проблема с JavaScript, из-за которой запрос POST не отправляется вообще или может быть отправлен с пустым адресом электронной почты?

Надеюсь это поможет!

Другие вопросы по тегам