Ajax-форма, PHP-процесс и возврат ошибок, если таковые имеются, если не успех - PullRequest
0 голосов
/ 03 сентября 2011

Я нашел учебник здесь: http://tutorialzine.com/2009/08/creating-a-facebook-like-registration-form-with-jquery/ (пожалуйста, посмотрите)

Это хороший учебник, я следил за всем там и удалял лишние вещи, которые мне не нужны, например, functions.php с generate_function option , так как мне не нужны вещи на день рождения и т. Д.

Все, что мне нужно, это ИМЯ (имя пользователя), EMAIL (электронная почта), Пароль (пароль), когда пользователь нажимает кнопку «РЕГИСТРАЦИЯ» (которая является кнопкой отправки формы), скрипт, полученный из этого руководства, отправит данные передаются в "regprocess.php", который содержит проверочные коды проверки, такие как проверка, являются ли данные отправленной формы пустыми.

Но когда я нажимаю REGISTER, данные не отправляются обратно (сообщение об ошибке) из "regprocess.php" и сообщения об успехе. Когда я проверяю с помощью своего firebug, ответ JSON показывает полный код php, как показано ниже (прокрутите вниз).

Вот мой код: HTML-

<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
</script>
<script type="text/javascript" src="register.js"></script>
    <form id="regForm" action="regprocess.php" method="post">
          <label for="usrname">Name:</label>
          <input id="usrname" name="usrname" type="text" value="" class="nor">
          <label for="email">Email:</label>
          <input id="email" name="email" type="text" value="" class="nor">
          <label for="password">Password:</label>
          <input id="password" name="password" type="password" value="" class="nor">
    <table><tr><td style="width:290px;"><div id="error">&nbsp;</div></td><td><input name="register" type="submit" value="Register" id="regbtn"><center><img id="loading" src="images/load.gif" alt="Registering..." /></center></td></tr></table>
    </form>

Хорошо, скрипт Ajax находится в "register.js" выше.

Ajax-скрипт (register.js) -

$(document).ready(function(){
    $('#regForm').submit(function(e) {
                register();
        e.preventDefault();
        });
});

function register()
{
    hideshow('loading',1); 
        hideshow('regbtn',0);
    error(0);

    $.ajax({
        type: "POST",
        url: "regprocess.php",
        data: $('#regForm').serialize(),
        dataType: "json",
        success: function(msg){

            if(parseInt(msg.status)==1)
            {
                window.location=msg.txt;
            }
            else if(parseInt(msg.status)==0)
            {
                error(1,msg.txt);
            }

            hideshow('loading',0);
                        hideshow('regbtn',1);
        }
    });

}

function hideshow(el,act)
{
    if(act) $('#'+el).css('visibility','visible');
    else $('#'+el).css('visibility','hidden');
}

function error(act,txt)
{
    hideshow('error',act);
    if(txt) $('#error').html(txt);
}

CSS: Regbtn - кнопка отправки, видимость установлена ​​на видимость загрузка отключена ошибка установлена ​​скрытой

Когда пользователь нажимает на Regbtn, видимость загрузки становится видимой, а Regbtn скрывается (видимость: скрытая).

Это делается в скрипте Ajax (register.js).

Хорошо, теперь php: PHP (regprocess.php) -

if(empty($_POST['usrname']) || empty($_POST['email']) || empty($_POST['password']))
{
    die('{status:0,"txt":"Fill in All Fields"}');
}


if(!(preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['email'])))
    die('{status:0,"txt":"Please Provide a Valid Email"}');

echo '{status:1,txt:"registered.html"}';

Это проверяет, являются ли данные имени пользователя, электронной почты и пароля пустыми, если да, возвращает сообщение, которое будет отображаться в сообщении об ошибке (#error в html), а также проверяет, является ли предоставленное сообщение электронной почты действительным.

Если все остальное верно, пользователь будет перенаправлен на istered.html

Но я думаю, что скрипт не может получить сообщение об ошибке от php.

Я надеюсь, что кто-то может мне помочь. Благодарю. Хорошего дня.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Вам нужно разместить php-теги вокруг php-кода, например:

<?php
if(empty($_POST['usrname']) || empty($_POST['email']) || empty($_POST['password']))
{
    die('{status:0,"txt":"Fill in All Fields"}');
}


if(!(preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['email'])))
    die('{status:0,"txt":"Please Provide a Valid Email"}');

echo '{status:1,txt:"registered.html"}';
?>
0 голосов
/ 03 сентября 2011

хм, не слишком много ответа, но в моих формах я отправляю через ajax и помещаю результат со страницы php в родительский бланк формы.ниже плагин в коде.это работает, когда форма является дочерней по отношению к div по умолчанию.

(function($){
$.fn.extend({
//pass the options variable to the function
ajaxForm: function(options) 
{
    //Set the default values, use comma to separate the settings, example:
    var defaults = 
    {
        target: 'div'
    }
    var options =  $.extend(defaults, options);

    return this.each(function() 
    {
        var o=options
        $(this).submit(function(event)
        {
            event.preventDefault();//stop from submiting
            //set needed variables
            var $form = $(this)
            var $div = $form.parent(o.target)
            $url = $form.attr("action");
            //submit via post and put results in div
            $.post( $url, $form.serialize() , function(data) 
            { $div.html(data) })
        })
    });
}
}); 
})(jQuery);

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

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