【问题标题】:How to increment value in database?如何增加数据库中的值?
【发布时间】:2015-11-04 04:59:06
【问题描述】:

我有一个名为 Stats 的表。 Stats 有 4 列:id、ip、count 和 date。 count 是该 ip 点击我网站上的广告的点击次数。每次用户点击广告时,他们的计数将增加 1。如何将他们的计数增加 1 并在数据库中更新?这是我的代码,由于某种原因它不起作用。当我单击 div 时,它不会刷新......所以整个代码块都没有执行。请注意,当他们进入我的网站时,我已经捕获了用户的 ip,这是如果他们点击我的广告,计数会增加并在数据库中更新的部分。

<script>
    $(document).ready(function()
    {
        $("#ad").click(function()
        {
            <?php
                $queryTot = "SELECT `count` AS total FROM Stats WHERE ip = '$ip'";
                $resultTot = $db->query($queryTot);
                $data = $resultTot->fetch_assoc();
                $count = $data["total"] + 1;
                $insert = $db->prepare("UPDATE Stats(count) WHERE ip = '$ip' VALUES(?)");
                $insert->bind_param('i', $count);
                $insert->execute();
                $insert->close();
            ?>
            location.reload();
        })
    })

</script>

【问题讨论】:

  • 你使用准备好的 stmts 很好。但你还是不及格。所有变量都应参数化,包括 IP。
  • 哇哦,从哪里开始?我可以先说混合 php 和 javascript 是不好的做法。但是,不仅如此.. 你的代码不会像它写的那样工作。改为使用 AJAX 请求在后台更新数据库。
  • 我还不得不说这个问题可能与Basic PHP and AJAX重复

标签: php jquery mysql


【解决方案1】:

您的回答中有很多要点需要考虑。

但很可能您应该使用AJAX 解决方案来执行此操作,并避免在您的 HTML 页面中进行每个 SQL 查询,因为根据 basic security and code maintenance POVs 的说法,将 SQL 查询保留在那里绝对不是一个好的做法。

在不知道你的项目结构,甚至你的想法的情况下,不可能在这里正确地重写你的代码,你必须把这个答案作为一个重要的起点。

基本上,您必须在服务器端应用程序中定义一个返回纯数据的方法,例如JSON 格式,然后使用 AJAX 根据事件(例如单击)访问此方法,接收它的响应并修改您的客户端,可能使用 jQuery 和 JS。

希望这个回答对你有帮助。

【讨论】:

  • 那么如果我使用 AJAX,会不会是修改我的数据库的那个?
  • 是的,您将创建一个用于访问 PHP 方法的 AJAX,通过带有您在 AJAX 中定义的参数的 URL。然后,服务器端的这个方法将修改您的数据库并为您带来 AJAX(客户端)的响应。在这里举个例子:jsfiddle.net/danmana/y6XgY,别忘了选择我的答案(;
  • 有一个完整的例子,A​​JAX + PHP + MySQL w3schools.com/php/php_ajax_database.asp
  • 上面的例子展示了一个纯AJAX,但是你可以通过jQuery使用AJAX,恕我直言,这更友好。再举一个例子:sitepoint.com/demos/ajax
  • 我不得不说:这个问题可能与stackoverflow.com/questions/5298401/basic-php-and-ajax重复(:
【解决方案2】:

我为您编写了一个简短的示例,您可以继续在此基础上完成您需要的工作。这是基本思想。

HTML

<input type="hidden" id="ip" value="<?php echo $_SERVER['REMOTE_ADDR'];?>"/>

jQuery

var ip = $('#ip').val();

$(document).ready(function(){
   $('#ad').on('click',function(){
      $.ajax({
          type: 'POST',
          url: 'ajaxUpdateDatabase.php',
          data: 'ip='+ ip,
          success: function(response){
              console.log(response)
              //send the user to the ad's page here for example
              //you could use location.href='url-to-add-here';
              //or if you really want to reload the page for a reason I fail to understand, use location.reload();
              }
          });
      });
   });

PHP (ajaxUpdateDatabase.php)

//please note that using UPDATE requires that there is previously an entry with this IP address.
//example using PDO... 

$sql = 'SELECT * FROM stats WHERE ip = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute(array($_POST['ip']));

if($stmt -> rowCount() > 0){
    $sql = 'UPDATE stats SET count = count + 1 WHERE ip = ?';
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array($_POST['ip']));
    }
else{
    //ip-address was not found in the database
    //insert query goes here
    }

【讨论】:

  • 如果我一开始就已经获得了用户的 ip 并检查他们是否已经在数据库中。我需要写第一部分吗?另外,成功后我可以使用 location.reload() 刷新页面吗?
  • 当然,如果您已经拥有用户的 IP,我上面提到的代码应该可以工作。我建议在文件 ajaxUpdateDatabase.php 中编写一个小控件来检查 IP 是否存在然后更新。如果它不存在,则插入它。请注意,带有查询的 PHP 文件与 HTML 和 jQuery 所在的文件不同。为什么要刷新页面?不应该将用户发送到广告位置吗? AJAX 请求在后台运行,不需要为更新数据库而刷新页面。
  • 我希望页面刷新的原因是因为我正在尝试制作一个捕获用户IP地址的系统,检查他们在数据库中的点击次数。如果点击次数超过 1,则不会展示广告。如果没有,将显示广告。因此,当用户点击广告时,页面会刷新以检查点击次数是否 > 1。如果不是,则会显示广告。所以基本上是一个防止点击轰炸的系统。我已经做了4天了,我不知道如何正确实施它......
  • 好吧,在这种情况下,您的逻辑不正确。为什么不只是在页面上循环/显示广告时进行检查?我展示的代码示例将简单地将现有 IP 地址的计数增加 1.. 或以平滑的方式为新 IP 地址添加新条目。
  • 我的代码已经检查了 ip 并检查了计数,它在 php 中运行良好。我唯一的问题是当用户点击我的广告所在的 div 时增加计数并更新数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多