1. 程式人生 > >如何生成二維碼並統計掃描次數,展示二維碼頁面

如何生成二維碼並統計掃描次數,展示二維碼頁面

引入了 phpqrcode 外掛來生成自定義二維碼

	//建立空二維碼  唯一標識code
    public function mkCode()
    {
    	 // 引入外掛
        include '/static/phpqrcode/phpqrcode.php';
        
        $str='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
        $randStr = str_shuffle($str);
        $data['code'] = substr($randStr,0,6);
        $code = base64_encode($data['code']);
        
        // $code 是二維碼的唯一標識
        //二維碼的連結,等於 域名 加 控制器方法 加 唯一標識code
        $link = 'http://...com/erweima-moveCode?code=' . $code;
        
        $name = date('Ymd') . time() . rand(1000000, 9999999);
        // 生成的二維碼儲存到本地的地址
        $code_link = 'static/code/' . $name . '.png';
        QRcode::png($link, $code_link, '', 10, 2, true);    
        $code_data['code'] = $data['code'];
        $code_data['time'] = date('Y-m-d H:i:s', time());
        $code_data['code_link'] = $code_link;
        
        // $code_data 就是生成二維碼的資訊
        // 此處插入資料庫,$data是插入資料庫的執行結果
        if ($success) {
            return $data['code'];
        } else {
            return false;
        }
    }

如果使點選不同的連結就展示不同的二維碼,並計算掃描次數

//掃描二維碼進入這個方法, 原理 掃描二維碼就是進二維碼的連結地址
public function moveCode()      
{
	// 獲取二維碼的唯一標識 code
    $data = $this->getlink(13);
    $code = $data['code'];
    
 	// 查詢出來的二維碼錶中這個二維碼的資料
    $data = M('content')->chaxun('code', $code);
    foreach ($data as $v) {
        $data = $v;
    }
    
    $saveData['time'] = date('Y-m-d', time());
    $saveData['code_id'] = $data['id'];
    $saveData['uid'] = $data['uid'];
    
    // 掃描訪問次數的統計
    $fangwen = M('fangwen')->fangwen('code_id', $data['id'], $saveData['time']);
    // 如果沒有當前二維碼的掃描次數則為1,有的話就加1
    if (empty($fangwen)) {
        $saveData['num'] = 1;
        M('fangwen')->create($saveData, true);
    } else {
        foreach ($fangwen as $v) {
            $fangwen = $v;
        }
        $saveData['num'] = $fangwen['num'] + 1;
        M('fangwen')->update($fangwen['id'], $saveData, true);
    
    // 跳轉到 二維碼的展示頁面
    $this->ma($code);
} 

//載入便籤詳情頁面,直接載入的時候進這個方法,不統計訪問數量
public function ma($code=0)
{
    if (!$code) {
        $data = $this->getlink(13);
        $code = $data['code'];
    }
    $arr = M('content')->cfg();
    $codeData = M('content')->chaxun('code', $code);
    if (!$codeData) {
        $this->err->add('資訊不存在');
    } else {
        foreach ($codeData as $v) {
            $id = $v;
            $type_id = $v['type_id'];
        }
        // 二維碼型別不同查的表也不一樣
        switch ($type_id) {
            case '1':
                $bianqian = M('biao111')->chaxun('tid', $id['id']);
                break;
            case '2':
                $bianqian = M('biao222')->chaxun('tid', $id['id']);
                break;
            default:
                # code...
                break;
        }
        foreach ($bianqian as $v) {
            $bianqianData = $v;
        }
        $link = $arr[$id['type_id']];   // $id 是二維碼錶中的id
        $this->assign('data',$bianqianData);
        $this->assign('code',$id);
   		// 根據表的不同,展示不同的頁面
        return $this->fetch($link . '_y.html'); 
    }
    
}