Php 如何在数据库中增值?

Php 如何在数据库中增值?,php,jquery,mysql,Php,Jquery,Mysql,我有一张叫做Stats的表。Stats有4列:id、ip、count和date。count是ip在我的网站上点击广告的次数。每次用户点击一个广告,他们的数量就会增加1。如何将它们的计数增加1并在数据库中更新?这是我的代码,它不工作的原因。当我单击div时,它不会刷新…因此整个代码块都不会执行。请注意,当用户进入我的站点时,我已经捕获了他们的ip,这是如果他们单击我的广告,则计数将增加并在数据库中更新的部分 <script> $(document).ready(function

我有一张叫做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>

$(文档).ready(函数()
{
$(“#ad”)。单击(函数()
{

在你的回答中有很多要点要考虑。

但很可能您应该使用一种解决方案来实现这一点,并避免HTML页面中的每一个SQL查询,因为保留SQL查询显然不是一种好的做法

在不了解项目结构甚至想法的情况下,在这里正确地重新编写代码是不可能的,您必须将这个答案作为一个重要的起点

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


我希望这个答案能对你有所帮助。

我已经为你写了一个简短的例子,你可以继续在此基础上完成你所需要的。以下是基本想法

HTML

PHP(ajaxUpdateDatabase.PHP)


很好,你使用准备好的STMT。但是你没有做到这一点。所有变量都应该参数化,包括IP。哦,哇,从哪里开始?我可以说混合使用php和javascript是不好的做法。但是,不仅如此。你的代码无法按照编写的方式工作。在后台使用AJAX请求更新数据库und。我还必须说,这个问题可能与重复,所以如果我使用AJAX,它是否会修改我的数据库?是的,您将创建一个AJAX,通过在AJAX中定义参数的URL访问PHP方法。然后,服务器端的此方法将修改您的DB,并为您带来一个响应AJAX(客户端).举个例子:别忘了选择我的答案(;这里有一个完整的AJAX+PHP+MySQL示例上面的示例显示了一个纯AJAX,但是您可以通过jQuery使用AJAX,这对IMHO来说更友好。再举一个例子:我不得不说:这个问题可能与(:如果我在开始时已获取用户的I.p并检查它们是否已在数据库中,该怎么办。我是否需要编写第一部分?此外,如果成功,我可以使用location.reload()刷新页面?当然,如果您已经有了用户的IP,那么我上面提到的代码应该会运行。我建议在文件ajaxUpdateDatabase.php中编写一个小控件,检查IP是否存在,然后进行更新。如果不存在,则插入它。请注意,带有查询的php文件与HTML和jQuery所在的文件不同。Wh你想刷新页面吗?用户不应该被发送到广告位置吗?AJAX请求在后台运行,不需要刷新页面来更新数据库。我想刷新页面的原因是因为我试图创建一个系统,在该系统中捕获用户的ip地址,检查他们的点击计数数据库。如果点击次数超过1,则不会显示广告。如果没有,则会显示广告。因此,当用户点击广告时,页面会刷新以检查点击次数是否大于1。如果不是,则会显示广告。因此,基本上是一个防点击轰炸的系统。我已经做了4天了,不知道如何实现如果是这样的话,那么你的逻辑就不对了。为什么不在页面上循环显示广告时进行检查呢?我展示的代码示例只会将现有IP地址的计数增加1..或者以平滑的方式为新IP地址添加一个新条目。我的代码已经检查了IP并检查了计数编号,我唯一的问题是当用户单击我的广告所在的div时,增加计数并更新数据库。
<input type="hidden" id="ip" value="<?php echo $_SERVER['REMOTE_ADDR'];?>"/>
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();
              }
          });
      });
   });
//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
    }