Почему эта форма регистрации ajax MySQL вставки работает в Chrome и Safari, но не Firefox? - PullRequest
0 голосов
/ 11 марта 2012

Я настраиваю страницу регистрации пользователя.Он работает в Chrome и Safari, но не в Firefox (последние версии Mac).Я работаю локально над MAMP.

Ожидаемый результат:

  • Запрос Ajax отправляется после нажатия кнопки подтверждения.
  • Если имя пользователя доступно, пользователь, пароль, адрес электронной почты вставляются в таблицу MySQL.Успех: скрытый div «Вы зарегистрированы».
  • Иное, скрытый div «Имя пользователя недоступно»

Реальный вывод:

  • Вывод соответствует ожидаемому в Chrome и Safari.

  • В Firefox в таблицу ничего не вставляется.Скрытые элементы не отображаются, вместо этого вся веб-страница перезагружается.

Почему приведенный ниже код дает такие разные результаты?

Javascript

$(function() {
    $("#registersubmit").click(function() {
        var dataString = $("#registerclick").serialize();

        if (registerclick.user.value == "")
        {
            $('.error').show();
            registerclick.user.focus();
            return (false);
        }
        else
        {
            $.ajax({
                type: "POST",
                url: "register.php",
                data: dataString,
                success: function(reg) {
                    if (!reg)
                    {
                        $('.userexists').hide();
                        $('.error').hide();
                        $('.success').fadeOut(200).show();
                    }
                    else
                    {
                        $('.userexists').show();
                    }
                }
            });
        }
        return false;
    });
});

PHP для MYSQL Insert

$user = ($_POST['user']);
$email = ($_POST['email']);
$time = time();
$password = ($_POST['password']);

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    include("config.php");

    $sql = "INSERT INTO users (username, password, email,timestamp) VALUES ('".mysql_real_escape_string($user)."','".mysql_real_escape_string($password)."', '".mysql_real_escape_string($email)."', '$time')";

    $result = mysql_query($sql);
    if (!$result)
    {
        die(mysql_error());
    }
}

Предположим, что шифрование пароля и меры предосторожности при выходе из MySQLбыло сделано.

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Проблема была с

if (registerclick.user.value == "")

Firefox, очевидно, не может справиться с этим по причинам, которые я не знаю.Поэтому я заменил его на

if (document.registerclick.user.value.length == "")

, и теперь оно работает!

0 голосов
/ 11 марта 2012

Поскольку проблемы заключаются только в клиентской части, вам необходимо проверить код клиента.Установите firebug для firefox и отладьте то, что сломано в FF.

Хотя, я могу дать вам одну идею только с головы до головы.В последних версиях Firefox (начиная с версии 7 th или 8 th ) элементы с некоторыми значениями id автоматически не отображаются в глобальных переменных с одинаковыми именами., вы сами не объявили registerclick переменную.

Поэтому вам нужно либо объявить эту переменную:

var registerclick = $('#registerclick').get(0);

, либо заменить registerclick в своем коде на forms.registerclick илинесколько ... во всяком случае, я надеюсь, вы поняли идею.

PS: Хе-хе, читать комментарии.В любом случае, я оставлю свой ответ.

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