悠悠楠杉
网站页面
mysql.php
<?php
/**
* mysql.php mysql系列操作函数
* @author nianbaibai
*/
/**
* 连接数据库
*
* @return resource 连接成功,返回连接数据库的资源
*/
function mConn()
{
static $conn = null;
if ($conn === null) {
$db = require ROOT . '/lib/config.php';
$conn = mysqli_connect("$db[host]", "$db[name]", "$db[password]", "$db[databaseName]", "$db[port]");
mysqli_query($conn, 'set names ' . $db['charset']);
}
return $conn;
}
/**
* 查询的函数
* @return mixed resoure/bool
*/
function mQuery($sql)
{
$rs = mysqli_query(mConn(), $sql);
if ($rs) {
// mLog($sql);//执行成功的日志,如果需要的可以显示这段
} else {
mLog($sql . "\n" . mysqli_error(mConn()));
}
return $rs;
}
/**
* log日志记录功能
* @param str $str 待记录的字符串
*/
function mLog($str)
{
$filename = ROOT . '/log/' . date('Ymd') . '.txt';
$log = "-----------------------------------------\n" . date('Y/m/d H:i:s') . "\n" . $str . "\n" . "-----------------------------------------\n\n";
return file_put_contents($filename, $log, FILE_APPEND);
}
/**
* select 查询多行数据
*
* @param str $sql select 待查询的sql语句
* @return mixed select 查询成功,返回二维数组,失败返回false
*/
function mGetAll($sql)
{
$rs = mQuery($sql);
if (!$rs) {
return false;
}
$data = array();
while ($row = mysqli_fetch_assoc($rs)) {
$data[] = $row;
}
return $data;
}
/*$sql = "select * from cat";
print_r(mGetAll($sql));
*/
/**
* select 取出一行数据
*
* @param str $sql 待查询的sql语句
* @return arr/false 查询成功 返回一个一维数组
*/
function mGetRow($sql)
{
$rs = mQuery($sql);
if (!$rs) {
return false;
}
return mysqli_fetch_assoc($rs);
}
/*$sql = "select * from cat where cat_id=1";
print_r(mGetRow($sql));*/
/**
* select 查询返回一个结果
*
* @param str $sql 待查询的select语句
* @return mixed 成功,返回结果,失败返回false
*/
function mGetOne($sql)
{
$rs = mQuery($sql);
if (!$rs) {
return false;
}
return mysqli_fetch_row($rs)[0];
}
/*$sql = "select count(*) from art where cat_id=1";
echo mGetOne($sql);*/
/**
* 自动拼接insert 和 update sql语句,并且调用mQuery() 去执行sql
*
* @param str $table 表名
* @param arr $data 接收到的数据,一维数组
* @param str $act 动作 默认为'insert'
* @param str $where 防止update更改时少加where条件
* @return bool insert 或者update 插入成功或失败
*/
function mExec($table, $data, $act = 'insert', $where = 0)
{
if ($act == 'insert') {
$sql = "insert into $table (";
$sql .= implode(',', array_keys($data)) . ") values ('";
$sql .= implode("','", array_values($data)) . "')";
return mQuery($sql);
} else if ($act == 'update') {
$sql = "update $table set ";
foreach ($data as $k => $v) {
$sql .= $k . "='" . $v . "',";
}
$sql = rtrim($sql, ',') . " where " . $where;
return mQuery($sql);
}
}
//$data = array('title'=>'今天的空气' , 'content'=>'空气质量优' , 'pubtime'=>12345678,'author'=>'baibai');
//insert into art (title,content,pubtime,author) values ('今天的空气','空气质量优','12345678','baibai');
//update art set title='今天的空气',conte='空气质量优',pubtime='12345678',author='baibai' where art_id=1;
//echo mExec('art' , $data , 'update' , 'art_id=1');;
//insert into cat (id,catname) values (5 , 'test');
/**
* 取得上一步insert 操作产生的主键id
*/
function getLastId()
{
return mysqli_insert_id(mConn());
}
/**
* 使用反斜线 转义字符串
* @param arr 待转义的数组
* @return arr 被转义后的数组
*/
function _addslashes($arr)
{
foreach ($arr as $k => $v) {
if (is_string($v)) {
$arr[$k] = addslashes($v);
} else if (is_array($v)) {
$arr[$k] = _addslashes($v);
}
}
return $arr;
}
config.php
<?php
//salt为cookie登录的安全码
return array(
'host' => 'localhost',
'name' => 'cs',
'password' => '123456',
'databaseName' => 'cs',
'port' => '3306',
'charset' => 'utf8',
'salt' => 'Q!!RN13q&y'
);
func.php
<?php
/**
*@param str $msg 成功返回的信息
*@param str $file 跳转的文件名,返回上一页为-1
*@param int $time 延时跳转的时间,单位秒
*/
function succ($msg, $file = '', $time = 1)
{
$res = 'succ';
require ROOT . '/view/admin/info.html';
if ($file != '') {
if ($file == '-1') {
// header("Refresh:$time;url=$_SERVER[HTTP_REFERER]");
echo '<script>window.setTimeout(function() {window.history.back(-1);},' . $time . '000)</script>';
} else {
header("Refresh:$time;url=$file");
}
}
exit();
}
/**
*@param str $msg 失败返回的报错信息
*@param str $file 跳转的文件名,返回上一页为-1
*@param int $time 延时跳转的时间,单位秒
*/
function error($msg, $file = '', $time = 1)
{
$res = 'fail';
require ROOT . '/view/admin/info.html';
if ($file != '') {
if ($file == '-1') {
// header("Refresh:$time;url=$_SERVER[HTTP_REFERER]");
echo '<script>window.setTimeout(function() {window.history.back(-1);},' . $time . '000)</script>';
} else {
header("Refresh:$time;url=$file");
}
}
exit();
}
/**
*获取访客IP
*/
function getRealIp()
{
static $realip = null;
if ($realip !== null) {
return $realip;
}
if (getenv('REMOTE_ADDR')) {
$realip = getenv('REMOTE_ADDR');
} else if (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else if (getenv('HTTP_X_FROWARD_FOR')) {
$realip = getenv('HTTP_X_FROWARD_FOR');
}
return $realip;
}
/**
* 生成随机字符串
* @param int $num 生成的随机字符串的个数
* @return str 生成的随机字符串
*/
function randStr($num = 6)
{
$str = str_shuffle('abcedfghjkmnpqrstuvwxyzABCEDFGHJKMNPQRSTUVWXYZ0123456789');
return substr($str, 0, $num);
}
//echo randStr();
/**
* 创建目录 ROOT.'/upload/2015/01/25/qwefas.jpg'
* @return str 成功返回路径,失败返回false
*/
function createDir()
{
$path = '/upload/' . date('Y/m/d');
$fpath = ROOT . $path;
if (is_dir($fpath) || mkdir($fpath, 0777, true)) {
return $path;
} else {
return false;
}
}
/**
* 获取文件后缀
* @param str $filename 文件名
* @return str 文件的后缀名,且带点.
*/
function getExt($filename)
{
return strrchr($filename, '.');
}
/**
* 检测用户是否登录
* @return bool 已登录返回true,未登录返回false
*/
function acc()
{
if (!isset($_COOKIE['name']) || !isset($_COOKIE['ccode'])) {
return false;
}
return $_COOKIE['ccode'] === cCode($_COOKIE['name']);
}
/**
* 加密用户名
* @param str $name 用户登陆时输入的用户名
* @return str md5(用户名+salt)=>md5码
*/
function cCode($name)
{
$salt = require ROOT . '/lib/config.php';
return md5($name . '|' . $salt['salt']);
}
info.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="rside">
<?php if($res == 'succ'){?>
<div class="succ"><?php echo $msg?></div>
<?php }else if($res == 'fail'){?>
<div class="danger"><?php echo $msg?></div>
<?php }?>
</div>
</body>
</html>
login.php
<?php
require 'lib/init.php';
if (acc()) {
header('location: artlist.php');
}
if (empty($_POST)) {
require ROOT . '/view/admin/login.html';
} else {
$name = trim($_POST['username']);
if ($name == '') {
error('用户名不能为空');
}
if (!preg_match('/^[A-Za-z0-9_\x{4e00}-\x{9fa5}]+$/u', $name)) {
//用户名只能由数字、字母、中文汉字及下划线组成,不能包含特殊符号,在php中,不支持[\u4e00-\u9fa5]匹配汉字,而是用\x表示十六进制数据,然而php中用"[\x4e00-\x9fa5]"的写法也是错的,必须用{}把它包起来才行。此外,由于编码关系,需要用到"/u"声明编码格式。
error('用户名格式不正确');
}
$password = trim($_POST['password']);
if ($password == '') {
error('密码不能为空');
}
// $sql = "select * from user where name='$name' and password='$password'";
$sql = "select * from user where name='$name'";
$res = mGetRow($sql);
if (!$res) {
error('用户名不存在');
} else if (md5($res['salt'] . $password) !== $res['password']) {//这里的salt为密码的安全码,可以在注册成功后生成一个随机的安全码
error('密码错误');
} else {
setcookie('name', $res['name']);
setcookie('ccode', cCode($res['name']));
header('location: artlist.php');
}
}
init.php
<?php
//echo __DIR__,'<br>';//D:\xampp\htdocs\1\Blog
//echo __FILE__,'<br>';//D:\xampp\htdocs\1\Blog\init.php
//echo __LINE__;//4
header('content-type:text/html;charset=utf8');
define('ROOT', dirname(__DIR__)); //定义个ROOT常量,dirname往上跳一级
require ROOT . '/lib/mysql.php';
require ROOT . '/lib/func.php';
$_GET = _addslashes($_GET);
$_POST = _addslashes($_POST);
$_COOKIE = _addslashes($_COOKIE);
首先引入init.php,这里的art和cat是表名,mysqli_query($conn, $sql)可变为mQuery($sql)
1、增
$art['title'] = trim($_POST['title']);
$art['cat_id'] = trim($_POST['cat_id']);
$art['content'] = trim($_POST['content']);
$art['pubtime'] = time();
if (mExec('art', $art)) {
succ('添加成功');
} else {
error('添加失败');
}
2、删
$sql = "delete from cat where cat_id='$cat_id'";
if (mQuery($sql)) {
succ('删除成功');
} else {
error('删除失败');
}
3、改
$cat_id = $_GET['cat_id'];
$cat['catname'] = trim($_POST['catname']);
if (mExec('cat',$cat,'update',"cat_id=$cat_id")) {
succ('修改成功');
} else {
error('修改失败');
}
4、查
查询多行数据
$sql = "select * from cat";
$arr = mGetAll($sql);
print_r($arr);
取出一行数据
$sql = "select * from cat where cat_id='$cat_id'";
if (!mGetRow($sql)) {
error('栏目不存在');
exit();
}
查询返回一个结果
$sql = "select * from cat where cat_id='$cat_id'";
echo mGetOne($sql);
获取上一步insert 操作产生的主键id
getLastId();
使用反斜线,转义字符串
使用方法:在顶部添加一下代码
$_GET = _addslashes($_GET);
$_POST = _addslashes($_POST);
$_COOKIE = _addslashes($_COOKIE);
检测用户是否登录
if(!acc()){
header('location: login.php');
}
登录成功后添加name和ccode的cookie,请参考上面的login.php
setcookie('name', $res['name']);
setcookie('ccode', cCode($res['name']));
退出登录
setcookie('name', '', 0);
setcookie('ccode', '', 0);
header('location: login.php');