/** * @brief 设置数据库读写分离并且执行SQL语句 * @param string $sql 要执行的SQL语句 * @return int or bool SQL语句执行的结果 */ public function query($sql) { //取得SQL类型 self::$sqlType = $this->getSqlType($sql); //读方式 if (self::$sqlType == 'select' || self::$sqlType == 'show') { if (self::$rTarget == NULL || !is_resource(self::$rTarget)) { //多数据库支持并且读写分离 if (isset(IWeb::$app->config['DB']['read'])) { //获取ip地址 $ip = IClient::getIP(); $this->connect(IHash::hash(IWeb::$app->config['DB']['read'], $ip)); } else { $this->connect(IWeb::$app->config['DB']); } self::$rTarget = $this->linkRes; } } else { if (self::$wTarget == NULL || !is_resource(self::$wTarget)) { //多数据库支持并且读写分离 if (isset(IWeb::$app->config['DB']['write'])) { $this->connect(IWeb::$app->config['DB']['write']); } else { $this->connect(IWeb::$app->config['DB']); } self::$wTarget = $this->linkRes; } } if (is_resource($this->linkRes)) { return $this->doSql($sql); } else { return false; } }
/** * @brief 设置数据库读写分离并且执行SQL语句 * @param string $sql 要执行的SQL语句 * @return int or bool SQL语句执行的结果 */ public function query($sql) { //取得SQL类型 self::$sqlType = $this->getSqlType($sql); //读方式 if (self::$sqlType == 'select' || self::$sqlType == 'show') { if (self::$rTarget == NULL) { //多数据库支持并且读写分离 if (isset(IWeb::$app->config['DB']['read'])) { //获取ip地址 $ip = IClient::getIP(); self::$rTarget = $this->connect(IHash::hash(IWeb::$app->config['DB']['read'], $ip)); } else { self::$rTarget = $this->connect(IWeb::$app->config['DB']); } } $this->switchLink("r"); $result = $this->doSql($sql); if ($result === false) { throw new IException("{$sql}\n -- " . $this->linkRes->error, 1000); return false; } return $result; } else { if (self::$wTarget == NULL) { //多数据库支持并且读写分离 if (isset(IWeb::$app->config['DB']['write'])) { self::$wTarget = $this->connect(IWeb::$app->config['DB']['write']); } else { self::$wTarget = $this->connect(IWeb::$app->config['DB']); } //写链接启用事务 $this->switchLink("w"); $this->autoCommit(); } $this->switchLink("w"); $result = $this->doSql($sql); if ($result === false) { $errorMsg = $this->linkRes->error; $this->rollback(); throw new IException("{$sql}\n -- " . $errorMsg, 1000); return false; } return $result; } }
/** * @brief 邮箱找回密码进行 */ function find_password_email() { $username = IReq::get('username'); if ($username === null || !Util::is_username($username)) { IError::show(403, "请输入正确的用户名"); } $email = IReq::get("email"); if ($email === null || !IValidate::email($email)) { IError::show(403, "请输入正确的邮箱地址"); } $tb_user = new IModel("user"); $username = IFilter::act($username); $email = IFilter::act($email); $user = $tb_user->getObj(" username='******' AND email='{$email}' "); if (!$user) { IError::show(403, "对不起,用户不存在"); } $hash = IHash::md5(microtime(true) . mt_rand()); //重新找回密码的数据 $tb_find_password = new IModel("find_password"); $tb_find_password->setData(array('hash' => $hash, 'user_id' => $user['id'], 'addtime' => time())); if ($tb_find_password->query("`hash` = '{$hash}'") || $tb_find_password->add()) { $url = IUrl::getHost() . IUrl::creatUrl("/simple/restore_password/hash/{$hash}"); $content = mailTemplate::findPassword(array("{url}" => $url)); $smtp = new SendMail(); $result = $smtp->send($user['email'], "您的密码找回", $content); if ($result === false) { IError::show(403, "发信失败,请重试!或者联系管理员查看邮件服务是否开启"); } } else { IError::show(403, "生成HASH重复,请重试"); } $message = "恭喜您,密码重置邮件已经发送!请到您的邮箱中去激活"; $this->redirect("/site/success/message/" . urlencode($message)); }
function trade_ticket() { $ticketId = IFilter::act(IReq::get('ticket_id', 'post'), 'int'); $message = ''; if (intval($ticketId) == 0) { $message = '请选择要兑换的代金券'; } else { $nowTime = ITime::getDateTime(); $ticketObj = new IModel('ticket'); $ticketRow = $ticketObj->getObj('id = ' . $ticketId . ' and point > 0 and start_time <= "' . $nowTime . '" and end_time > "' . $nowTime . '"'); if (empty($ticketRow)) { $message = '对不起,此代金券不能兑换'; } else { $memberObj = new IModel('member'); $where = 'user_id = ' . $this->user['user_id']; $memberRow = $memberObj->getObj($where, 'point'); if ($ticketRow['point'] > $memberRow['point']) { $message = '对不起,您的积分不足,不能兑换此类代金券'; } else { //生成红包 $dataArray = array('condition' => $ticketRow['id'], 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1); $propObj = new IModel('prop'); $propObj->setData($dataArray); $insert_id = $propObj->add(); //用户prop字段值null时 $memberArray = array('prop' => ',' . $insert_id . ','); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $this->user["user_id"] . ' and ( prop is NULL or prop = "" )'); //用户prop字段值非null时 if (!$result) { $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")'); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $this->user["user_id"], 'prop'); } //代金券成功 if ($result) { $pointConfig = array('user_id' => $this->user['user_id'], 'point' => '-' . $ticketRow['point'], 'log' => '积分兑换代金券,扣除了 -' . $ticketRow['point'] . '积分'); $pointObj = new Point(); $pointObj->update($pointConfig); } } } } //展示 if ($message != '') { $this->integral(); Util::showMessage($message); } else { $this->redirect('redpacket'); } }
function ticket_excel_pack() { if (class_exists('ZipArchive')) { //获取要打包的文件数组 $fileArray = IFilter::act(IReq::get('id')); if (!empty($fileArray)) { $fileName = 'T_' . date('YmdHis') . IHash::random(8) . '.zip'; $zip = new ZipArchive(); $zip->open($this->ticketDir . '/' . $fileName, ZIPARCHIVE::CREATE); foreach ($fileArray as $file) { $attachfile = $this->ticketDir . '/' . $file; $zip->addFile($attachfile, basename($attachfile)); } $zip->close(); $this->ticket_excel_download($fileName); @unlink($this->ticketDir . '/' . $fileName); } else { $this->ticket_excel_list(); Util::showMessage('请选择要打包的文件'); } } else { $this->ticket_excel_list(); Util::showMessage('您的php环境没有打包工具类库'); } }
/** * @brief 赠品促销规则奖励操作 * @param array 赠品促销规则奖励信息 */ private function giftAction($giftArray, $user_id) { foreach ($giftArray as $key => $val) { $award_type = $val['award_type']; $award_value = $val['award_value']; switch ($award_type) { //积分 case "3": $pointConfig = array('user_id' => $user_id, 'point' => $award_value, 'log' => '促销奖励,消费满' . $this->sum . '元,奖励' . $award_value . '积分'); $pointObj = new Point(); $pointObj->update($pointConfig); break; //代金券 //代金券 case "4": /*(1)修改prop表*/ $ticketObj = new IModel('ticket'); $where = 'id = ' . $award_value; $ticketRow = $ticketObj->getObj($where); //奖励的红包没有过期 $time = ITime::getDateTime(); if ($time > $ticketRow['start_time'] && $time < $ticketRow['end_time']) { $dataArray = array('condition' => $award_value, 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time'], 'is_send' => 1); $propObj = new IModel('prop'); $propObj->setData($dataArray); $insert_id = $propObj->add(); /*(2)修改member表*/ $memberObj = new IModel('member'); //用户prop字段值null时 $memberArray = array('prop' => ',' . $insert_id . ','); $memberObj->setData($memberArray); $result = $memberObj->update('user_id = ' . $user_id . ' and ( prop is NULL or prop = "" )'); //用户prop字段值非null时 if (!$result) { $memberArray = array('prop' => 'concat(prop,"' . $insert_id . ',")'); $memberObj->setData($memberArray); $memberObj->update('user_id = ' . $user_id, 'prop'); } } break; //赠送经验 //赠送经验 case "5": $memberObj = new IModel('member'); $memberArray = array('exp' => 'exp' + $award_value); $memberObj->setData($memberArray); $memberObj->update('user_id = ' . $user_id, 'exp'); break; } } }
/** * 用户报名参加团购 * * 用户可以参加本次团购的条件: * 1.本次团购还没有满员 * 2.一小时二十五分钟内,用户在本次团购中没有未完成的交易 * * regiment_user_relation表中的is_over:0代表着还没有完成,1代表着已经完成交易了 * 如果用户没有登录便参加团购,会生成一个hash存在cookie里,名字为regiment_100,其中100是相应团购的id * 并将此hash保存在regiment_user_relation表的hash字段里。在用户付账需要登录的时候应该查询这个hash并更新相应的user_id * * @static */ public static function join($id, $user_id = null) { $id = intval($id); $now = time(); $regiment = self::getRegimentById($id); $time_limit = self::time_limit(); if ($regiment === false || 0 != $regiment['store_nums'] && $regiment['user_num'] >= $regiment['store_nums'] || strtotime($regiment['end_time']) < $now || strtotime($regiment['start_time']) > $now) { return array('flag' => 'msg', 'data' => '本次团购已过期或者人满'); } $tb = new IModel("regiment_user_relation"); $data = array('user_id' => "", 'hash' => "", 'regiment_id' => $id, 'join_time' => date("Y-m-d H:i:s", $now), 'is_over' => 0); if ($user_id !== null) { $user_id = intval($user_id); $re = $tb->query("regiment_id={$id} AND user_id={$user_id} AND is_over=0"); $data['user_id'] = $user_id; } else { $hash = ICookie::get("regiment_{$id}"); if ($hash === null) { $hash = IHash::md5(serialize($_SERVER) . microtime(1)); ICookie::set("regiment_{$id}", $hash, $time = $time_limit * 60); } $re = $tb->query("regiment_id={$id} AND hash='{$hash}' AND is_over=0"); $data['hash'] = $hash; } if ($re) { $re = end($re); } if (count($re) == 0 || strtotime($re['join_time']) < $now - $time_limit * 60) { $tb->setData($data); //$relation_id是关系表的主键 if ($re) { $tb->update("id={$re['id']}"); $relation_id = $re['id']; } else { $relation_id = $tb->add(); } return array('flag' => true, 'data' => '参与成功', 'relation_id' => $relation_id); } else { return array('flag' => false, 'data' => '本次团购您存在未完成交易'); } }
function ticket_create() { $propObj = new IModel('prop'); $prop_num = intval(IReq::get('num')); $ticket_id = intval(IReq::get('ticket_id')); if ($prop_num && $ticket_id) { $prop_num = $prop_num > 5000 ? 5000 : $prop_num; $ticketObj = new IModel('ticket'); $where = 'id = ' . $ticket_id; $ticketRow = $ticketObj->getObj($where); for ($item = 0; $item < intval($prop_num); $item++) { $dataArray = array('condition' => $ticket_id, 'name' => $ticketRow['name'], 'card_name' => 'T' . IHash::random(8), 'card_pwd' => IHash::random(8), 'value' => $ticketRow['value'], 'start_time' => $ticketRow['start_time'], 'end_time' => $ticketRow['end_time']); //判断code码唯一性 $where = 'card_name = \'' . $dataArray['card_name'] . '\''; $isSet = $propObj->getObj($where); if (!empty($isSet)) { $item--; continue; } $propObj->setData($dataArray); $propObj->add(); } $logObj = new Log('db'); $logObj->write('operation', array("管理员:" . $this->admin['admin_name'], "生成了代金券", "面值:" . $ticketRow['value'] . "元,数量:" . $prop_num . "张")); } $this->redirect('ticket_list'); }
function do_find_password() { $username = IReq::get('username'); if ($username === null || !Util::is_username($username)) { die("请输入正确的用户名"); } $useremail = IReq::get("useremail"); if ($useremail === null || !IValidate::email($useremail)) { die("请输入正确的邮箱地址"); } $captcha = IReq::get("captcha"); if ($captcha != ISafe::get('Captcha')) { die('验证码输入不正确'); } $tb_user = new IModel("user"); $username = IFilter::act($username); $useremail = IFilter::act($useremail); $user = $tb_user->query("username='******' AND email='{$useremail}'"); if (!$user) { die("没有这个用户"); } $user = end($user); $hash = IHash::md5(microtime(true) . mt_rand()); $tb_find_password = new IModel("find_password"); //重新生成 $tb_find_password->setData(array('hash' => $hash, 'user_id' => $user['id'], 'addtime' => time())); $sendMail = true; if ($tb_find_password->query("`hash` = '{$hash}'") || $tb_find_password->add()) { $smtp = new SendMail(); $url = IUrl::creatUrl("/simple/restore_password/hash/{$hash}"); $url = IUrl::getHost() . $url; $content = "请你点击下面这个链接修改密码:<a href='{$url}'>{$url}</a>。<br />如果不能点击,请您把它复制到地址栏中打开。<br />本链接在3天后将自动失效。"; $re = $smtp->send($user['email'], "您的密码找回", $content); if ($re === false) { die("发信失败"); } die("success"); } die("找回密码失败"); }
/** * Performs the hashing of a value using a hashing algorithm * @param string $value The value to be hashed * @param IHash $method The IHash object that represents the hash algorithm * <br>All hashing methods implements de IHash interface * @return string Generated hash */ public static function generateHash($value, $method) { return $method->hashValue($value); }