用脑思考,用心琢磨,用行动证实 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

PHP+Medoo+Memcached简单的微信回复数字投票程序

开发 memory 发布于November 7, 2017 标签: PHP, Memcached

16年帮朋友写的一个简单的投票,因为线上他使用的是小猪cms的投票,结果并发高了直接挂了。
SO,我给他搞了一个简单版的。
今天清理电脑的时候,突然看到,删了可惜,留着无用。。。在此分享啦

<?php
header("Content-type: text/html; charset=utf-8");
error_reporting(0);
if($_GET['echostr']){
    $_token    = "lvtao.net";
    $echoStr   = $_GET['echostr'];
    $nonce     = $_GET['nonce'];
    $signature = $_GET['signature'];
    $timestamp = $_GET['timestamp'];

    $tmpArr = array($_token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);

    if($tmpStr == $signature){
        echo $echoStr;
    }
}else{
    $postStr  = file_get_contents("php://input");
    $_textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>".time()."</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";
   
    $postObj      = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    $fromUsername = $postObj->FromUserName;
    $toUsername   = $postObj->ToUserName;
    $msgType      = $postObj->MsgType;
    $voteid       = (int)$postObj->Content;
    //echo sprintf($_textTpl, $fromUsername, $toUsername, "投票系统维护中,维护时间21点至21点30分。带来不便,敬请谅解!");exit;
    if($voteid){
        $cache = new Memcache;
        $cache->addserver('127.0.0.1',11211);
        //实例化数据库
        include('medoo.php'); //这货下载可以在这儿,下载1.2之前的版本.  http://medoo.lvtao.net
        $db = new medoo([
            'database_type' => 'mysql',
            'database_name' => 'vote',
            'server'        => '10.0.0.2',
            'username'      => 'user',
            'password'      => 'pass',
            'charset'       => 'utf8',
            'port'          => 3306,
            'prefix'        => 'pre_',
            'option'        => [
                PDO::ATTR_CASE => PDO::CASE_NATURAL
            ]
        ]);
        $data = $cache->get('info_' . $voteid);
        if(!$data){
            //查询投票数据
            $data = $db->get('vote_item', [
                'id',
                'num',
                'name'
            ], [
                "no" => "$voteid"
            ]);

            if($data) {
                $cache->set('info_' . $voteid, $data, false, 1800);
            }else{
                if(!$data) {
                   echo sprintf($_textTpl, $fromUsername, $toUsername, "您输入的编号不存在,请在投票页面中查询选手编号。查询地址巴啦吧啦...");exit;}
            }
        }

        $userid = $db->get('vote_user', "id", ["xm" => "$fromUsername"]);
        //用户存在
        if(!$userid){
            //添加新用户
            $userid = $db->insert('vote_user', [
                'vote_id'  => 1,
                'xm'       => "$fromUsername",
                'tel'      => '0',
                'add_time' => time(),
                'paixu'    => 100,
                'status'   => 0,
                'part1'    => "$fromUsername",
                'part2'    => '',
                'part3'    => ''
            ]);
        }
        $time   = strtotime(date('Y-m-d 0:0:0', time()));
        $result = $cache->get('day_' . $voteid . '_' . $userid);
        if(!$result){
            $result = $db->get("vote_log", 'id', [
                "AND"      => ["user_id" => $userid,
                "item_id"  => $voteid,
                "time_key" => $time
               ]
            ]);
            $cache->set('day_' . $voteid . '_' . $userid, $result, false, 3600);
        }
        if($result){
            $contentStr = "今天已投票,请勿重复投票!\n选手:{$data['name']}\n得票:{$data['num']} (30分钟前更新.)";
        }else{
            $userid = $db->insert('vote_log', [
                'vote_id'  => 1,
                'item_id'  => $voteid,
                'user_id'  => $userid,
                'time_key' => $time,
                'log_time' => time(),
                'part1'    => "",
                'part2'    => '',
                'part3'    => '1'
            ]);
            $contentStr = "投票成功!\n选手:{$data['name']}\n得票:{$data['num']} (30分钟前更新.)";
            $db->update('vote_item', [
                "num[+]" => 1
            ],[
                'id' => $data['id']
            ]);
        }
        echo sprintf($_textTpl, $fromUsername, $toUsername, $contentStr);exit;
    }else{
        echo sprintf($_textTpl, $fromUsername, $toUsername, '请输入选手ID进行投票');exit;
    }
}

相关推荐

添加新评论

全部评论:仅有一条评论

  1. memory

    现在回头看,,,这么烂的代码,也是醉了.

网站状态

  • 栏目分类:49个
  • 发布文章:1308篇
  • 用户评论:687条
  • 开博至今:3976天

正则速查

[abc] 匹配中括号中的单个字符,如a或b或c
[^abc] 匹配除了a、b、c等字符的其他单个字符
[a-z] 匹配一个字符范围,如a到z
[a-zA-Z] 匹配一个字符范围,如a-z 或 A-Z
^ 匹配行的开始
$ 匹配行的结束
\A 匹配一个字符串的开始
\z 匹配一个字符串的结束
. 匹配任意单个字符
\s 匹配空白字符,如空格,TAB
\S 匹配非空白字符
\d 匹配一个数字
\D 匹配非数字
\w 匹配一个字母
\W 匹配非字幕
\b 匹配字符边界
(...) 引用所有括号中的内容
(a|b) a或者b
a? 零个或多个a
a* 零个或多个a
a+ 1个或多个a
a{3} 3次重复的a
a{3,} 3次或3次以上重复的a
a{3,6} 3到6次重复的a

修正符

/g 查找所有可能的匹配
/i 不区分大小写
/m 多行匹配
/s 单行匹配
/x 忽略空白模式
/e 可执行模式,PHP专有
/A 强制从目标字符串开头匹配
/D 使用$限制结尾字符,则不允许结尾有换行
/U 只匹配最近的一个字符串;不重复匹配

最新回复

  • memory: 这是我3年前玩过一次,当时因为安装完后,发现日常办公还好,但是好...
  • sdf: 想问一下,激活工具激活后,后面会出现提示要再次重新激活吗?
  • memory: 你要用碗装我吗?还是要我把扔的扔进你碗里???!!! &^_^&
  • 薛才杰: 同感,快扔到我的碗里来。。。
  • memory: 要说明一下,在大陆及香港的云主机或VPS,都是不支持的。原因都懂...
  • 历史趣谈LishiQtan: 很好的文章,值得收藏
  • memory: 现在回头看,,,这么烂的代码,也是醉了.
  • memory: 有空试试apache的
  • 脚踏实地: rInfo数组是怎么来的
  • 朋友们: 我都是这么建站的
  • memory: 明眼人.
  • 上官元恒: $lunarInfo数组是怎么来的,这是重点
  • memory: 你知道的太多了...
  • yjl: 这个肯定解决的不是空间的问题,可能是复用的问题,有可能是“站群”的问题
  • Smithd994: Hello! This post could not be wr...
  • memory: controll文件assign ,然后模板文件中直接foreach
  • mike: 你好,yaf怎么使用循环输出数据到模板中