ajax 和 php 更新 mysql
Posted
技术标签:
【中文标题】ajax 和 php 更新 mysql【英文标题】:ajax and php updating mysql 【发布时间】:2012-04-13 07:03:19 【问题描述】:我在更新数据库时遇到问题。
基本上我想做的是每次点击下载链接时,数据库中的下载计数都会增加。
有人能指出我正确的方向吗,因为我已经尝试了好几个小时:(
这里是html。
<div class="button_border_dark"> <a id="linkcounter" href="http://www.derby-web-design-agency.co.uk/freeby-download/<?php echo $freebies_download ; ?>" target="_blank" title="Download">Click To Download File</a></div>
这里是jquery
<script>
$('#linkcounter').bind('click',function()
$.post("downloadcount.php", linkid: <?php echo $id ; ?>);
);
</script>
这是我也尝试发布数据的downloadcount.php,因此它会更新内容。
<?php
require_once("applications/constants/connection.php");
require_once("applications/controllers/basic.php");
if(isset($_REQUEST["linkid"]))
$linkid = sanitise($_POST["linkid"]);
$updatedownload = mysql_query("UPDATE freebies SET download_count=`download_count` +1 WHERE id ='".$linkid."'") OR die(mysql_error());
【问题讨论】:
您有任何错误吗?控制台对请求说了什么? @Topener 我得到的唯一错误是 event.layerX 和 event.layerY 在 WebKit 中被破坏和弃用。它们将在不久的将来从引擎中移除。但我不认为这是相关的 好的,你需要开始转储变量以确定你的程序在什么时候中断。 var_dump( $_POST ) 在您的 downloadcount.php 中。我的猜测是您的查询正在中断。此外,您在查询中引用了您的 id 值。我打赌你应该把它当作一个整数。转储,让我知道它在说什么......您的浏览器开发工具中的响应是什么?它会吐出任何东西吗? @MatthewBlancarte 没有错误返回。 mysql_query 中的单引号是反引号,这是在 sql 查询中调用列时 sql 查询的好习惯,以防我在没有反引号的情况下尝试过,但仍然没有乐趣。我认为它甚至不承认该链接已被点击。因为它不会在日志中吐出任何错误。 var_dump($_POST["linkid"])。它说什么? 【参考方案1】:你不说是什么问题!
不是递增吗?增加太多了吗?一个进程是否阻塞了另一个进程?问题是人们可以作弊并让一个文件被下载一百万次?
无论如何,我认为你的代码可以更简单。
$('#linkcounter').click(function()
$("#invisibleiframe").attr("src",$(this).attr("src");
$.post("downloadcount.php", linkid: <?php echo $id ; ?>);
return false;
);
这需要创建一个不可见的 iframe,这将是下载文件的那个。开始此下载后,将发出 ajax 请求。一个单一的事件做两件事。如果js被禁用,这样的东西仍然可以工作。
【讨论】:
你还是不说问题出在哪里,所以我们随便找个东西,希望能靠运气解决问题。【参考方案2】:我认为应该是
$updatedownload = mysql_query("UPDATE freebies SET download_count= download_count +1 WHERE id ='".$linkid."'") OR die(mysql_error());
注意单引号:
SET download_count = download_count +1
【讨论】:
Kait Wee - 不一样吗?【参考方案3】:首先我个人不会混合使用 jQuery 和 PHP,这可能是你问题的根源,我会尝试这样的方法
<div class="button_border_dark" theLinkId="<?php echo $id ; ?>">
<a id="linkcounter" href="http://yourURL/" target="_blank" title="Download">
Click To Download File
</a>
</div>
有了这样的jQuery
<script>
$('#linkcounter').bind('click',function()
var theLinkId = $(this).parent().attr('theLinkId');
$.post("downloadcount.php", linkid : theLinkId);
);
</script>
【讨论】:
感谢您的输入,我刚刚尝试了您的代码,但仍然不满意:( 如果你还没有 FireBug,我会得到它并将 jQuery 更改为类似的东西。$.ajax( type: "POST", url: "downloadcount.php", data: "linkid=theLinkId").done(function( msg ) console.log(msg); );
如果你幸运的话,它仍然会输出一些由于某种原因被隐藏的错误。跨度>
您还尝试过删除if(isset($_REQUEST["linkid"]))
或将sql 设置为不依赖于POST 数据的东西,例如"UPDATE freebies SET download_count=10 WHERE id=5"
.. 我只是在复制/粘贴时注意到您有id ='".$linkid."'
如果 id 是一个 int 那么我认为它应该是 id='.$linkid.'
【参考方案4】:
您的事件可能实际上并未绑定到锚点,因为您在锚点存在之前运行.bind()
。试试这个:
<script>
$(document).ready(function()
$('#linkcounter').bind('click',function()
$.post("downloadcount.php", linkid: <?php echo $id ; ?>);
);
)
</script>
【讨论】:
【参考方案5】:你有多少个 id = 'linkcounter' 的锚点?
如果你有多个,我建议你将'id'更改为'class'
伟大的。
编辑:
试试这样的:
<a href="http://www.google.cl" onclick="goToLink(this, 1);">Link</a>
<script type="text/javascript">
function goToLink(o, id)
$.post("downloadcounter.php",
linkid : id,
function ()
window.open($(this).attr("href"));
);
return false;
</script>
【讨论】:
一个页面上永远只有 1 个 google.cl" onclick="goToLink(this, 1);">链接 google2.cl" onclick="goToLink(this, 2);">链接以上是关于ajax 和 php 更新 mysql的主要内容,如果未能解决你的问题,请参考以下文章
复选框状态更改时如何更新mysql字段?使用 jquery (ajax)、php 和 mysql