我可以在AJAX帖子请求中有mysql查询吗?

时间:2015-05-20 04:07:41

标签: javascript php jquery mysql ajax

我最初将onreadystatechange函数的内容写为if $_POST[]条件,以便与我的主HTML页面上的隐藏表单进行通信,但我在刷新页面方面遇到了问题,所以我试着合并AJAX。现在我的主页在触及此函数时停止运行我的js脚本:

 $('#submitIFC').click(function(e) {

 var request;

 if (window.XMLHttpRequest) {
  request = new XMLHttpRequest();
 } else {
  request = new ActiveXObject("Microsoft.XMLHTTP");
 }

 request.onreadystatechange = function() {

    if ((request.readyState===4) &&(request.status===200))  {

    $Opinion= $('ul.sort').sortable('toArray').join(',');

                // The data arrives as a comma-separated string,
        // so we extract each post ids:

        $data=explode(',',str_replace('li','',$Opinion));

        // Getting the number of objects
        list($tot_objects) = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM sort_objects"));

        if(count($data)!=$tot_objects) die("Wrong data!");

        foreach($data as $k=>$v)
        {
            // Building the sql query:
            $str[]='('.(int)$v.','.($tot_objects-$k).')';
        }

        $str = 'VALUES'.join(',',$str);

        // This will limit voting to once a day per IP:
        mysql_query("   INSERT INTO `sort_votes` (ip,date_submit,dt_submit,Opinion)
                        VALUES ('".$_SERVER['REMOTE_ADDR']."',NOW(),NOW())",'$Opinion');

        //  If the user has not voted before today:
        if(mysql_affected_rows($link)==1)
        {
            mysql_query('   INSERT INTO `sort_objects` (id,votes) '.$str.'
                            ON DUPLICATE KEY UPDATE votes = votes+VALUES(votes)');
        }

    e.preventDefault();
    }//end of if
    }//end of onreadystatechange function    


//asynchronously send vote to php file which will send to the server
request.open("POST", "connect.php", true);
request.send();
});

如果它有助于提高清晰度,我的HTML中的此按钮会触发此功能:

    <div class="button-holder">
       <?php if(!$voted):?><a href="" id="submitPHC" class="button">Submit Poll<span></span></a><?php endif;?>
        <a href="?results" class="button">View The Results<span></span></a>
     </div>

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

在您的代码的第一部分中,您混合了客户端代码,即javascript和服务器端代码,即php。那两个不同时运行。根据你的问题标题,为什么有人会通过前端发送mysql查询来提供代码中的安全循环。使用mysqli_ *而不是mysql_ *。从前端到后端运行代码发送请求,然后运行sql查询。

答案 1 :(得分:0)

分离客户端代码和服务器代码。

数据库交互应严格在服务器端,以便客户端无法看到它。

第1步。 使用javascript / jquery收集服务器所需的信息,并使用ajax将其发送到服务器。使用ajax的成功:函数(数据)执行服务器完成后所需的操作

第2步: 服务器代码获取信息,并执行所有处理。如果,else,while,insert,update delete。完成后,您可以使用echo json_encode(数组&#39;数据&#39; =&gt;&#39;成功&#39;))将数据返回到您的javascript;或者你希望你的数据是什么

第3步: ajax成功函数接收此信息并按要求更新网页

success: function(data){
    var d = $.parseJSON(data);
    if(d.data === 'success'){
        //update stuff
    }
}