【问题标题】:How to run PHP in the background using JavaScript如何使用 JavaScript 在后台运行 PHP
【发布时间】:2011-03-10 06:18:10
【问题描述】:

我正在尝试将 php 表单提交到数据库,但我希望当我单击提交按钮时页面会自行刷新(无需转到我要提交的 php 页面)。我知道我必须使用 JS 来做到这一点,并且我尝试了很多不同的方法,但都没有成功。我正在使用三个文件,一个用于表单,一个用于 JS,最后一个用于将数据发布到数据库中。我是 php 和 JS 的新手,非常欢迎任何帮助,谢谢。

这里是我到目前为止的代码:

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;

}

抱歉,帖子太长了。

【问题讨论】:

    标签: php javascript mysql html forms


    【解决方案1】:

    当您想在后台做某事时,您必须使用 AJAX,因此来自 JavaScript 的 XMLHttpRequest 对象将为您提供更好的服务。你必须重建你已经使用 AJAX 的东西。这很简单。 转到http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp 并阅读那里的内容。大约需要 10 分钟才能理解。

    【讨论】:

      【解决方案2】:

      页面刷新到自身的原因是因为您没有停止浏览器提交表单的默认行为。这是我建议做的事情。

      $("#newuserform").submit(function(event) {
      // handle processing
      
      // stop the form from submitting since you used Ajax to submit
       event.preventDefault(); 
      });
      

      我认为将 JS 代码绑定到提交方法而不是单击是更好的编码实践。

      此外,虽然您对保存的密码进行哈希处理很好,但您对SQL Injections 持开放态度。 mysql_real_escape_string() 是你的朋友。 :)

      【讨论】:

        【解决方案3】:

        如果您想将信息发送到数据库并重新加载页面,则不需要 JavaScript。只需在 PHP 文档中添加 if 语句,查看是否设置了 $_POST[] 并确保通过 . 的 action 属性将数据提交到当前页面。

        【讨论】:

        • 嗯?为什么你会推荐 md5() 而不是 sha1()?
        • 这是一场旷日持久的辩论。我不会详述。但是你绝对应该在散列密码之前给密码加盐。我可以引导你到好的 ole Wikipedia 吗? en.wikipedia.org/wiki/Salt_(cryptography)
        • MD5 是一种比 SHA-1 更弱的加密算法。这只是事实,没有什么可争论的。它们都坏了,反正没有盐也没用。我很好奇为什么你会推荐一个较弱的算法,而不是bcrypt 或其他什么。
        • 嗯。我想我盲目地接受了我被告知的内容。有人告诉我 md5() 比 sha1() 好。通过快速的谷歌搜索,我发现我错了。哈哈。谢谢你让我意识到这一点。 :) 已编辑。
        【解决方案4】:

        试试 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 (查看源代码并滚动到底部)

        【讨论】:

          猜你喜欢
          • 2016-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多