【问题标题】:ajax and php updating mysqlajax 和 php 更新 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"])。它说什么?

标签: php jquery mysql ajax database


【解决方案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);">链接
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2016-09-12
    相关资源
    最近更新 更多