Функция PHP не может читать данные JQuery POST? - PullRequest
0 голосов
/ 09 мая 2011

Хорошо, у меня есть эта функция

<?php

/**
 * @author Mitchell A. Murphy
 * @copyright 2011
 */
include ('func_lib.php');
connect();
echo (check($_POST['input']) ? 'true' : 'false');
function check($args)
{
    $args = strtolower($args);
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i";
    if (preg_match($checkemail, $args))
    {
        //logic for email argument
        $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'";
        $res = mysql_query($sql) or die(mysql_error());
        echo "type=email:";
        if (mysql_num_rows($res) > 0)
        {
            return true;
        } else
        {
            return false;
        }
    } else
    {
        //logic for username argument
        $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'";
        $res = mysql_query($sql) or die(mysql_error());
        echo "type=username:";
        if (mysql_num_rows($res) > 0)
        {
            return true;
        } else
        {
            return false;
        }
    }

}

?>

Функция должна быть доступна для этого скрипта jquery:

$('form.register .submit').click(validateRegister);

function validateRegister() {

    //Variables
    var emailExists = false;
    var userExists = false;
    var $error = "";

    //Executes functions
    email();


    function email() {
        var $error = $('#email .error');
        var input = $('#email input').val();
        var emailRE = /^.*@.+\..{2,5}$/;
        if (input.match(emailRE)) {
            $error
                .html('<div>Proper Email Format: <span>Hello@Yoursite.com</span></div>')
                .animate({
                'left': '-130px',
                'opacity': '0'
            });

            //Checks for Existing Email

            function checkExisting_email() {
                $.ajax({
                    type: 'POST',
                    url: 'includes/checkExist.php',
                    data: input,
                    statusCode: {
                        404: function () {
                            alert('page not found');
                        }
                    },

                    success: function (data) {
                        alert(data);
                    },
                    error: function () {
                        alert("error bro");
                    }
                });

            }
            emailExists = checkExisting_email();

            //If it exists
            if (emailExists) {
                alert("This email already exists!");
            } else if (emailExists == false) {
                alert("Email doesnt exist!");
            }

        } else {
            //Email doesn't match
            $error
                .html('<div>Proper Email Format: <span>Hello@Yoursite.com</span></div>')
                .animate({
                'left': '-150px',
                'opacity': '1'
            });
        }
    }
    return false;
}

Но по какой-то причине скрипт (js) не отправляет никаких данных? если так, как я могу ссылаться на него? Я бэкэнд-разработчик, но дизайнер, который сделал javascript, оставил меня, чтобы это исправить. Я знаю, что PHP работает, потому что я сделал тестовую форму для отправки данных с этой разметкой HTML:

<form action="includes/checkExist.php" method="post">
<input type="text" name="input" />
<input type="submit" name="submit" />
</form>

И это работает ... так почему входные данные из jquery возвращаются как NULL?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Вам необходимо передать пару ключ / значение для «данных», а не только для значения.

Как и раньше, ваша форма будет опубликована с строкой запроса, похожей на эту:

target.php?asdf@hotmail.com

это должно быть:

data: {input: input},

Это установит строку запроса следующим образом:

target.php?input=asdf@hotmail.com

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

 var input = $('#email').val();
1 голос
/ 09 мая 2011

Обратите внимание, что checkExisting_email() ничего не возвращает, поэтому emailExists = checkExisting_email(); не установит emailExists. Эти данные будут предоставлены только для функции обратного вызова, которая сегодня отображает результат только для alert().

Чтобы упростить задачу, используйте поле проверки jQuery ajax remote. Проверьте документацию и образец .

.
...