(PHP)OOP设计 - 推广方法

时间:2017-11-23 17:10:23

标签: php mysql ajax

我正致力于保存各种按钮和链接的点击数据。我在服务器上使用PHP,每按一次按钮使用AJAX,在请求中发送一些信号,指定点击了哪个按钮。服务器收到此信息,在DB中找到相应的行,然后递增计数器值。如果没有找到行(添加了新按钮),则会创建一个新行。

所以我创建了以下类:

class MysqlDatabase extends Database
{
    protected $db_driver;
    protected $db_host;
    protected $db_name;
    protected $user;
    protected $password;

    // Allow for 1 query to be set at any time
    protected $query;

    public function getClicks($category)
    {
        $clicks = $this->db->prepare("SELECT num FROM clicks WHERE category = Five");
        $clicks->execute();
        $num = $clicks->fetch(PDO::FETCH_ASSOC);

        print_r($num);
    }

    private function checkCategory($category)
    {
        // This needs to check to see if the category for the button exists...
        $query = "SELECT 1 FROM clicks WHERE category = :category";
        $prepare = $this->db->prepare($query);
        $prepare->bindParam(':category', $category);
        $prepare->execute();
        $truth = $prepare->fetch(PDO::FETCH_ASSOC);

        if(!$truth){
            return 0;
        }
        else{
            return 1;
        }
    }

    public function addClickRow($category)
    {
        $clicks = 0;
        $query = $this->db->prepare("INSERT INTO clicks (category, num) VALUES (:category, :num)");
        $query->bindParam(":category", $category);
        $query->bindParam(':num' , $clicks, PDO::PARAM_INT);
        $query->execute();
    }

    public function incrementClick($category)
    {
        $checked = $this->checkCategory($category);
        if($checked == 0){
            $this->addClickRow($category);
        }
        $query = $this->db->prepare("UPDATE clicks SET num = num + 1 WHERE category = :category");
        $query->bindParam(":category", $category);
        $truth = $query->execute();
    }
}

CODE TL; DR:

  • $ this-> getClicks():应该返回点击数据 - 这是我的问题方法
  • $ this-> checkCategory():检查行是否存在的辅助函数,如果不存在,则调用$this->addClickRow
  • $ this-> addClickRow():在数据库中添加新行
  • $ this-> incrementClick():递增数据库中的点击值

仅供参考,班级Database只是建立了一种联系。大多数功能都驻留在这个类上。另外,请忽略一些不一致的内容,例如我如何停止使用$query属性。

我觉得我每个项目至少会来到这个十字路口,而且它总是一致的。我可以有一个方法返回1值并接受1个参数并简单地循环它直到我拥有一切。或者我可以创建一个没有参数的方法,只返回所有内容,并在服务器/客户端过滤,只显示用户想要看到的内容。

简短示例:假设用户想要为他创建的3个链接点击数据。他们使用的界面可以允许指定选项(这样他们就可以轻松选择这3个链接并仅为他们检索数据 - 可能他们有6个总链接但只想要3个信息)。

至于代码:该方法可以接受1个参数,检索值,并在客户端或服务器端循环(这里有2个选项)。或者,该方法可以接受可变数量的参数(然后使用splat运算符解包)。或者,该方法可以接受0个参数,返回EVERYTHING,然后在客户端OR服务器端进行过滤(另外2个不同的选择)。我几乎可以混合和匹配这些一般的想法,并有40种不同的组合,以达到相同的结果。

我应该为这种情况做最直观的事情吗?或者是某种最佳实践。我觉得检索单个值是最模块化和最灵活的,但也有时候它可能是不灵活或恼人的实现,比如我想要检索所有值 - 我必须生成30个AJAX请求或只是做1 AJAX请求服务器上的一个单独方法,该方法将调用此检索方法30次。

是否还有一个词来描述这个难题?

编辑:很抱歉这篇长篇文章,我试图在保留关键点的同时尽可能地压缩它。

1 个答案:

答案 0 :(得分:1)

  

使用数组的1个参数如何使用 中的 过滤点击   条件?

示例 php> = 5.6

<div ng-app>
    <ng-form name="namesForm_{{$index}}" ng-repeat="name in [1, 2]">
      <input type="text" 
             placeholder="{{$index}}"
             ng-required="true"
             ng-model="test"
             name="hey" />
      
      <button ng-disabled="!namesForm_{{$index}}.$valid">
        send
      </button>
     
    <br />
</ng-form>
  
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>