我最初将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>
任何帮助将不胜感激!
答案 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
}
}