Проблема с отправкой данных в PHP в форме регистра AJAX - PullRequest
0 голосов
/ 28 июля 2011

Я новичок в AJAX и создаю регистрационную форму, которая отправляет данные с использованием AJAX. Я следовал руководству, которое проверяет, что поля ввода не пусты, а затем отправляет значения в файл PHP и сохраняет их в базе данных ... и это работает. Но я также пытаюсь интегрировать дополнительный скрипт, чтобы проверить, занято ли имя пользователя.

Если я использую -only- скрипт для проверки доступности имени пользователя, без учебника, он работает как шарм. Но проблема в том, когда я пытаюсь объединить оба сценария. Может ли кто-нибудь помочь мне, указав на мои ошибки? Я перепробовал много вещей, и они заставляют работать только части всего сценария, но не все.

Вот модель учебного рабочего скрипта:

$(function() {
$('.error').hide();
$(".button").click(function() {
    // validate and process form
    // first hide any error messages
$('.error').hide();

  var name = $("input#name").val();
    if (name == "") {
  $("label#name_error").show();
  $("input#name").focus();
  return false;
}
    var email = $("input#email").val();
    if (email == "") {
  $("label#email_error").show();
  $("input#email").focus();
  return false;
}
    var phone = $("input#phone").val();
    if (phone == "") {
  $("label#phone_error").show();
  $("input#phone").focus();
  return false;
}

    var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone;
    //alert (dataString);return false;

    $.ajax({
  type: "POST",
  url: "bin/process.php",
  data: dataString,
  success: function() {
    $('#contact_form').html("<div id='message'></div>");
    $('#message').html("<h2>Contact Form Submitted!</h2>")
    .append("<p>We will be in touch soon.</p>")
    .hide()
    .fadeIn(1500, function() {
      $('#message').append("<img id='checkmark' src='images/check.png' />");
    });
  }
 });
return false;
});
});

Вот мой рабочий код проверки имени пользователя:

  $(function() {
$('.error').hide();

$(".button").click(function() {
$('.error').hide();
  // validate and process form here

var checkdata = username ['value'];
//alert ("usuario guardado =" + checkdata);

$.get("usernameCheck.php", { username: checkdata },
 function(data){
 //alert("Data Loaded: " + data);

    if ( data == 0 )
    {
    $("label#misuser_error").show();
    $("input#username").focus();
    return false;
    }


 });



return false; 


});
});

И вот моя попытка объединить оба:

