Ryongyon!

这世界上假绅士太多,缺少训练有素的流氓

· 实践教程 · · 24289次浏览

PHP + MYSQL 实现 用户注册/登录/充值 功能

前言

这个其实目的只是为了配合软件用的,昨天帮个朋友写个软件需要这种网络验证的功能,太复杂的没研究过,所以自己写了一个简单的。贴上来共同学习,哪里可以改善欢迎提出。有兴趣的朋友可以参考一下

代码

<?php
header("Content-type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
date_default_timezone_set("PRC");

//全局变量//
$effect = @$_GET["effect"]; //GET,执行指定动作 1=登陆 2=注册 3=充值 4=生成卡密
$ver = @$_GET["ver"];       //GET,接收软件版本号
$name = @$_GET["name"];     //GET,接收用户名
$pw = @$_GET["pw"];         //GET,接收密码
//$email = @$_GET["email"];   //GET,接收邮箱
$key = @$_GET["key"];       //GET,接收卡密
$day = @$_GET["day"];       //GET,接收卡密天数
$time = date("Y-m-d");      //获取当前时间,用于验证

//数据库//
$mysql = @mysql_connect("localhost","root","123456789");  //服务期地址,数据库账号,数据库密码
$db = @mysql_select_db("demo",$mysql);  //选择要连接的数据库
    
//开始工作//
if($db){
    
    //检查更新
    $update = "SELECT * FROM `update`";     //SQL命令,查询
    $query = mysql_query($update);  //执行SQL命令
    $result = mysql_fetch_array($query);    //储存结果
        if($result['new'] > $ver){
            echo $result['url'];
        }

    //登陆
    if($effect === "1"){
    $login = "SELECT *  FROM `user` WHERE `name` LIKE '".$name."' AND `pw` LIKE '".$pw."'"; //SQL命令,查询
    $query = mysql_query($login);  //执行SQL命令
    $result = mysql_fetch_array($query);    //储存结果
        if($result['name'] == ""){
            ob_end_clean();
            echo '用户不存在或者密码错误';
            exit();
        }elseif($result['time'] <= $time){
            ob_end_clean();
            echo '您的账号已到期,请充值后重试';
            exit();
        }elseif($result['online'] == "1"){
            ob_end_clean();
            echo '该用户正在使用中,请勿重复登陆';
            exit();
        }else{
            $online="UPDATE `user` SET `online` = '1' WHERE `name` = '".$name."'";  //SQL命令,写入用户在线状态
            @mysql_query($online);     //执行SQL命令
            ob_end_clean();
            echo '登陆成功';
            exit();
        }
    }
    
    //注册
    if($effect === "2"){
        $register = "SELECT *  FROM `user` WHERE `name` = '".$name."'";//SQL命令,判断用户名是否存在
        $query = mysql_query($register);  //执行SQL命令
        $result = mysql_fetch_array($query);    //储存结果
            if($result['name'] == ""){
                $register = "INSERT INTO `user` (`name`, `pw`, `time`, `online`) VALUES ('".$name."', '".$pw."', '".$time."', '0');";
                @mysql_query($register);     //执行SQL命令
                ob_end_clean();
                echo '注册成功';
                exit();
            }else{
                ob_end_clean();
                echo '抱歉,这个用户名已经存在';
                exit();
            }
    }
    
    //充值
    if($effect === "3"){
        $recharge = "SELECT *  FROM `key` WHERE `key` = '".$key."'";//SQL命令,判断卡密是否存在
        $query = mysql_query($recharge);  //执行SQL命令
        $result = mysql_fetch_array($query);    //储存结果
            if($result['key'] == ""){
                ob_end_clean();
                echo '抱歉,充值卡密不存在或者错误';
                exit();
            }else{
                $day = $result['day'];//记录卡密天数
                $time = date("Y-m-d",strtotime("+$day day"));      //获取当前时间,用于验证
                @mysql_query("DELETE FROM `key` WHERE `key` = '".$key."'");//删除卡密
                @mysql_query("UPDATE `user` SET `time` = '".$time."' WHERE `name` = '".$name."'");//充值
                ob_end_clean();
                echo '充值成功';
                exit();
            }
    }
    
    //生成卡密
    if($effect === "4"){
        $generate = "SELECT *  FROM `key` WHERE `key` = '".$key."'";//SQL命令,判断卡密是否存在
        $query = mysql_query($generate);  //执行SQL命令
        $result = mysql_fetch_array($query);    //储存结果
            if($result['key'] == ""){
                @mysql_query("INSERT INTO `key` (`key`, `day`) VALUES ('".$key."', '".$day."')");//生成卡密
                ob_end_clean();
                echo '添加充值卡密成功';
                exit();
            }else{
                ob_end_clean();
                echo '抱歉,充值卡密已经存在,请重试';
                exit();
            }
    }

}else{
    echo '服务期维护中,请稍后重试';
}

 ?>

差不多就是这样,数据库的话自己按着代码折腾把...

评论 (16条) 取消回复
  1. 你这代码不会是用在你这个站上吧,要不然我有办法可以攻破.???

    回复
  2. 接口最好使用类来操作

    "4"不是全等于4,这个注意就行

    回复
  3. 1.不建议使用like迷糊查询以及*,可以使用 SELECT time,online,pw FROM `user` WHERE `name`='{$name}' LIMIT 1
    根据返回数据判断是否密码正确等等操作
    2.不要相信用户给你的数据,接收的参数必须过滤(推荐正则)
    3.可以考虑预处理

    回复
  4. 何不封装个查询了。

    回复
  5. shawn

    支持

    回复
  6. 这。。。看着感觉不安全- -,全是裸的,也没过滤?

    回复
    1. 拾叁 博主
      @Tokin

      想要安全一些最普遍的做法就是把数据库单独写在一个比如conn.inc.php的文件里,然后调用就行了。没什么不安全的,除非有高人能攻破你的服务器

      回复
      1. @拾叁

        用户名和密码都没限制输入的内容,你确定不会出现where 1=1?

        回复
        1. 拾叁 博主
          @Tokin

          噢,刚才去了解了一下,按照你说的,再密码部分的POST加个or 1=1确实是可以绕过登录验证,不过只是绕过了登录验证而已,并不能绕过时间验证,所以等于绕过也没用。难道还会有什么更危险的操作?我对SQL注入方面不是很懂,是否值得加上mysql_real_escape_string()?

          回复
        2. 拾叁 博主
          @Tokin

          能加一下QQ请教一下吗,我的QQ279721075

          回复
      2. @拾叁

        用户名和密码都没限制输入的内容,你确定不会出现where 1=1?

        回复
  7. 好久没来了~

    回复
    1. 拾叁 博主
      @牧羊人

      随时欢迎呐!你博客换新主题了哟,很漂亮?

      回复
  8. watcher

    代码显示很漂亮

    回复
  9. 不错,写得很好。

    回复
    1. 拾叁 博主
      @大雄

      谢谢大雄,其实我觉得写得有点乱?

      回复