Google

笔记分类

显示标签为“php”的博文。显示所有博文
显示标签为“php”的博文。显示所有博文

2009年3月5日星期四

php实现文件上传操作

标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码

上传文件保存函数:
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);

字符串截取函数substr ( )详解

原型:string substr ( string $string , int $start [, int $length ] ),它可以用于在一个较长的(9php.com)字符串中查找匹配的(9php.com)字符串或字符。$string为所要处理的(9php.com)字符串,$start为开始选取的(9php.com)位置,$length为要选取的(9php.com)长度
例:
//此教程来源于97xxoo教程网(www.97xxoo.org)
查看完整的(9php.com)教程请点:http://www.97xxoo.org/article/1/2008/20081115345.shtml
$rest1 = substr("abcdef", 0, 0); // returns ""
$rest2 = substr("abcdef", 0, 2); // returns "ab"
$rest3 = substr("abcdef", 0, -1); // returns "abcde"
$rest4 = substr("abcdef", 2,0); // returns ""
$rest5 = substr("abcdef", 2,2); // returns "cd"
$rest6 = substr("abcdef", 2, -1); // returns "cde"
$rest7 = substr("abcdef", -2,0); // returns ""
$rest8 = substr("abcdef", -2,2); // returns "ef"
$rest9 = substr("abcdef", -2,-1); // returns "e"
?>
$start如果为非负数,在字符串中以0为开头从左向右开始记数,草榴社区即0代表字符"a",1则代表字符"b",以此类推。如果是负数,在字符串中以1为开头从右向左开始记数,即-1代表字符"f",-2代表字符"e",同理也可以此类推。
该函数在使用中有时也省略 $length,这个时候如果只用一个正数作为子字符串起点,将得到从起点到字符串结束的(9php.com)整个字符串。如果只用一个负数作为子字符串起点,将得到一个原字符串尾部的(9php.com)一个子字符串,字符个数等于负数的(9php.com)绝对值,其实原理和上述不省略$length时一样。只是不用再去判断所取字符的(9php.com)个数,单去判断起始位置就OK。
例:
$rest1 = substr("abcdef", 2); // returns "cdef"
$rest2 = substr("abcdef", -2); // returns "ef"
?>

2009年1月4日星期日

MySQL联合查询实例

表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115

表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408


实验如下:
1.left join

sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)

结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.

2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.


3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID

结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.