首页 > 解决方案 > 递增一个 int,但同时有多个用户

问题描述

我正在设置一个小网站,应该计算有多少人进入一个房间。如果有人进入房间,经理点击“+”按钮,值加 1。“-”按钮也可用。我已经使用 JQuery 完成了它,但它仅适用于网站上的 1 个活跃用户。我想知道如何同时适应多个用户,如果至少有可能的话......所有用户都应该可以实时访问该号码,也许PHP可以解决这个问题?

$(document).ready(function(){

var compteur = 0;
const min = 0;
const max = 1200;

$("#resultat").attr('value', compteur);

$('#increase').click(function(){
  if(compteur < max){
    ++compteur;
    $("#resultat").attr('value', compteur);
  }

  if(compteur > max){
    alert("Nombre maximum de personnes atteint !");
  }
});

$('#decrease').click(function(){
  if(compteur > 0){
    --compteur;
    $("#resultat").attr('value', compteur);
  }

  if(compteur < min){
    alert('Impossible de descendre en dessous de 0 personne');
  }
});
});

标签: javascriptphp

解决方案


您是对的,您确实需要一种服务器端语言(PHP 或您喜欢的任何语言)以及您的 javascript 代码段。为此,您需要将活动用户的数量存储在服务器上的某个位置。也许是一个数据库,或者如果它只是要计算用户,您可以将它存储在一个文件中(这将需要您实现锁定文件,以便没有两个用户读取相同的值并更改它)。

在 PHP 中,你会做这样的事情:

更新了代码,以防止数据竞争。

创建文件counter.php;将它放在您的 html 文件旁边。代码会有点像这样:

<?php
// counter.php

// Increment
if (isset($_POST['increment']))
{
    // Increment in your database
    // UPDATE online_users SET users = users + 1
}

// Decrement
else if (isset($_POST['decrement']))
{
    // Decrement in your database
    // UPDATE online_users SET users = users - 1
}

else if (isset($_GET['onlineusers']))
{
    // Read from your database and output
    // SELECT users FROM online_users
}

?>

然后在您的 jQuery 代码中,您可以简单地向该文件发出 POST 请求,以增加或减少文件中的用户数。

增量:

jQuery.post("counter.php?increment");

减量:

jQuery.post("counter.php?decrement");

获取当前活跃用户:

jQuery.get("counter.php?onlineusers", function(numusers) {
    compteur = numusers;
    $("#resultat").attr('value', compteur);
});

注意:确保在增加或减少之前检查 counter.php 文件中的 MAX 和 MIN 用户条件!我没有这样做:P


推荐阅读