$(function () {
$('.error').hide();
$(".button").click(function () {
$('.error').hide();
  // validate and process form here
    var flag = 1;
    var username = $("#username").val();
    var password = $(" #password").val();
    var passwordC = $(" #password_confirm").val();
    var type = $(" #type").val();
    var name = $("#firstname").val();
    var lastname = $(" #lastname").val();
    var day = $(" #bdate_day").val();
    var month = $(" #bdate_month").val();
    var year = $(" #bdate_year").val();
    var email = $(" #email").val();
    var country = $(" #country").val();
    var state = $(" #state").val();
    var city = $(" #city").val();
    var payment_email = $(" #payment_email").val();


    if (username == "") {
    $("#username_error").show();
    $("#username").focus();
    return false;
    }
    else {

        if (password == "") {
        $(" #password_error").show();
        $(" #password").focus();
        return false;
        }
        else {

            if (passwordC == "") {
            $(" #password_confirm_error").show();
            $(" #password_confirm").focus();
            return false;
            }
            else {
                if ( password != passwordC ) {
                $(" #password_mismatch_error").show();
                $("#password_confirm").focus();
                return false;
                }
                else {

                    if (type == "") {
                    $(" #type_error").show();
                    $(" #type").focus();
                    return false;
                    }
                    else {

                        if (name == "") {
                        $("#firstname_error").show();
                        $("#firstname").focus();
                        return false;
                        }
                        else {

                            if (lastname == "") {
                            $(" #lastname_error").show();
                            $(" #lastname").focus();
                            return false;
                            }     
                            else {

                                if (day == "") {
                                $(" #bdate_day_error").show();
                                $(" #bdate_day").focus();
                                return false;
                                }    
                                else {

                                    if (month == "") {
                                    $(" #bdate_month_error").show();
                                    $(" #bdate_month").focus();
                                    return false;
                                    }    
                                    else {

                                        if (year == "") {
                                        $(" #bdate_year_error").show();
                                        $(" #bdate_year").focus();
                                        return false;
                                        }    
                                        else {

                                            if (email == "") {
                                            $(" #email_error").show();
                                            $(" #email").focus();
                                            return false;
                                            }    
                                            else {

                                                if (state == "") {
                                                $("#state_error").show();
                                                $(" #state").focus();
                                                return false;
                                                }
                                                else {

                                                    if (city == "") {
                                                    $("#city_error").show();
                                                    $(" #city").focus();
                                                    return false;
                                                    }    
                                                    else {

                                                        if (payment_email == "") {
                                                        $("#payment_email_error").show();
                                                        $(" #payment_email").focus();
                                                        return false;
                                                        }
                                                        else {
                                                                var flag = 1;
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } 


if (flag === 1) {

var checkdata = document.getElementById('username').value;
//alert ("usuario guardado =" + checkdata);

    $.get("usernameCheck.php", { username: checkdata },
        function(data){
            //alert("Data Loaded: " + data);

            if (data === 0) {
            $("label#misuser_error").show();
            $("input#username").focus();
            return false;
            }

    });


}



(function (save) {  
                //alert ("usuario guardado: " + checkdata);
                $.get("insert_user.php", { username: checkdata },
                function(sent){



                ('#userForm').html("<div id='message'></div>");
                  $('#message').html("<h2>Contact Form Submitted!</h2>")
                  .append("<p>We will be in touch soon.</p>")
                  .hide()
                  .fadeIn(1500, function() {
                    $('#message').append("<img id='checkmark' src='images/check.png' />");
                  });


                  });
            return false;   
            }); 



});
});

Есть какие-нибудь мысли, кто-нибудь? Я знаю, что могу делать все неправильно, но я изучаю PHP / Javascript и AJAX только на уроках. Так что помилуй меня.

Заранее большое спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 28 июля 2011

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

  1. при создании вашей "строки данных" попробуйте использовать метод jquery serialize . Также знайте, что вы можете отправить ваши данные как объект , а не как строку. jquery преобразует объект в "? a = b & c = d" для вас.
  2. при проверке не делайте такого рода "если еще, если". Сделайте это способом jquery - используйте плагин или напишите свой собственный. Это сделает ваш код намного проще для чтения
  3. использовать firebug . при возврате ajax console.log ваши возвращенные данные, чтобы узнать, что ваш PHP говорит о вашем запросе.
  4. при выполнении отдельной проверки «имя пользователя доступно» не получайте такую ​​же проверку в «вставить пользователя» - условия гонки случаются, планируйте их.
  5. проверьте ваш синтаксис и проверьте, не вызваны ли ваши методы. Firebug поможет вам и там.
0 голосов
/ 28 июля 2011

Э. Не говоря о вашем запросе AJAX, но лучшие практики обычно говорят, что более 3 вложенных «если» не годятся. Вместо этого используйте что-то вроде этого:

var fields = ['username', 'password', 'password_confirm', ... ];
var length = fields.length;
for (var i=0; i<length; i++) {
  if ($('#' + fields[i]).val() == "") {
    $('#' + fields[i] + '_error').show();
    $('#' + fields[i]).focus();
  }
}

Кроме того, ваши $(".error").hide() на третьей строке бесполезны.

Наконец, я думаю, что неработающая часть - это ваш аноним (function (save).... Эта функция никогда не выполняется. Добавьте (); в конце, чтобы выполнить.

Редактировать: приведенный ниже ответ показывает лучший способ для вашей AJAX-части.

0 голосов
/ 28 июля 2011

Во-первых, я думаю, что вы создаете ненужную головную боль для себя, структурируя свой код проверки таким, какой вы есть.Помните, что return false заставляет выполнение покинуть функцию, поэтому вам не нужна глубоко вложенная структура if-else, которую вы получили.

Вместо этого:

if(test) {
    // fail
} else {
   // second test
}

Использованиечто-то вроде этого

if(test) {
    // fail
}

if(test2) {
   // fail
}

// success

Это безопасно сделать, потому что код «fail», возвращая false, не позволит выполнению достичь кода «success» позже.

Вот модифицированныйверсия вашего скрипта.ПРИМЕЧАНИЕ. Я удалил многие из ваших проверочных проверок, а затем добавил только две проверки, чтобы вы могли увидеть тип шаблона, который я рекомендую;Вы захотите добавить все остальные необходимые тесты.

$(function () {
    $('.error').hide();
    $(".button").click(function () {

        $('.error').hide();

        // validate and process form here
        var flag = 1;
        var username = $("#username").val();
        var password = $(" #password").val();
        var passwordC = $(" #password_confirm").val();
        var type = $(" #type").val();
        var name = $("#firstname").val();
        var lastname = $(" #lastname").val();
        var day = $(" #bdate_day").val();
        var month = $(" #bdate_month").val();
        var year = $(" #bdate_year").val();
        var email = $(" #email").val();
        var country = $(" #country").val();
        var state = $(" #state").val();
        var city = $(" #city").val();
        var payment_email = $(" #payment_email").val();

        if(!username.length) {
            $("username_error").show();
            $("username").focus();
            return false;
        }

        if(!password.length) {
            $("#password_error").show();
            $("#password").focus();
            return false;
        }

        // ... other checks
        var checkdata = $("username").val();

        $.get("usernameCheck.php", { username: checkdata }, function(data) {

            if(data === 0) {
                $("label#misuser_error").show();
                $("#username").focus();
                return false;
            }

            // DO SAVE HERE
            $.post("insert_user.php", { username: checkdata }, function(sent){
                ('#userForm').html("<div id='message'></div>");
                $('#message').html("<h2>Contact Form Submitted!</h2>")
                    .append("<p>We will be in touch soon.</p>")
                    .hide()
                    .fadeIn(1500, function() {
                        $('#message').append("<img id='checkmark' src='images/check.png' />");
                    });
                });
        });
    });
});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...