忙于采集的蜜蜂,无暇在人前高谈阔论 [登录·注册]

吕滔博客

首页 开发 运维 工具 摄影

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;
    }
}

相关推荐

添加新评论

全部评论:已有 5 条评论

  1. 贾彦东

    medoo 在select的时候如何使用sum 比如
    select
    m.user_id,sum(m.money),u.name,u.img,u.newmoney,u.oldmoney,u.time
    from money as m LEFT JOIN wechat_user as u ON user_id=u.id
    WHERE u.name LIKE '%1%'
    group by user_id
    order by sum(money)
    DESC LIMIT 3
    这条sql如何转换成medoo的写法

    1. memory

      https://medoo.lvtao.net/1.2/doc.raw.php

  2. jiangnvshi

    不知道你还记不记得之前你翻译的medoo文档:http://medoo.lvtao.net/doc.where.php 条件搜索中有个翻译是错的, 还看来很长时间都不明白:把官网上写的#后的数据省略了,记得要把文档更新下,

    1. memory

      好的,感谢您的反馈。翻译完了也没有校验。。。
      检查了一下,medoo在1.2之前和1.2之后的改动还是比较大的。
      我会在尽快将新的版本更新上

  3. memory

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

网站状态

  • 栏目分类:49个
  • 发布文章:1550篇
  • 用户评论:825条
  • 开博至今:4310天

正则速查

[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? 零个或1个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: 海哥最近更新的新版的我还没有测试过。具体原因还不清楚。不过你可能...
  • yiye: 楼主,我下的是最新的官方mysql镜像,然后密码用户名都正确,数...
  • memory: 这个是15年的文章了,这几年不知道有没有变化 。 你可以根据错误...
  • nice: 请教下这个评论审核提示代码是直接在评论模板调用的吗,我直接用了...
  • vultr: 学习了
  • 小云: 厉害,实用
  • memory: NND。自己写的看不懂了。。。
  • memory: 服务器上的一个配置.
  • haha: 是在主机端还是从机端设置
  • wu先生: 收藏备用。
  • memory: 哈哈,无所谓了。。。早改了
  • 文小刀: 真的是很标题
  • 进击的巨波: 终于找到一篇真正行的通的安装git文档,写的非常详细,感谢!
  • memory: 可以邮件告知一下具体错误给我。你可以在本地先测试一下。我这样测试...
  • 钛客志: 你好博主,我是按照你的方法设置,但是老是出错,要么站点出问题,不...
  • 小云: 受教了
  • memory: 这是个扩展,安装就有了.