PHP常用类(已经更新文件上传类.MySql类和常用的账号登录类,常用函数类)[连载中...]
时间:2009-04-04
来源:互联网
[php]<?php
/**
* 一下午弄出来,自动载入mysql连接,并带了insert,select into功能,自能转换sql语句,已经测试.
*QQ:50291532 本人是学了asp之后在来学php的,看了很多例子都是面向过程的方式,感觉和asp没啥两样
*php要能跟.net java竞争,必须面向对象.以前那种面向过程的方式迟早被淘汰,
*php的强大功能就在于array和function.
*如果你能在把面向对象运行的熟练,我相信,不久将是一名月收入过8000的程序员
*delete我就不写了,相信大家都会吧.尽管不要用delete可以将一个字段值改成别的值,这样会好点.防止误操作
*类连载中.希望版本加分.后面将写出一些常用的类.
*/
class MySql{
protected $host,$userid,$userpass,$table,$ut,$link;
function __construct($host='localhost',$userid='root',$userpass='',$table='zl8522115',$ut='bg2312'){
$this->host=$host;
$this->userid=$userid;
$this->userpass=$userpass;
$this->table=$table;
$this->ut=$ut;
$this->connect();
}
/**
* 数据库连接方法,由类自动载入
*/
protected function connect(){
$this->link=mysql_connect($this->host,$this->userid,$this->userpass) or die ("数据加连接失败");
if($this->table!=""){
mysql_select_db("$this->table",$this->link) or die ("数据库表连接失败");
}
mysql_query("SET NAMES '$this->ut'");
}
/**
* 数据库查询语句.
* 其中$row为数组,如果全部列直接带入*就可以了,程序会自动判断的
* $row为查询的列,$table为查询的表,$conditions为条件,$compositor为排序方式
* 返回值为数据库查询出来的数组
*/
function mysql_select($row,$table,$conditions='',$compositor=''){
if(is_array($row)) $row=implode(',',$row);
$sql="select $row from $table";
if($conditions!=''){
$sql.=" where $conditions";
}
if($compositor!=''){
$sql.=" order by ".$compositor;
}
$query=mysql_query($sql) or die ("select error");
// $query=mysql_fetch_object($query); 如果在这里返回的话,外面将不好输出.
return $query;
}
/**
* 数据库插入语句.$table为表名,$keyvalue为带key的数组,数组的key为字段,数组的value为插入的值
* 函数自动为插入字符串值加上单引号
*/
function mysql_insert($table,$keyvalue){
$key=implode(',',array_keys($keyvalue));
foreach($keyvalue as $tempkey=>$val){
if(is_string($val))$keyvalue[$tempkey]="'$val'";
}
$value=implode(',',$keyvalue);
$sql="insert into $table ($key) values ($value)";
mysql_query($sql) or die ("insert error");
}
/**
* 数据库更新语句$table为数据库$keyvalue为带key的数组,$conditions为where语句
*$keyvalue说明:数组的key为字段,数组的value为更新的值
*/
function mysql_update($table,$keyvalue,$conditions=''){
foreach($keyvalue as $key=>$value){
if(is_string($value))$keyvalue[$key]="'$value'";
}
foreach($keyvalue as $key=>$value){
$update.="$key=$value,";
}
if(substr($update,-1)==",") $update=substr($update,0,strlen($update)-1);
$sql="update $table set $update";
if($conditions!="") $sql.=" where $conditions";
mysql_query($sql) or die ("update error");
}
function __destruct(){
// echo "connclose";
mysql_close($this->link);
}
}
$conn=new MySql;
$query=$conn->mysql_select('*','zlskyadmin','1=1','id asc');
/**
* 这里用array或者object都随便.不过array返回字段和偏移量,返回的太多了,object就只返回字段
*/
while($row=mysql_fetch_object($query)){
echo $row->id."--".$row->username."--".$row->password."<br>";
}
$admin=array('id'=>2,'username'=>'zlsky',password=>'zlsky');
$conn->mysql_insert('zlskyadmin',$admin);
$conn->mysql_update('zlskyadmin',$admin,"id=2");
?>
[/php]
[php]
<?php
/**
* 验证账号登入类,私有变量$user为账号,$pass为密码,$image,$image2为图片验证码的表单值和图片生成的session值
* 账号以(字母开头,允许5-16字节,允许字母数字下划线)验证才可以通过.
* 密码以(由数字、26个英文字母或者下划线组成的字符串)验证才可以通过.可以自行更改正则
* $row数组为数据库字段
* ★★★注:$row个地方有点小BUG,只能选出账号列和密码列,不然程序判断会有一点小问题的.并且账号列要在前面,密码列要在后面★★★
* ★★★暂时还想不出什么办法.只能等高手指点了.不过一般只验证账号和密码应该是没什么问题.密码由MD5加密★★★
* $table为表名,$conditions为where条件
* $url为验证通过之后将跳转到什么页面
* 类为全自动验证.如果验证码错误,账号输入非法,或者是与数据库密码不对都将跳到前一页.
* 正确将跳转到指定$url页面(注:如果要跳到本面,就填写本页面的地址);
*/
class AccountCheck extends MySql{
private $user,$pass,$image,$image2,$row,$table,$conditions,$url;
function __construct($user,$pass,$image='',$image2='',$row,$table,$conditions='',$url){
parent::__construct();
$this->user=trim($user);
$this->pass=trim($pass);
$this->image=trim($image);
$this->image2=$image2;
$this->row=$row;
$this->table=$table;
$this->conditions=$conditions;
$this->url=$url;
$this->check();
}
/**
* 自动加载函数,检测账号名,密码以及验证码是否正确
*/
function check(){
if($this->image!=$this->image2){
alert_msg("您输入的验证码有误!",1);
}
if(preg_match("/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/",$this->user) && preg_match("/^\w+$/",$this->pass)){
$this->checksql($this->row,$this->table,$this->conditions);
}else{
alert_msg("您输入的账号和密码有非法字符!",1);
}
}
/**
* 自动载入函数,检测与数据库里面字段值是否匹配.
*/
function checksql($row,$table,$conditions=''){
$checkrow=$row;
$row=implode(',',$row);
$sql="select $row from $table";
if($conditions!=''){
$sql.=" where $conditions";
}
$query=mysql_query($sql) or die ("select error");
$query=mysql_fetch_row($query);
if($query[0]==$this->user && $query[1]==md5($this->pass)){
alert_msg(false,$this->url);
}else{
// echo $this->user."<br>".md5($this->pass)."<br>".$query[0]."<br>".$query[1];
alert_msg("您输入的账号或者是密码错误",1);
}
}
}
/**
* 这里测试,定义两个字段.一定要这样,一个用户名,一个密码,不然会出问题的哟
*/
$conditions=array('username','password');
$check=new AccountCheck('admin','admin','123','123',$conditions,'zlskyadmin','id=1','function.php');
?>
[/php]
这个里面有用到一个跳转页面的函数,我加上来
[php]
<?php
/*
* 功能:综合提示JS代码输出
* 参数 $msg 为提示信息,如果等于空将不弹出提示框
* $direct 为提示类型 0为提示(默认)1为提示刷新返回 2为提示返回
* 输出提示代码并结束程序
*/
function alert_msg($msg=false,$direct = "0"){
switch($direct){
case '0'://提示
$script = "";
case '1'://提示刷新返回
$script = "location.href=\"".$_SERVER["HTTP_REFERER"]."\";";
break;
case '2'://提示返回
$script = "history.back();";
break;
default://提示转向指定页面
$script = "location.href=\"".$direct."\";";
}
if($msg==false){
echo "<script language='javascript'>".$script."</script>";
}else{
echo "<script language='javascript'>window.alert('".$msg."');".$script."</script>";
}
exit;
}
?>
[/php]
稍后我将在写几个,如果有问题或者是不理解的欢迎提问.本人可是为了1W/月的工资努力拼的
学了一个月了.呵呵.欢迎面向对象的高手指点小弟.
不过这几个基本上都够用了,但是还有分页之类的.我喜欢自己写,我会加上详细的注释,希望大家能喜欢,看懂.
二楼为常用函数.大家可能会有点用处.
作者: zl8522115 发布时间: 2009-04-04
[php]
class useful{
/*
* 常用函数类
* 作 者:多菜鸟
* 联系邮箱:kingerq AT msn DOT com
* 创建时间:2005-07-18
* 来源:http://blog.csdn.net/kingerq
*/
/*
* 功能:格式化数字,以标准MONEY格式输出
*/
function formatnumber($num){
return number_format($num, 2, ".", ",");
}
/*
* 功能:格式化文本,将\n转成<br>等
* 参数:$string 来源字符串
* 返回:处理后的字符串
*/
function formatstring($string = ""){
$string = preg_replace(array("/ /", "/ /"), array(" ", " "), $string);
return nl2br($string);
}
/*
* 功能:格式化文本输出
* 参数 $text 为需格式化的文本内容
*/
function formatcontent($text){
$trans = get_html_translation_table(HTML_SPECIALCHARS);
$trans = array_flip($trans);
$text = strtr($text, $trans);
//$text = str_replace("\n", "<br>", $text);
//$text = str_replace(" ", " ", $text);
return $text;
}
/*
* 将字节转换成Kb或者Mb...
* 参数 $num为字节大小
*/
function bitsize($num){
if(!preg_match("/^[0-9]+$/", $num)) return 0;
$type = array( "B", "KB", "MB", "GB", "TB", "PB" );
$j = 0;
while( $num >= 1024 ) {
if( $j >= 5 ) return $num.$type[$j];
$num = $num / 1024;
$j++;
}
return $num.$type[$j];
}
/*
* 功能:不足3的倍数位的数字,用0补足
* $num 需补充的数字
* 返回补充完整的数字串
*/
function prefix($num){
if( strlen( $num ) % 3 == 0 ) {
return $this->prefix("0".$num);
}
return $num;
}
/*
* 功能:连续建目录
* $dir 目录字符串
*/
function makedir( $dir, $mode = "0777" ) {
if( ! $dir ) return 0;
$dir = str_replace( "\\", "/", $dir );
$mdir = "";
foreach( explode( "/", $dir ) as $val ) {
$mdir .= $val."/";
if( $val == ".." || $val == "." ) continue;
if( ! file_exists( $mdir ) ) {
if(!@mkdir( $mdir, $mode )){
echo "创建目录 [".$mdir."]失败.";
exit;
}
}
}
return true;
}
/*
* 功能:检测时间的正确性
* $date 为时间,例:YYYY-MM-DD
* 返回:通过返回true,反之返回false
*/
function chkdate( $date ) {
$d = explode( "-", $date );
if( checkdate( $d[1], $d[2], $d[0] ) ) {
return true;
}else {
return false;
}
}
/*
* 防注入处理(为变量加入斜杠)函数
* 参数 $array 为防注入变量数组
*/
function add_s(&$array){
foreach($array as $key=>$value){
if(!is_array($value)){
$array[$key]=addslashes($value);
}else{
$this->add_s($array[$key]);
}
}
}
/*
* 转换HTML特殊字符(表单提交的时候使用,防止恶意JS代码)
* 参数 $array 为需转换的字符串或者数组
*/
function specialhtml(&$array){
if(is_array($array)){//数组处理
foreach($array as $key=>$value){
if(!is_array($value)){
$array[$key]=htmlspecialchars($value);
}else{
$this->specialhtml($array[$key]);
}
}
}else{
$array = htmlspecialchars($array);
}
}
/*
* 可以避免乱码的截取汉字
* 参数 $str 为字符串,$start 为开始字符,$len 结束字符
* 返回截取后的字符
*/
function msubstr($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
/*
* 功能:综合提示JS代码输出
* 参数 $msg 为提示信息,如果等于空将不弹出提示框
* $direct 为提示类型 0为提示(默认)1为提示刷新返回 2为提示返回
* 输出提示代码并结束程序
*/
function alert_msg($msg=false,$direct = "0"){
switch($direct){
case '0'://提示
$script = "";
case '1'://提示刷新返回
$script = "location.href=\"".$_SERVER["HTTP_REFERER"]."\";";
break;
case '2'://提示返回
$script = "history.back();";
break;
default://提示转向指定页面
$script = "location.href=\"".$direct."\";";
}
if($msg==false){
echo "<script language='javascript'>".$script."</script>";
}else{
echo "<script language='javascript'>window.alert('".$msg."');".$script."</script>";
}
exit;
}
/*
* 功能:取得给定日期所在周的开始日期和结束日期
* 参数:$gdate 日期,默认为当天,格式:YYYY-MM-DD
* $first 一周以星期一还是星期天开始,0为星期天,1为星期一
* 返回:数组array("开始日期", "结束日期");
*/
function aweek($gdate = "", $first = 0){
if(!$gdate) $gdate = date("Y-m-d");
$w = date("w", strtotime($gdate));//取得一周的第几天,星期天开始0-6
$dn = $w ? $w - $first : 6;//要减去的天数
$st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
$en = date("Y-m-d", strtotime("$st +6 days"));
return array($st, $en);//返回开始和结束日期
}
/*
* 功能:检测页面是否合法连接过来
* 如果为非法,就转向到登陆窗口
*/
function checkurl(){
//如果直接从浏览器连接到页面,就连接到登陆窗口
//echo "referer:".$_SERVER['HTTP_REFERER'];
if(!isset($_SERVER['HTTP_REFERER'])) {
header("location: index.php");
exit;
}
$urlar = parse_url($_SERVER['HTTP_REFERER']);
//如果页面的域名不是服务器域名,就连接到登陆窗口
if($_SERVER["HTTP_HOST"] != $urlar["host"]) {
header("location: index.php");
exit;
}
}
/*
* 读取文件内容
* 参数 $file 为文件名及完整路径
* 返回文件内容
*/
function readfiles($file){
$tdata = "";
$fp = fopen($file, "r");
if(filesize($file) <= 0) return;
while($data = fread($fp, filesize($file))){
$tdata .= $data;
}
fclose($fp);
return $tdata;
}
}
[/php]
下面为一些常用的检测函数
[php]
/*
函数名称:inject_check()
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全
参 数:$sql_str: 提交的变量
返 回 值:返回检测结果,ture or false
*/
function inject_check($sql_str) {
return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤
}
/*
函数名称:verify_id()
函数作用:校验提交的ID类值是否合法
参 数:$id: 提交的ID值
返 回 值:返回处理后的ID
*/
function verify_id($id=null) {
if (!$id) { exit('没有提交参数!'); } // 是否为空判断
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断
$id = intval($id); // 整型化
return $id;
}
/*
函数名称:str_check()
函数作用:对提交的字符串进行过滤
参 数:$var: 要处理的字符串
返 回 值:返回过滤后的字符串
*/
function str_check( $str ) {
if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开
$str = addslashes($str); // 进行过滤
}
$str = str_replace("_", "\_", $str); // 把 '_'过滤掉
$str = str_replace("%", "\%", $str); // 把 '%'过滤掉
return $str;
}
/*
函数名称:post_check()
函数作用:对提交的编辑内容进行处理
参 数:$post: 要提交的内容
返 回 值:$post: 返回过滤后的内容
*/
function post_check($post) {
if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post = str_replace("_", "\_", $post); // 把 '_'过滤掉
$post = str_replace("%", "\%", $post); // 把 '%'过滤掉
$post = nl2br($post); // 回车转换
$post = htmlspecialchars($post); // html标记转换
return $post;
}
[/php]
作者: zl8522115 发布时间: 2009-04-04
[php]
<?php
class upfile{
/**
* 初始化文件上传大小限制,上传的路径.默认为上级目录uploadimg文件夹下
*/
public $max_file_size,$destination_folder;
/**
* $watertype=1; 水印类型(1为文字,2为图片)
* $waterposition=3; //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
* $waterstring="zlsky"; //水印字符串 $waterimg="../uploadimg/logo.jpg"; //水印图片
* $imgpreview=0; //是否生成预览图(1为生成,其他为不生成); $imgpreviewsize=0.5; //缩略图比例
* $inputname='upfile' 上传表单名,默认为upfile
*/
public $watertype=1,$waterposition=3,$waterstring='zlsky',$waterimg='../uploadimg/logo.jpg',$imgpreview=0,$imgpreviewsize=0.5,$inputname='upfile';
/**
* 文件上传类型,默认为图片类型
*/
public $fname;
public $uptypes=array(
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png'
);
function __construct($destination_folder='../uploadimg/',$max_file_size=2000000){
$this->max_file_size=$max_file_size;
$this->destination_folder=$destination_folder;
}
function upfile(){
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!is_uploaded_file($_FILES["$this->inputname"][tmp_name]))
//是否存在文件
{
echo "图片不存在!";
exit;
}
$file = $_FILES["$this->inputname"];
if($this->max_file_size < $file["size"])
//检查文件大小
{
echo "文件太大!";
exit;
}
if(!in_array($file["type"], $this->uptypes))
//检查文件类型
{
echo "文件类型不符!".$file["type"];
exit;
}
if(!file_exists($this->destination_folder))
//文件夹是否存在,如果不存在就建立文件夹
{
mkdir($this->destination_folder);
}
$filename=$file["tmp_name"]; //取得临时文件名
$image_size = getimagesize($filename); //取得图片的长度
$pinfo=pathinfo($file["name"]); //取得文件名
$ftype=$pinfo['extension']; //只取得文件名,删除掉了类型,例如test.jpg 就会变成jpg
$destination = $this->destination_folder.time().".".$ftype; //连接文件夹加上 time()函数,意思是返回取得时间的 UNIX 时间戳记在加一个.在加个文件类型名
if (file_exists($destination) == true) //判断如果文件夹存在
{
echo "同名文件已经存在了";
exit;
}
if(!move_uploaded_file ($filename, $destination)) //判断如果移动临时变量到目标文件夹下出错的话,就提示出错,并退出php
{
echo "移动文件出错";
exit;
}
$pinfo=pathinfo($destination); //得到改名后的文件名
$this->fname=$pinfo[basename]; //可能是防止有啥问题吧,又在一次得到文件名,意思应该是去掉文件夹.不过上面已经去掉一次了.又来一次
return true;
// echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>".$destination_folder.$fname."</font><br>";
// echo " 宽度:".$image_size[0];
// echo " 长度:".$image_size[1];
// echo "<br> 大小:".$file["size"]." bytes";
}else{
return false;
}
}
/**
* 下面的函数为加水印.暂时用不上,我也没时间改.有空我在改吧
*/
// function watermark(){
// $iinfo=getimagesize($destination,$iinfo);
// $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
// $white=imagecolorallocate($nimage,255,255,255);
// $black=imagecolorallocate($nimage,0,0,0);
// $red=imagecolorallocate($nimage,255,0,0);
// imagefill($nimage,0,0,$white);
// switch ($iinfo[2])
// {
// case 1:
// $simage =imagecreatefromgif($destination);
// break;
// case 2:
// $simage =imagecreatefromjpeg($destination);
// break;
// case 3:
// $simage =imagecreatefrompng($destination);
// break;
// case 6:
// $simage =imagecreatefromwbmp($destination);
// break;
// default:
// die("不支持的文件类型");
// exit;
// }
//
// imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
// imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
//
// switch($watertype)
// {
// case 1: //加水印字符串
// imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
// break;
// case 2: //加水印图片
// $simage1 =imagecreatefromgif("xplore.gif");
// imagecopy($nimage,$simage1,0,0,0,0,85,15);
// imagedestroy($simage1);
// break;
// }
//
// switch ($iinfo[2])
// {
// case 1:
// //imagegif($nimage, $destination);
// imagejpeg($nimage, $destination);
// break;
// case 2:
// imagejpeg($nimage, $destination);
// break;
// case 3:
// imagepng($nimage, $destination);
// break;
// case 6:
// imagewbmp($nimage, $destination);
// //imagejpeg($nimage, $destination);
// break;
// }
//
// //覆盖原上传文件
// imagedestroy($nimage);
// imagedestroy($simage);
// }
}
?>
[/php]
使用例子:
我就拿一个我自己编写的产品添加代码给大家看一下.
mysql类是用的我自己编的类,就是1楼的类.
[php]
<?php
if($_POST['submit']){
zlsky_post_trim();
$sql=new MySql();
$arr=array("product_spec"=>"$_POST[spec]","product_candi"=>"$_POST[producing_area]","product_price"=>$_POST[spread],"product_title"=>"$_POST[producttitle]","product_kind"=>"$_POST[productkind]","product_visible"=>"$_POST[visible]","product_content"=>"$_POST[gcontent]");
if (is_uploaded_file($_FILES["upfile"][tmp_name])){
include("inc/upfileclass.php");
$upfile=new upfile();
$upfile->upfile();
$arr['product_img']="$upfile->fname";
}
if($sql->mysql_insert('product',$arr)){
alert_msg("产品添加成功",1);
}else{
alert_msg("产品添加失败",1);
}
}
break;
?>
[/php]
作者: zl8522115 发布时间: 2009-04-04
作者: 山猫 发布时间: 2009-04-04
作者: dongfangling 发布时间: 2009-04-05
作者: flutesing 发布时间: 2009-04-05
作者: lssxlh 发布时间: 2009-04-06
作者: 上课睡觉 发布时间: 2009-04-06
作者: cain 发布时间: 2009-04-06
作者: zl8522115 发布时间: 2009-04-27
作者: 無戒寺 发布时间: 2009-04-27


作者: denly6666 发布时间: 2009-04-27
作者: tochenwei 发布时间: 2009-05-08

作者: 埖落埖閞 发布时间: 2009-05-08
作者: slg1984 发布时间: 2009-05-08
作者: cyr11 发布时间: 2009-05-10

作者: 埖落埖閞 发布时间: 2009-05-18
作者: tingfeng0311 发布时间: 2009-05-18
收藏
作者: didan 发布时间: 2009-06-28
作者: xiaokai 发布时间: 2009-06-28
作者: uncleliu 发布时间: 2009-06-28
作者: garnetty 发布时间: 2009-06-30
作者: williamzhao 发布时间: 2010-04-03
作者: 草泥马戈壁 发布时间: 2010-04-04


作者: say764211502 发布时间: 2010-04-16
有点小问题
$uf='gb2312'
作者: jjww 发布时间: 2010-04-21
作者: zhsanshi 发布时间: 2010-04-21
作者: zhsanshi 发布时间: 2010-04-21
作者: ccs6510322 发布时间: 2010-04-21

作者: elileo 发布时间: 2010-04-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28