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

用 jQuery/AJAX 更新 MYSQL

使用AJAX,MySQL和PHP添加,删除,更新[重复]

AJAX PHP MYSQL 更新/编辑记录 (jQuery)

PHP / MySQL / AJAX - 更新多个数据

使用 Ajax、PHP、MYSQL 更新表单