Как запустить PHP в фоновом режиме, используя JavaScript - PullRequest
0 голосов
/ 10 марта 2011

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

PD вот код, который у меня есть:

user.php

  <head>
    ........

    <!--                       Javascripts                       -->

    <!-- jQuery -->
    <script type="text/javascript" src="resources/scripts/jquery-1.3.2.min.js"></script>



    <script type="text/javascript" src="resources/scripts/newuser.form_jquery.js"></script>

    </head>

    <body>
      ...................................
          ......................................
                   ......................................

            <form action="" id="newuserform" method="post">
                <h4>New user</h4>
                <br /><br />

                <fieldset class="column-left">                  
                    <p>
                        <label>Email</label>
                        <input class="text-input medium-input" type="text" id="email" name="email" />

                        <br />
                    </p>

                    <p>
                        <label>First name</label>
                        <input class="text-input medium-input" type="text" id="fname" name="fname" />

                        <br />
                    </p>                    
                </fieldset>

                <fieldset class="column-right">
                    <p>
                        <label>Password</label>
                        <input class="text-input medium-input" type="password" id="pwd" name="pwd" />

                        <br />
                    </p>

                    <p>
                        <label>Last Name</label>
                        <input class="text-input medium-input" type="text" id="lname" name="lname" />

                        <br />
                    </p>
                </fieldset>             
                    <p>
                        <input class="button" type="button" value="Create" id = "submit_btn"/>
                    </p>
                <div id="errormsg" class="notification error png_bg">
                    <div>
                        Invalid login, please check your username and password!
                    </div>
                </div>
            </form>
                 </body>

newuser.form_jquery.js

   $(document).ready(function() {
    $("#errormsg").hide();
     $("#newuserform").keypress(function(e){
    if(e.which == 13){
        $("#errormsg").hide();
        jQuery('#submit_btn').focus().click();
        e.preventDefault();
        return false;
    }
});


$("#submit_butn").click( function() {


    var e = '#email';
    var p = '#pwd';
    var f = '#fname';
    var l = '#lname';

    var _e = $(e).val();
    var _p = $(p).val();
    var _f = $(f).val();
    var _l = $(l).val();


    var postFile = 'application/post.newuser.php';
    var dataurl = 'users';

    $.post(postFile, { e: _e, p: _p, f: _f, l: _l}, function(data) {
        if(data.status==true){
            window.location=dataurl;
        } else {

            $("#errormsg").show();

        }
    }

    ,'json');

});

    });

post.newuser.php *

    public function newuser($e, $p, $f, $l)
{
    //e: email, p: password, f: first_name, l: last_name

    $return = false;

    $sql = "INSERT INTO users (email, password, first_name, last_name, role, enabled)";
    $sql .= " VALUES (";
    $sql .= "'".$e."', ";
    $sql .= "'".SHA1($p)."', ";
    $sql .= "'".$f."', ";
    $sql .= "'".$l."', ";
    $sql .= "'2', ";
    $sql .= "'1' ";
    $sql .= ")";

    $mysql = new mysql();
    $mysql->connect();
    $q = $mysql->queryin($sql);

    if ($q)
    {
        $return = true;
    } 

    $mysql->end(); 

    return $return;

}

Извините за длинный пост.

Ответы [ 4 ]

1 голос
/ 10 марта 2011

Причина, по которой страница обновляется до самого себя, заключается в том, что вы не прекращаете поведение формы отправки по умолчанию в браузере. Вот что я бы порекомендовал сделать.

$("#newuserform").submit(function(event) {
// handle processing

// stop the form from submitting since you used Ajax to submit
 event.preventDefault(); 
});

И я бы посоветовал связать свой код JS с методом отправки, а не с щелчком мыши.

Кроме того, хотя вы хорошо хэшируете сохраненные пароли, вы широко открыты для SQL-инъекций . mysql_real_escape_string () ваш друг. :)

1 голос
/ 10 марта 2011

Если вы хотите что-то сделать в фоновом режиме, вы должны использовать AJAX, чтобы объект XMLHttpRequest из JavaScript был вам полезен.Вы должны восстановить то, что вы уже должны использовать AJAX.Это довольно просто.перейдите к http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp и прочитайте, что там.Вам понадобится около 10 минут, чтобы понять.

0 голосов
/ 10 марта 2011

попробуй ajax // в PHP делать то, что вы хотите сделать, и вернуть значение в виде json_decode ($ yourvariable) // все, что делает json_decode - это преобразовывает ваш вывод в формат массива. так что функция ниже может прочитать это.

$.get("ajax.php", { id: hash }, //equivalent to ajax.php?id=hash

function(out)
{

}, "json");

проверить, как я использовал это на моем сайте: http://iadprint.com/products?product=product%201 (просмотреть источник и прокрутить вниз)

0 голосов
/ 10 марта 2011

Если вы хотите отправить информацию в базу данных и перезагрузить страницу, вам не нужен JavaScript. Просто добавьте оператор if в документ PHP, чтобы увидеть, установлен ли $ _POST [], и убедитесь, что вы отправляете данные на текущую страницу через атрибут action.

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