Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysql和php的Viewcount_Php_Mysql_Hitcounter - Fatal编程技术网

使用mysql和php的Viewcount

使用mysql和php的Viewcount,php,mysql,hitcounter,Php,Mysql,Hitcounter,我有一个带有下拉菜单的表单,它有不同类型的电影,下面是代码: 现在是这样的,当用户第一次进入所说的表单时,我存储他们的ip(存储方式不需要超级安全,所以这就是我这样做的原因) 这就是为什么当更新查询成功执行时,我会再次存储该ip。 更新what does serve有我的视图数,因此我可以知道特定类型的点击次数,但代码的工作方式现在变得毫无用处,因为一个用户可以在一个类型上点击5000万次,这将计算它们。 我想做的是比较第一个ip和第二个ip,如果ip是相同的,做一个查询,减去1到该类型,所以

我有一个带有下拉菜单的表单,它有不同类型的电影,下面是代码:

现在是这样的,当用户第一次进入所说的表单时,我存储他们的ip(存储方式不需要超级安全,所以这就是我这样做的原因)

这就是为什么当更新查询成功执行时,我会再次存储该ip。 更新what does serve有我的视图数,因此我可以知道特定类型的点击次数,但代码的工作方式现在变得毫无用处,因为一个用户可以在一个类型上点击5000万次,这将计算它们。 我想做的是比较第一个ip和第二个ip,如果ip是相同的,做一个查询,减去1到该类型,所以只添加1 这就是我尝试过的

     $contador=$contador+1;
    if (isset($_POST['genero'])) {

        $genero=$_POST['genero'];
        $sql = "UPDATE generos SET visitas=visitas+1 where nombre='$genero'";

        if ($conn->query($sql) === TRUE) {
                 $ip2 = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);

                } else {echo "Error sumando visita: " . $conn->error;}      

                if ($contador>1) {
                     if ($ip2==$ip){
                         $sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
                         if ($conn->query($sql) === TRUE) {}

                         }


                    }
然后我用isset做了类似的尝试,检查第一次更新是否已经完成

    if (isset($ip2) and ($ip==$ip2)) {
                    $sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
                    if ($conn->query($sql) === TRUE) {}}

但实际情况是,这个数字保持不变,因为它加1减1

试图通过查看他们的IP来跟踪访问者的数量不是一个好主意:

  • IP太多,无法跟踪它们,例如,对于IP V6,将有340282366920938463463374607431768211456个不同的IP
  • 访客的IP可能会随时间而变化。例如,每次新连接时,我的IP都会发生变化。具体的IP由我的ISP选择
我建议采取以下措施: 与其计算IP,不如使用PHP会话将每个访问者标记为特定类型的访问者。会话将是特定于客户端的,而不是特定于IP的,这使它们更加可靠

只是一段代码片段来说明这个想法:

session_start();
...
// form has been submitted && session value has not been set
if (isset($_POST['genero']) && !isset($_SESSION[$_POST['genero']]) ) {
  // We have a new visitor
  // 1. update DB
  // 2. Set cookie value
  $_SEESION[$_POST['genero']] = true;
}

我希望这能让您对这个问题有一个新的看法。

好的,向我们展示您为实现所需功能所做的尝试。请编辑您的问题并将代码包含在其中,在注释中阅读代码,这几乎是不可能的。尝试过,使用计数器,当它为1时,因此已经有更新,然后控制ip地址,如果它是相同的,那么减去一,这样它就不会一直增加。是的,我明白你的意思,我必须找到一种方法,在已经打开的会话中使用它(识别系统中的用户)
     $contador=$contador+1;
    if (isset($_POST['genero'])) {

        $genero=$_POST['genero'];
        $sql = "UPDATE generos SET visitas=visitas+1 where nombre='$genero'";

        if ($conn->query($sql) === TRUE) {
                 $ip2 = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']);

                } else {echo "Error sumando visita: " . $conn->error;}      

                if ($contador>1) {
                     if ($ip2==$ip){
                         $sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
                         if ($conn->query($sql) === TRUE) {}

                         }


                    }
    if (isset($ip2) and ($ip==$ip2)) {
                    $sql = "UPDATE generos SET visitas=visitas-1 where nombre='$genero'";
                    if ($conn->query($sql) === TRUE) {}}
session_start();
...
// form has been submitted && session value has not been set
if (isset($_POST['genero']) && !isset($_SESSION[$_POST['genero']]) ) {
  // We have a new visitor
  // 1. update DB
  // 2. Set cookie value
  $_SEESION[$_POST['genero']] = true;
}